本文是《汇编语言》一书的学习笔记,对应书中的4-6章。
汇编程序的执行
要想将源代码变为可执行的程序需经过编译、连接两个步骤,WIN7操作系统下需要MASM程序来进行编译连接工作。将MASM和Debug安装在E:Softwareassembly目录下并新建code文件夹,创建汇编源程序1.asm,使用masm命令编译,link命令连接。
1 ;演示的小程序 2 3 assume cs:code 4 code segment 5 6 mov ax,1 7 mov bx,2 8 add ax,bx 9 sub bx,1 10 11 mov ax,4c00h 12 int 21h 13 14 code ends 15 16 end
执行link命令后assembly目录下生成1.exe和1.obj两个文件,1.obj为编译过程中的目标文件,1.exe即可执行的二进制文件。1.obj中存储着远程需的描述信息,程序的大小、占用多少空间,当然还有翻译成机器码的源程序代码。
生成1.exe可执行文件后,用debug命令跟踪调试程序。
r命令查看寄存器信息,u命令查看内存中的程序代码。使用Debug加载程序后,ds存储程序开始的段地址,cs指向第一行代码。在ds和cs之间有一段大小为256字节的空间,称为程序段前缀,所以ds-cs=10H。
[bx]
[bx]表示将bx中的值(bx)作为偏移地址来表示一个内存单元,段地址在ds中,也可以显示的指定段地址即ds:[bx]。
loop
loop是循环指令,循环执行从标号开始的内容,下面是计算2^5的代码。
1 ;演示2^5的小程序 2 3 assume cs:code 4 5 code segment 6 7 mov ax,2 8 mov cx,4 9 s: add ax,2 10 loop s 11 12 mov ax,4c00h 13 int 21h 14 15 code ends 16 17 end
cx中存储的是循环次数,s是标号,执行到loop s会先将cx-1判断cx是否=0,若不等于0则执行s处代码。