第一个汇编程序
①源程序 Hello.asm
assume cs:Hello ;假设ip为Hello,cs:ip指向的是程序执行的内存地址
Hello segment ;定义一个段Hello
mov ax,2 ;3个字节
mov bx,3 ;在段中写汇编语句,3个字节
mov ax,4c00H;3个字节
int 21H ;程序返回 2个字节
Hello ends ;段的结束地
end ;程序的结束地
② 程序运行原理
要执行A程序必须要有一个正在执行的B程序,B程序将A程序加载进内存,将CPU的控制权交给A程序,B程序暂停执行,当A程序执行完后,再将CPU控制权交给B
那么如何将CPU执行权返回给B程序呢?该返回过程叫做程序返回
mov ax,4c00H int 21H
这两条指令做的就是程序返回,具体指令含义不解释
③编译,连接,运行,跟踪程序
- 首先把masm和linker软件添加到环境变量,两个程序可自行网上下载
- 编译:
OBJ:目标文件(要的结果)
LST:列表文件名,中间结果
CRF:交叉引用文件
完成之后可看到有一个HELLO.OBJ文件
- 连接
执行link命令,输入HELLO.OBJ一路ENTER,最后生成HELLO.EXE文件
- 运行 Debug跟踪 HELLO.EXE
可以看到,用U命令查看即将执行程序的汇编指令,就是我们刚刚写的Hello.asm
,CX代表的是U命令查看到的本程序的指令大小,B(11)个字节,
- 程序的所在内存地址:
DS+10:0 1447 也是 CS的值,CPU通过SS段寄存器以及SP寄存器(偏移地址)来指向栈顶元素的地址,SS也就是栈顶的地址
最后BX变成了3,AX变成了4c00,要用p命令执行int 21H,不为什么