第一个汇编程序

第一个汇编程序

(1)源程序 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,不知道为什么


打赏 支付宝打赏 微信打赏