汇编学习笔记1
学习参考书目《汇编语言》第二版 郑晓薇 机械工业出版社
假设X=4,Y=5,Z=((X+Y)*8-X)/2。编写一个汇编程序实现公式计算:
DATAS SEGMENT
X DW 4 ;定义X为字单元,值为4
Y DW 5
Z DW ? ;定义z为空单元
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV BX,X
MOV AX,Y
ADD AX,BX ;加法
MOV CL,3
SAL AX,CL ;算数左移3位,相当于乘以8
SUB AX,X
SAR AX,1 ;算术右移一位,相当于除以2
MOV Z,AX
MOV Z,AX
MOV AH,4CH
INT 21H
CODES ENDS
END START
含义:
1)x,y,z这三个变量应该看成存储单元,符号地址
2)用ASSUME伪指令说明段寄存器和段名之间的关系
3)START代表其后的汇编指令 MOV AX,DATAS所在单元的偏移地址,该指令的逻辑指令为CS:START
4) INT 21H是DOS中断调用指令;4CH号功能作用是结束程序,返回DOS
(1)反汇编指令U
第一条指令逻辑地址0B52:0000,即指定是从代码段0号单元开始存放的;
如果程序较长,一屏显示不下,应该接着按U指令,直到出现程序的最后一条指令(
MOV AH,4CH
INT 21H
)
(2)执行程序命令G
G命令可以连续执行指令一直到所给出的断点为止。
AX=4C22,其中AH=4C ,应该是MOVAH,4CH造成的;
(3)查看存储单元命令D
查看存储单元命令D
在程序中定义的X,Y,Z都是字单元,因此把两个字节看成一个字单元;
所以,1号和0号单元中的0004是X的值,3号和2号单元中的0005是Y的值,而
5号单元和4号单元中的0022就是Z的值;
(4)退出DEBUG指令Q
执行Q指令后,退出DEBUG返回DOS;