您现在的位置是:首页 > 创新技术
编程|汇编器和连接器的下载及汇编、连接、调试一个简单汇编程序
智慧创新站
2025-05-27【创新技术】30人已围观
简介汇编程序从写出到执行的过程:1下载汇编器和连接器主要是和,保存到f:\asm目录下2编写汇编程序assumeCS:codesgcodesgsegmentstart:movAX,01234movBX,04567addAX,BXaddAX,AXmovAX,4C00Hint21Hcodesgsassume...
汇编程序从写出到执行的过程:

1下载汇编器和连接器
主要是和,保存到f:\asm目录下
2编写汇编程序
assumeCS:codesgcodesgsegmentstart:movAX,01234movBX,04567addAX,BXaddAX,AXmovAX,4C00Hint21Hcodesgs
assume:含义为“假设”。它假设某一段寄存器和程序中的某一个用segment…s定义的段(指一段内存,通过首地址和偏移来定位内存单元)相关联。
通过assume说明这种关联,在需要的情况下,编译程序可以将段寄存器和某一个具体的段相联系。
CS(CodeSegment),一个代码段寄存器,保存内存段的起始地址。
codesg:放在segment的前面,作为一个段的名称,这个段的名称最终将被编译、连接程序处理为一个段的段地址。
segment和s是一对成对使用的伪指令,这是在写可被编译器编译的汇编程序时,必须要用到的一对伪指令。
segment和s的功能是定义一个段,segment说明一个段开始,s说明一个段结束。
一个段必须有一个名称来标识,使用格式为:
段名segment段名s
一个汇编程序是由多个段组成的,这些段被用来存放代码、数据或当作栈空间来使用。
一个有意义的汇编程序中至少要有一个段,这个段用来存放代码。
这个简单的汇编程序实例只用到了三个汇编指令:
是一个汇编程序的结束标记,编译器在编译汇编程序的过程中,如果碰到了伪指令,就结束对源程序的编译。(不要搞混了和s)
如果程序写完了,要在结尾处加上伪指令。否则,编译器在编译程序时,无法知道程序在何处结束。
上面的文件保存到f:\asm下。
3编译
打到cmd,cd/df:\asm↙
masm↙↙↙↙
会生成一个obj文件;
4连接
link↙↙↙↙↙会生成一个文件
也可以通过以下命令来进行快速编译和连接:
↙
↙
5使用Debug的相关命令来单步执行程序,查看每条指令指令的执行结果。
一些寄存器的英文缩写↓
cx中存放的是程序的长度。
在DOS系统中.EXE文件中的程序的加载过程如下:
程序加载后,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。
用U命令查看一下其他指令:
用T命令执行程序中的每一条指令,并观察每条指令的执行结果,到了int21,我们要用P命令执行:
--
很赞哦!(196)