I. 汇编语言入门
汇编程序的结构
一个汇编语言程序的框架如下:
.386 ; 表示每个段默认使用32位偏移宽度
data segment use16 ; 表示端内偏移地址宽度是16位
变量、数组定义...
data ends
code segment use16
assume cs:code, ds:data
main:
mov ax, data
mov dx, ax
程序主体...
mov ah, 4ch
mov al, 0 ; 这里AL寄存器的值表示程序返回码
int 21h ; 调用int21h中断,在AH=4Ch时对应的功能是结束程序
code ends
end main ; 指定程序首条指令的位置
- 用
assume建立段地址和段寄存器的关联,这并不会真的修改段寄存器的值,而会帮助编译器在编译源程序时把变量或标号的段地址替换成关联的段寄存器。
编译与运行
略。
调试
使用 debug 调试
- R 指令:查看、改变 CPU 寄存器的内容
- D 指令:查看内存中的内容
- T 指令:执行一条机器指令
- G 指令:从停顿的地方运行到底
使用 Turbo Debug 调试
需要使用 tasm 编译,tlink 链接:
tasm /zi hello;
tlink /v/s hello;
td hello
常用快捷键如下:
- F7 单步执行(带跟踪)
- F8 单步执行(不带跟踪)
使用 soft-ice 调试
其他基础知识
常用中断 int 21h
中断表(中文)参见: https://blog.csdn.net/Zach_z/article/details/78576216 。
| AH | 功能 | 调用参数 | 返回参数 |
|---|---|---|---|
| 00 | 程序终止 | CS=程序段前缀 | |
| 01 | 键盘输入并回显 | AL=输入字符 | |
| 02 | 显示输出 | DL=输出字符 | |
| 09 | 显示字符串, | DS:DX=字符串地址 | |
| 4C | 带返回码结束 | AL=返回码 |
Comments