大二下的时候学了汇编,当时用的是 Masm 软件,但是一直没有去折腾,今天折腾了下,发现原来调试这么有用!!!强烈建议掌握一下,比自己一行行检查错误快多了。

题目

已知数据段有:

FIRST  DB 12H, 34H
SECOND DB 56H, 78H

(1)要求采用传送指令编写一段程序,实现 FIRSTSECOND 单元的内容互换, FIRST + 1 单元和 SECOND + 1 单元的内容互换。

(2)设 (SS) = 2000H,(SP) = 3456H,用堆栈指令编写一段程序完成上述要求,并画出堆栈的数据变化示意图。

代码

(1)

DATAS SEGMENT
FIRST DB 12H,34H
SECOND DB 56H,78H
DATAS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV AL,FIRST
    MOV BL,SECOND
    MOV FIRST,BL
    MOV SECOND,AL
    MOV AL,FIRST+1
    MOV BL,SECOND+1
    MOV FIRST+1,BL
    MOV SECOND+1,AL
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

(2)

DATAS SEGMENT
FIRST DB 12H,34H
SECOND DB 56H,78H
DATAS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;MOV AL,FIRST
    ;MOV AH,FIRST+1
    ;MOV BL,SECOND
    ;MOV BH,SECOND+1
    ;PUSH AX
    ;PUSH BX
    PUSH WORD PTR FIRST
    PUSH WORD PTR SECOND
    POP WORD PTR FIRST
    POP WORD PTR SECOND
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

调试

代码写完,记得保存一下,运行不报错就能进行调试了。点击下图所示按钮。

然后,每次按 t ,再回车,就是执行一条命令。

如果你想看某一个位置的数据变化,就要输入 d + 地址,如下图所示。

可以看到,程序是实现了 FIRSTSECOND 单元的内容互换, FIRST + 1 单元和 SECOND + 1 单元的内容互换的功能的。

其他命令

-u:查看汇编代码。
-t:执行下一条语句。
-g:跳转到该内存所对应的语句(再用 t 命令执行该条命令)。
-r:查看寄存器的内容(后可直接接寄存器的名称,就只查看该寄存器的内容)。
-d:后接内存地址,查看改地址后面 8 * 16 个字节空间的地址(每行 16 个字节,共 8 行)后面是对应的字符‘.’表示没有该数字对应的字符。

致谢

汇编 debug 与 masm 命令

版权声明:本文为博主原创文章,如有错误,恳请大家在评论区指出,在下不胜感激~如要转载注明出处即可~