第四了解汇编源程序从编写→调试
1.简单的汇编源程序结构:
① 组成
② 几个常用的伪指令
③ 两条特殊指令
(a) 指令
产生机器码;由CPU执行;是程序执行的关键
(b) 伪指令
不产生机器码;由汇编器处理;
做一些辅助性操作,如: 界定段的起止,界定程序结束位置等
(c) 标号、注释等
不产生机器码;由汇编器处理;
常与伪指令配合使用,做一些辅助性操作
2.注意:
① 编写汇编源程序时,默认是十进制。对于十六进制,需手动添加H。如:
mov ax, 30H debug工具中默认是十六进制。二者不要混淆。
② 使用debug调试时,调试的必须是得到的可执行文件,且要带扩展名。即: debug ××.exe
③ 使用debug ××.exe调试时,首次进入调试界面时,寄存器CX中存放的是可执行文件机器码长度。
可以通过u命令,结合CS、IP、CX的值,对*.exe文件反汇编,得到汇编源程序。单步调试时,调试到int 21h这条时,使用p命令。
第1步,编写汇编程序文件example.asm (使用任何文本编辑器均可)
第2步,对example.asm进行汇编,得到目标文件example.obj
第3步,对example.obj进行链接,得到可执行文件example.exe
第4步,执行。
第5步,使用debug调试可执行文件example.exe
第5章 [BX]和loop
1. 内存单元间接表示: [bx]
用[bx]表示表示内存单元
可以使用bx间接访问内存单元。默认,段地址在ds。
2. loop指令
(1) 语法格式
loop 标号
(2) CPU执行指令过程
① (cx) ← (cx) - 1
② 判断cx的值是否为0。
如果(cx) ≠ 0,跳转到标号处执行;
如果(cx) = 0, 执行loop后面的其它指令。
总结:
loop指令可以用来实现循环。需要和cx配合使用。
框架:
mov cx, 循环次数
标号: (需要循环执行的指令片段)
…
loop 标号
t命令:
单步执行;遇loop会进入循环内部继续单步执行;
遇int会进入中断程序内继续单步执行;
p命令:
单步执行;遇loop或int会当做整体执行,不进入内部单步
g命令:
执行到指定地址;或遇程序结束或int,则终止执行
3. loop指令和[bx]的联合应用
(1) 指令中类型匹配、结果超范围问题
(2) inc指令
inc 寄存器 inc bx bx ← (bx) + 1
inc 内存单元 inc [3] ds:3 ← ((ds)×16 +3) + 1
4.注意事项:
(1) 在综合应用编程中,要注意:
① 指令中操作数类型是否匹配;
② 结果是否会超出寄存器或内存单元表示范围;
(2) 可综合应用loop, [bx], inc指令实现循环,
简化汇编源程序
5.编写程序注意事项:
段前缀
安全内存空间
反汇编中问题处理
6.总结:
内存单元间接表示: [bx]
loop指令
loop指令和[bx]的联合应用
其它Tips:
inc指令、段前缀、安全内存空间
对于内存单元表示[0]的反汇编处理
debug中的命令: t, p, g