在前面的章节中不仅搭建了dosbox汇编环境,同时还介绍了mov、add、sub、push、pop等汇编指令,也了解了CPU是怎么操控数据和运行指令的。但对于一个功能来说,是需要不同的指令组合才能实现的,同时对于汇编源程序的运行,还需要对其编译生成包含机器码的目标文件,之后通过连接功能最终生成可执行文件。
对于最终生成的可执行文件,可以通过dosbox把可执行文件中的机器指令装载到内存中,同时运用R和T指令来查看相应寄存器和执行程序。
dosbox装载过程如下:
- 找到一段起始地址为 段地址(SA):0000H 的容量足够的空闲空间
- 在该内存空间的前256个字节中创建一个程序段前缀(PSP)的数据区,dos需要利用该数据区来和被加载的程序进行通信
- PSP后的内存空间用来装载指令。此时指令的段地址为SA+10H,偏移地址依旧为0,按照前面章节介绍的寻址方式,10H*16 即为256个字节
- 将该内存的段地址存入寄存器DS中,同时设置CS:IP指向程序指令的开始地址
该分配的内存地址如下图所示:
现有以下功能:
计算寄存器AX和BX的和,结果存放AX中,并交换AX和BX的值:
assume cs:codesg
codesg segment
mov ax, 1000H
mov bx, 2000H
add ax, bx
mov ss, bx
mov sp, 0
push ax
push bx
pop