汇编语⾔——汇编程序从写出到最终执⾏的过程⼀个汇编语⾔程序从写出到最终执⾏的简要过程:
编写--〉编译--〉连接--〉执⾏
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 ⽬录,运⾏。
如果源程序⽂件不是以 asm 为扩展名的话,就要输⼊它的全名。⽐如p1.txt。
在输⼊源程序⽂件名的时候⼀定要指明它所在的路径。如果⽂件就在当前路径下,只输⼊⽂件名就可以。
输⼊要编译的源⽂件⽂件名后,按 Enter键。
⽬标⽂件(*.obj)是我们对⼀个源程序进⾏编译要得到的最终结果。
编译程序默认要输出的⽬标⽂件名为1.obj,所以可以不必再另⾏指定⽂件名。
3、连接
我们刚刚把⽂件编译成了(*.obj)的格式,现在要将.obj格式 --> .exe格式
连接⽅法
进⼊DOS⽅式,进⼊C:\masm⽬录,运⾏。
如果⽬标⽂件不是以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。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。