汇编学习笔记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;