汇编过程及应用DEBUG调试简单程序

一、实验目的:

1.熟悉汇编语言的编辑、汇编、链接、运行与调试的全过程。
2.掌握Masm for Windows 集成开发软件的应用。

二、实验内容:

1、源程序文件:HELLO.ASM,调用DEBUG调试程序,给出相应的调试结果。
2、编程实现如下功能并通过DEBUG对程序进行调试:
若有一个数为X=10,利用加法指令和移位指令完成:
(1)X* 2
(2)X* 4
(3)X* 10

三、实验步骤

1、建立汇编语言源程序,并汇编、链接、生成*,exe文件。
2、进入 DEBUG,对exe文件进行调试
3、在BUF单元预置一个有符号数X,BUF1存放X2,BUF2存放X4,BUF3存放X*10用G命令运行程序,通过D命令查看内存,记下程序运行后BUF1、BUF2及BUF3单元的内容,并分析。
4.用T命令运行程序,记下执行每条指令后IP的内容和下一条要执行的指令,以及每一次执行指令后寄存器,内存单元数据变化情况。

四、实验代码:

实验内容1代码:

DATAS SEGMENT
    ;此处输入数据段代码  
     STRING  DB  'Hello World!',13,10,'$'    
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
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代码:

;若有一个数为X=10,利用加法指令和移位指令完成:
;1)X*2
;2)X*4
;3)X*10
DATAS SEGMENT
    ; 此处输入数据段代码
    X DW 10 ; 初始化 X 为 10
    Result1 DW 0 ; 存储 X*2 的结果
    Result2 DW 0 ; 存储 X*4 的结果
    Result3 DW 0 ; 存储 X*10 的结果
DATAS ENDS
STACKS SEGMENT
    ; 此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ; 此处输入代码段代码
    ;X*2(左移1),AX 存 X * 2 
    MOV AX, X
    SHL AX, 1
    MOV Result1, AX ; 存储结果
    ;X*4
    MOV AX, X
    SHL AX, 1 ; 使用左移2位实现 X*4
    SHL AX, 1 
    MOV Result2, BX ; 存储结果
    ;X*10
    MOV AX, X
    SHL AX, 1 ; 使用左移三位实现 X*8
    SHL AX, 1
    SHL AX, 1
    ADD AX, X ;使用加法指令实现X*10
    MOV Result3, CX ; 存储结果
    MOV AH, 4CH
    INT 21H
CODES ENDS
END START

五、程序流程图(实验内容2)

在这里插入图片描述

六、实验结果:

(在本实验结果的DEBUG调试中,由于实验1只是学习调试步骤的使用,因此只针对实验2进行具体的调试,结果如下所示。)
在这里插入图片描述

DEBUG命令:
(1)R命令
用于查看或修改寄存器内容:
R(回车)
在这里插入图片描述
各标志位状态定义如下:
标志名 1 0
OF OV NV
DF DN UP
IF EI DI
SF NG PL
ZF ZR NZ
AF AC NA
PF PE PO
CF CY NC

0771: 0000 B87007 MOV AX,0770 (MOV AX,DATAS)
CS IP 指令对应机器码 第一条指令

(2)D命令
用于显示内存单元的内容,使用格式有下列几种:
D(回车) ;从DEBUG初始化时的段和偏移量的地址开始显示
在这里插入图片描述
D 00(回车) ;显示DS:00地址开始的80H(128)个字节内容
在这里插入图片描述
D DS:00 0F(回车) ;显示DS:00到CS:0F地址的内容
在这里插入图片描述
(3)E命令
用于修改存储单元的内容,使用格式有下列几种:
E DS:00 1 2 3 4 5(回车) ;DS:00开始的5个单元内容改成了1、2、3、4、5
在这里插入图片描述

修改后可使用D命令,查看该地址单元的内容是否被修改。通过D命令查看内存,发现DS:00-DS:04存放的数据确实修改为1 2 3 4 5.
在这里插入图片描述

(4)U命令
用于对指令码进行反汇编(机器码→符号指令),显示它们的地址、机器码和操作数以及汇编指令语句,使用格式为:
U (回车) ;将CS:00地址开始的32个单元内容进行反汇编
在这里插入图片描述

0771: 0000 B87007 MOV AX,0770
(MOV AX,DATAS)
CS(段基址) IP(偏移地址) 指令对应机器码 符号指令

U 10 6(回车) ;将CS:10地址开始的6个单元内容进行反汇编

(5)T命令
用于逐条指令跟踪,使用格式为:
T(回车)从当前的CS:IP开始执行,执行完一条指令停下来
在这里插入图片描述

T (=CS:IP)(n)(回车) 从指定CS:IP开始执行,执行完n条指令停下来
(6)G命令
G (CS1:IP1) (回车) 从当前的CS:IP开始执行。后面的地址CS1:IP1为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容,和下一条将要执行的指令。
在这里插入图片描述在这里插入图片描述

(7)Q命令
用于退出DEBUG管理,返回DOS,使用格式为:
Q(回车)

在这里插入图片描述

  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jerry独爱电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值