汇编语言程序设计笔记

时间:2022-10-10 04:51:03

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

含义:

1xyz这三个变量应该看成存储单元,符号地址

2)用ASSUME伪指令说明段寄存器和段名之间的关系

3START代表其后的汇编指令 MOV AX,DATAS所在单元的偏移地址,该指令的逻辑指令为CS:START

4 INT 21HDOS中断调用指令;4CH号功能作用是结束程序,返回DOS


1)反汇编指令U


 

第一条指令逻辑地址0B520000,即指定是从代码段0号单元开始存放的;

如果程序较长,一屏显示不下,应该接着按U指令,直到出现程序的最后一条指令(

 MOV AH,4CH

    INT 21H

2)执行程序命令G

汇编语言程序设计笔记

G命令可以连续执行指令一直到所给出的断点为止。

AX=4C22,其中AH=4C ,应该是MOVAH,4CH造成的;

3查看存储单元命令D

汇编语言程序设计笔记

查看存储单元命令D

        在程序中定义的XYZ都是字单元,因此把两个字节看成一个字单元;

所以,1号和0号单元中的0004X的值,3号和2号单元中的0005Y的值,而

5号单元和4号单元中的0022就是Z的值;

4)退出DEBUG指令Q

执行Q指令后,退出DEBUG返回DOS;