1.上篇文章写了一个hello world程序,这篇文章,我们来详细分析它的执行过程。
代码如下:
DATAS SEGMENT
STRING DB 'Hello World!',13,10,'$'
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
LEA DX,STRING
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START
2.首先看
mov ax,datas
mov ds,ax
这句代码的意思是把数据段(data)的段基址赋值给ds
因为立即数不能直接赋值给段寄存器DS所以需要中间寄存器
我们可以查看寄存器AX的变化
这是执行代码前
执行代码后
可以看出数据段的段基址变成了076AH
接着看下一句指令
lea dx,string
的执行结果
因为string的偏移地址为0000H所以,DX的值还为0000H
3.
MOV AH,9的意义为
MOV AH,4CH的意义为
结束程序,将控制权交操作系统