• 汇编语言——汇编程序从写出到最终执行的过程


    一个汇编语言程序从写出到最终执行的简要过程:
    编写--〉编译--〉连接--〉执行

    1、编写

    notepad++选择Assembly编写程序,保存成xx.asm,样式如下

    assume cs:abc    ; abc被我们当做代码段来使用,so要把它和cs联系起来
    abc segment        ; 定义一个段(abc),到ends结束
    start:    mov ax,2    ; 给程序一个起始位置,从这开始到段结束的位置才是汇编指令,其他的都是伪指令(给编译器看的)
            add ax,ax    ; 在这个代码段写入汇编指令(这个段就是我们定义的代码段)
            add ax,ax
            mov ax,4c00H    ; 这两句汇编指令就是程序返回
            int 21H        ; 我们暂时不需要知道这两句话为啥是这样的,只要知道它的作用是程序返回(将CPU的控制权还给使它能运行的程序)
    abc ends    ; 代码段结束 
    end    start    ; 指出程序结束的位置

    2、编译

    程序经过编译后成为可执行文件

    编译方法

    进入DOS方式(cmd),进入 C:masm 目录,运行masm.exe。
    如果源程序文件不是以 asm 为扩展名的话,就要输入它的全名。比如p1.txt。
    在输入源程序文件名的时候一定要指明它所在的路径。如果文件就在当前路径下,只输入文件名就可以。
    输入要编译的源文件文件名后,按 Enter键。
    目标文件(*.obj)是我们对一个源程序进行编译要得到的最终结果。
    编译程序默认要输出的目标文件名为1.obj,所以可以不必再另行指定文件名。

    3、连接

    我们刚刚把文件编译成了(*.obj)的格式,现在要将.obj格式 --> .exe格式

    连接方法

    进入DOS方式,进入C:masm目录,运行link.exe。
    如果目标文件不是以obj为扩展名的话,就要输入它的全名。比如:p1.bin。
    在输入目标文件名的时候,要注意指明它所在的路径。这里,我们要连接的文件是当前路径下1.obj,所以此处输入“1”。
    输入要连接的目标文件名后,按Enter键。
    可执行文件是我们对一个程序进行连接要得到的最终结果。
    连接程序默认要输出的可执行文件名为 1.EXE ,所以可以不必再另行指定文件名。
    我们直接按 Enter 键,使用连接程序设定的可执行文件名。

    连接的作用

    连接的作用有以下几个:
    当源程序很大时,可以将它分为多个源程序文件来编译,每个源程序编译成为目标文件后,再用连接程序将它们连接到一起,生成一个可执行文件;
    程序中调用了某个库文件中的子程序,需要将这个库文件和该程序生成的目标文件连接到一起,生成一个可执行文件;
    一个源程序编译后,得到了存有机器码的目标文件,目标文件中的有些内容还不能直接用来生成可执行文件,连接程序将这此内容处理为最终的可执行信息。
    所以,在只有一个源程序文件,而又不需要调用某个库中的子程序的情况下,也必须用连接程序对目标文件进行处理,生成可执行文件。

    4、执行

    直接在目录下执行1.exe

    EXE文件中的程序的加载过程

    程序真正开始的位置是SA:100H位置,那256(100H)个内存单元是存放PSP的。

    PSP的作用:连接程序与系统的接口。

    程序加载后,ds中存放着程序所在内存区的段地址,这个内存区的偏移地址为 0 ,则程序所在的内存区的地址为:ds:0;
    这个内存区的前256 个字节中存放的是PSP,dos用来和程序进行通信。
    从 256字节处向后的空间存放的是程序。
    所以,我们从ds中可以得到PSP的段地址SA,PSP的偏移地址为 0,则物理地址为SA×16+0。
    因为PSP占256(100H)字节,所以程序的物理地址是:SA×16+0+256= SA×16+16×16=(SA+16)×16+0,可用段地址和偏移地址表示为:SA+10:0。

  • 相关阅读:
    vim复制
    嵌入式Linux学习(二)
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1025 数的划分
    (Java实现)洛谷 P1093 奖学金
    (Java实现)洛谷 P1093 奖学金
    Java实现 洛谷 P1064 金明的预算方案
  • 原文地址:https://www.cnblogs.com/x54256/p/8087099.html
Copyright © 2020-2023  润新知