实验三 Debug及指令测试

实验三 Debug及指令测试

一、实验学时:

课堂2学时,课后2学时

二、实验目的

通过实验掌握下列知识:

1、DOS命令: DIR,DEL,RENAME,COPY。

2、8086指令: MOV,ADD,ADC,SUB,SBB,DAA,XCHG

3、DEBUG命令: A,D,E,F,R,T,U。

4、BCD码,ASCII码及用16进制数表示二进制码的方法。

5、8086寄存器: AX,BX,CX,DX,Flags,IP。

三、实验要求

1) 做好实验预习,完成各种软件安装与操作。

2) 按照实验内容与步骤的要求,独立思考,认真仔细地完成实验。

3) 截取各步骤截图,写出实验报告。

四、实验内容

一、DOS常用命令练习:

1、使用dir查看文件列表

2、用命令 COPY DEBUG.exe BUG 复制一个文件。

3、用命令 RENAME BUG BG 将BUG 文件改为BG。

4、用命令 DEL BG 将文件BG删除。 在操作时要注意提示信息,并按提示操作。

二、DEBUG 命令使用:

1、打 DEBUG 进入 DEBUG 控制,显示提示苻 '_ '。

2、用命令 F100 10F ‘A’ 将’A’的ASCII码填入内存。

3、用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。

4、用命令 F110 11F 41 重复上二项实验,观察结果并比较。

5、用命令 E100 30 31 32 …
3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?

6、用H命令检查下列各组16进制数加减结果并和你的手算结果比较:

(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH

7、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF
和AF的内容。

8、用R命令将AX,BX内容改写为1050H及23A8H。

三、8086常用指令练习

1、传送指令

1)用A命令在内存100H处键入下列内容:

MOV AX,1234

MOV BX,5678

XCHG AX,BX

MOV AH,35

MOV AL,48

MOV DX,75AB

XCHG AX,DX

2)用U命令检查键入的程序并记录,特别注意左边的机器码。

3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。并注意标志位有无变化。

2、加减法指令:

1)用A命令在内存100H处键入下列内容:

MOV AH,34

MOV AL,22

ADD AL,AH

SUB AL,78

MOV CX,1284

MOV DX,5678

ADD CX,DX

SUB CX,AX

SUB CX,CX

2)用U命令检查键入的程序及对应的机器码。

3)用T命令逐条运行这些指令,检查并记录有关寄存器及ZF情况。

思考:这次运行还是打入T,行不行?怎么办?用R命令检查一下IP的内容。注意T命令与IP的关系。

3、带进位加减法:

1)用A命令在内存200H处键入下列内容,并用U命令检查:

MOV AH,12

MOV AL,84

MOV CH,56

MOV CL,78

ADD AL,CL

ADC AH,CH

MOV DH,A7

MOV DL,58

SUB DL,7F

SBB DH,34

2)用T命令逐条运行这些指令,检查并记录有寄存器及CF内容。

3)上面这段程序若改用16位操作指令达到同样结果,怎么改?试修改并运行之。

4、BCD码加减法

1)内容:


MOV AL,58

ADD AL,25

DAA

2)要求:用A 命令键入,U命令检查,T命令逐条运行并记录有关寄存器及Flags内容。

五、实验步骤

5.1 DOS常用命令练习

1. DIR

使用dir命令,可以获取有关文件和目录的基本信息,如名称、大小、修改日期和时间等。它还可以显示隐藏文件和系统文件,并提供一些可选的参数来定制输出结果。

列出当前目录中的文件和子目录。使用DIR命令,如图5-1-1所示。
在这里插入图片描述

图 5-1-1 DIR命令

还可以将结果输出到一个文件中。使用命令dir > 文件名.txt,如图5-1-2所示。将dir查询结果输出到1.txt中。
在这里插入图片描述

图 5-1-2 DIR \> 命令

接着输入dir /w,可以显示所有文件名,以及共计多少文件,如图5-1-3所示,可以看到1.txt已经保存成功了。
在这里插入图片描述

图 5-1-3 DIR \> 命令
2.COPY

COPY命令用于复制一个或多个文件到指定的目标位置。

使用命令COPY <源文件路径> <目标文件路径>,可以复制一个文件到指定目标位置。

使用COPY DEBUG.exe BUG命令,用于将文件DEBUG.exe复制到当前目录并重命名为BUG。如图5-1-4所示。
在这里插入图片描述

图5-1-4 COPY命令

如图 5-1-5所示,可以看到BUG文件已经创建成功。
在这里插入图片描述

图 5-1-5 复制成功
3.RENAME

RENAME命令用于更改文件或目录的名称。它允许用户将一个文件或目录重命名为新的名称。

使用命令RENAME <原始文件名> <新文件名>来重命名一个文件。

使用命令 RENAME BUG BG将BUG文件改为BG。如图5-1-6所示。更改成功。
在这里插入图片描述

图5-1-6 RENAME命令

也可以使用命令RENAME <文件名.旧扩展名> <新文件名.新扩展名>来重命名文件的扩展名。

使用命令RENAME 1.TXT 1.DOC,来将1.TXT的扩展名重命名为DOC。如图5-1-7所示。
在这里插入图片描述

图 5-1-7 重命名扩展名
4.DEL

DEL命令用于删除文件或目录。它允许用户从系统中永久移除不再需要的文件或目录。

使用命令DEL <文件路径>来删除一个指定的文件。

使用命令DEL BG将文件BG删除。 如图5-1-8所示。
在这里插入图片描述

图 5-1-8 DEL命令

DEL命令执行后将永久删除文件或目录,无法恢复。

再次复制DEBUG.EXE为BG,如图5-1-9所示。
在这里插入图片描述

图 5-1-9再次复制

输入命令DEL 1.DOC BG,可以看到,即使输入多个文件,也只能删除第一个,如图5-1-10所示。
在这里插入图片描述

图 5-1-10 试图删除多个文件

5.2 DEBUG命令使用

DEBUG是DOS中的一个命令行调试工具。它允许用户以十六进制形式查看和修改计算机内存中的内容,执行机器指令,以及进行一些调试操作。

输入DEBUG进入DEBUG控制。如图5-2-1所示。
在这里插入图片描述

图 5-2-1 DEBUG命令

DEBUG命令的几个常用命令为:A、D、E、F、R、T、U、H。

1.A

A:在内存中分配程序空间。该命令用于在指定的内存地址处分配程序空间,可以在该位置编写机器指令。

使用命令A <内存地址>来分配程序空间。

如果不填写地址,默认a将在它上次停止处开始汇编。如图5-2-2所示,如果程序输完了,想退出a命令,就直接按回车,像图中,此时到了0105的位置,什么也不要输入,直接按回车。
在这里插入图片描述

图 5-2-2 A命令
2.D

D:显示内存中的内容。该命令用于以十六进制形式显示指定内存范围的内容,可以查看内存中的机器指令和数据。

使用命令D [<内存地址> [<结束地址>]]来显示指定内存范围的内容。

直接输入D会从某个偏移地址0100来显示,如图5-2-3所示。
在这里插入图片描述

图 5-2-3 D命令

也可以直接输入目的偏移地址,这时候就会从输入的偏移地址开始显示。如图5-2-4所示。
在这里插入图片描述

图 5-2-4 指定偏移地址

使用命令D 100 10F观察内存中的16进制码及屏幕右边的ASCII字符。该命令的含义是显示从内存地址100到10F的内容。如图5-2-5所示。
在这里插入图片描述

图 5-2-5 某段内存的内容

3.E

E:修改内存中的内容。该命令用于修改指定内存地址处的内容,可以用新的十六进制值替换原始值。

使用命令E <内存地址> [<新值>]来更改指定地址的内容。

修改内存单元0483:0100的内容为02,图5-2-6所示。
在这里插入图片描述

图 5-2-6 修改某个内存单元内容

接着修改多个内存单元,使用命令 E100 30 31 32 … 3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,如图5-2-7所示。
在这里插入图片描述

图 5-2-7 修改多个内存单元内容

在结果中看到从地址100开始的内存单元中存储着字符0到?的ASCII码值。每个十六进制值对应一个字节,通常会将其解释为ASCII字符。根据ASCII码表,30H到3FH分别对应字符0到?。如图5-2-8所示。
在这里插入图片描述

图 5-2-8 SSCII字符存储

4.F

F:在内存中填充值。该命令用于在指定内存范围内填充指定的十六进制值。

使用命令F <内存地址> <结束地址> <填充值>来向某个内存范围填充值。

使用命令F100 10F 'A’将’A’的ASCII码填入内存。如图5-2-9所示。
在这里插入图片描述

图 5-2-9 F命令填充

使用命令 F110 11F 41 重复上二项实验,观察结果并比较。如图5-2-10所示。
在这里插入图片描述

图 5-2-10 F命令填充2

通过与上面E命令做比较,可以看到F命令可以很方便的向多个连续的内存单元进行填充,比较方便。

5.R

R:显示或修改寄存器的值。该命令用于显示或修改指定寄存器的值。

用R命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。如图5-2-11所示。
在这里插入图片描述

图 5-2-11 F查看寄存器的值

可以看到各寄存器的值,AX、BX、CX、DX、SP、BP、SI、DI均为0000。DS、ES、SS、CS都等于1C8C。IP=0100。

在图中也可以看到NV, UP, DI, PL, NZ, NA, PO,NC,用于表示CPU标志寄存器的不同位。

以下是这些标志位的含义:

NV:表示溢出标志即OF=0,指示算术操作是否产生了溢出。

UP:表示方向标志即DF=0,指示字符串操作的方向是向上增加还是向下减少。

DI:表示中断标志即IF=0,用于控制中断的使能或禁止。

PL:表示符号标志即SF=0,指示操作结果是否为正数。

NZ:表示零标志即ZF=0,指示操作结果是否非零。

NA:表示辅助进位标志AF=0,指示在无符号数比较中,第一个操作数是否不大于第二个操作数。

PO:表示奇偶标志PF=0,指示操作结果中的1的个数是否为奇数。

NC:表示进位标志CF=0,指示在算术操作中是否产生了进位。

用R命令将AX,BX内容改写为1050H及23A8H。

首先输入R AX来选择要修改的是AX寄存器。接着输入对应修改的值1050。如图5-2-12所示。
在这里插入图片描述

图 5-2-12 改写AX

接着改写BX,如图5-2-13所示。
在这里插入图片描述

图5-2-13 改写BX

6.T

T:执行机器指令。该命令用于执行指定内存地址处的机器指令。

使用命令T[<内存地址>]来执行指定内存地址处的机器指令。

如图5-2-14所示,在1位置并没有存储指令,因此显示Trace Interrupt。
在这里插入图片描述

图 5-2-14 T指令

7.U

U:反汇编机器指令。该命令用于以汇编语言的形式显示指定内存范围的机器指令。

使用命令U [<内存地址> [<结束地址>]]来显示指定内存地址范围的机器指令。

8.H

H:对指定的两个参数执行十六进制运算。

使用命令H[<参数>][<参数>]来执行十六进制运算。

用H命令检查下列各组16进制数加减结果并和你的手算结果比较:

(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH

输入命令H 34 22得到结果56、12,如图5-2-15所示。
在这里插入图片描述

图5-2-15 H 34 22

输入命令H 56 78得到结果CE、FFFFFFDE。如图5-2-16所示。
在这里插入图片描述

图5-2-16 H 56 78

输入命令H A5 79得到结果11E、2C。如图5-2-17所示。
在这里插入图片描述

图 5-2-17 H A5 79

输入命令H 1284 5678得到结果68FC、FFFFBC0C。如图5-2-18所示。
在这里插入图片描述

图5-2-18 H 1284 5678

输入命令H A758 347F得到结果DBD7、72D9。如图5-2-19所示。
在这里插入图片描述

图 5-2-19 H A758 347F

5.3 8086常用指令练习

1、传送指令

1)用A命令在内存100H处键入下列内容:

MOV AX,1234

MOV BX,5678

XCHG AX,BX

MOV AH,35

MOV AL,48

MOV DX,75AB

XCHG AX,DX

如图5-3-1所示。
在这里插入图片描述

图 5-3-1 输入指令

2)用U命令检查键入的程序并记录,特别注意左边的机器码。
在这里插入图片描述

图 5-3-2 U命令检查记录

3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。并注意标志位有无变化。

如图5-3-3所示,首先执行MOV AX,1234,可以发现AX=1234赋值成功。
在这里插入图片描述

图 5-3-3 MOV AX,1234

如图5-3-4所示,接着执行MOV BX,5678,可以发现BX=5678赋值成功。
在这里插入图片描述

图 5-3-4 MOV BX,5678

如图5-3-5所示,接着执行XCHG AX,BX,可以看到AX和BX已经完成交换。
在这里插入图片描述

图 5-3-5 XCHG AX,BX

如图5-3-6所示,接着执行MOV AH,35,可以看到AX的高位AH已经完成赋值。
在这里插入图片描述

图 5-3-6 MOV AH,35

如图5-3-7所示,接着执行MOV AL,48,可以发现AX的低位AL已经完成赋值。
在这里插入图片描述

图 5-3-7 MOV AL,48

如图5-3-8所示,接着执行MOV DX,75AB,可以看到DX=75AB已经完成赋值。
在这里插入图片描述

图 5-3-8 MOV DX,75AB

如图5-3-9所示,最后执行XCHG AX,DX,可以看到AX和DX已经完成交换。
在这里插入图片描述

图5-3-9 XCHG AX,DX

2、加减法指令:

1)用A命令在内存100H处键入下列内容:

MOV AH,34

MOV AL,22

ADD AL,AH

SUB AL,78

MOV CX,1284

MOV DX,5678

ADD CX,DX

SUB CX,AX

SUB CX,CX

如图5-3-10所示。
在这里插入图片描述

图 5-3-10 加减法指令输入

2)用U命令检查键入的程序及对应的机器码。

如图5-3-11所示,键入程序没有问题。
在这里插入图片描述

图 5-3-11 检查输入加减法指令

3)用T命令逐条运行这些指令,检查并记录有关寄存器及ZF情况。

思考:这次运行还是打入T,行不行?怎么办?用R命令检查一下IP的内容。注意T命令与IP的关系。

打入T,发现程序没有按照原来的进行运行,如图5-3-12所示。
在这里插入图片描述

图 5-3-12 打入T错误

通过R命令检查IP发现,键入T程序继续按照上一个问题中运行结尾IP往下继续运行,因此需要键入T=100来运行100位置的指令,如图5-3-13所示,AX高位AH=34成功赋值。
在这里插入图片描述

图 5-3-13 MOV AX,34

如图5-3-14所示,接着执行MOV AL,22,AL=22成功赋值。
在这里插入图片描述

图 5-3-14 MOV AL,22

如图5-3-15所示,接着执行ADD AL,AH,可以看到将AL+AH的结果56放入到AL中。并且标志位奇偶标志变为PE表示奇偶标志为1。
在这里插入图片描述

图 5-3-15 ADD AL,AH

如图5-3-16所示,接着执行SUB AL,78,可以看到AL-78的结果DE放到AL中,并且由于结果为负数,所以标志位变为NG,表示结果为负数。辅助进位标志变为AC,表示低位向高位有借位。进位标志变为CY,表示低位向高位有借位。
在这里插入图片描述

图 5-3-16 SUB AL,78

如图5-3-17所示,接着执行MOV CX,1284,表示给CX赋值1284。
在这里插入图片描述

图 5-3-17 MOV CX,1284

如图5-3-18所示,接着执行MOV DX,5678,表示给DX赋值5678。
在这里插入图片描述

图 5-3-18 MOV DX,5678

如图5-3-19所示,接着执行ADD CX,DX,表示把CX+DX的结果放到CX中,即68FC。接着符号标志变为PL表示符号标志为0,即结果为正数。辅助进位标志变为NA即0,表示低位向高位没有进位。进位标志变为NC即0,表示低位向高位没有进位。
在这里插入图片描述

图 5-3-19 ADD CX,DX

如图5-3-20所示,接着执行SUB CX,AX,表示把CX-AX的结果放到CX中,即341E。接着辅助进位标志变为AC即1,表示低位向高位产生了借位。
在这里插入图片描述

图 5-3-20 SUB CX AX

如图5-3-21所示,接着执行SUB CX,CX,表示把CX-CX的结果放到CX中,即将CX清零。可以看到零标志位变为ZR即1,表示结果为0。辅助进位标志变为NA表示,低位向高位没有借位。
在这里插入图片描述

图 5-3-21 SUB CX,CX

3、带进位加减法:

1)用A命令在内存200H处键入下列内容,并用U命令检查:

MOV AH,12

MOV AL,84

MOV CH,56

MOV CL,78

ADD AL,CL

ADC AH,CH

MOV DH,A7

MOV DL,58

SUB DL,7F

SBB DH,34

如图5-3-22所示。
在这里插入图片描述

图 5-3-22 带进位加减法输入

2)用T命令逐条运行这些指令,检查并记录有寄存器及CF内容。

如图5-3-23所示,逐条执行前四个MOV指令,赋值完成。
在这里插入图片描述

图 5-3-23 MOV指令执行

如图5-3-24所示。执行ADD AL,CL,将AL+CL的结果存到AL中,并且标志位设置为NG即1,表示运算结果为负数。零标志位设置为NZ即0表示运算结果非0。执行ADD AH,CH,将AH+CH的结果存到AH中,并且标志位设置为PL即0,表示运算结果为正数,奇偶标志设置为PO为0。
在这里插入图片描述

图 5-3-24 ADD指令执行

如图5-3-25所示。执行后两个MOV命令,赋值完成。
在这里插入图片描述

图 5-3-25 MOV指令执行2

如图5-3-26所示,执行SUB DL,7F,将DL-7F的结果存到DX的低位DL中,并且符号标志位设置为NG表示运算结果为正数。辅助进位标志设置为AC表示低位向高位有借位。进位标志设置为CY表示有借位。执行SBB
DH,34,将DH-34-CF的结果存储到DX高位DH中,并且溢出标志设置为OV表示有溢出。符号标志设置为PL表示运算结果为负数。辅助进位标志设置为NA表示低位向高位无借位。奇偶标志设置为PE表示1的个数为奇数。进位标志设置为NC表示无借位。
在这里插入图片描述

图5-3-26 运行减法

3)上面这段程序若改用16位操作指令达到同样结果,怎么改?试修改并运行之。

将上面程序改为16位操作指令并输入,如图5-3-27所示。
在这里插入图片描述

图 5-3-27 改为16位操作指令

接着逐条运行,首先运行前四条MOV语句,如图5-3-28所示。
在这里插入图片描述

图5-3-28 MOV语句

接着运行两条加法命令,如图5-3-29所示。
在这里插入图片描述

图 5-3-29 ADD语句

接着运行两条MOV语句,如图5-3-30所示。
在这里插入图片描述

图 5-3-30 MOV语句2

最后执行两条SUB语句,如图5-3-31所示。
在这里插入图片描述

图 5-3-31 SUB语句2
4、BCD码加减法

1)内容:

MOV AL,58

ADD AL,25

DAA

如图5-3-32所示。
在这里插入图片描述

图 5-3-32 BCD码输入

2)要求:用A
命令键入,U命令检查,T命令逐条运行并记录有关寄存器及Flags内容。

U命令检查如图5-3-33所示。
在这里插入图片描述

图 5-3-33 U命令检查

T命令运行如图5-3-34所示。
在这里插入图片描述

图 5-3-34 T命令运行

可以看到运行DAA的时候,将347D转化为BCD码形式即3483,且符号标志位设置为NG表示运算结果为正数。辅助进位标志设置为AC表示低位向高位有进位,奇偶标志设置为PO表示1的个数为偶数。

六、实验小结

6.1 问题和解决办法

1.问题一:使用COPY DEBUG.exe BUG,发现命令失败。

解决方法:该命令假设DEBUG.exe文件存在于当前目录或可通过系统路径访问到。如果DEBUG.exe不存在或路径不正确,命令会失败并显示相应的错误消息。

2.问题二:使用RENAME命令显示ERROR。

解决方法:RENAME命令在更改文件或目录名称时,必须指定完整的路径或位于当前目录中。如果要在不同目录下重命名文件或目录,必须提供完整的路径。

3.问题三:使用T命令的时候会一直就着之前运行的IP继续运行。

解决方法:使用T=[地址]来指定运行某个地址的指令。

6.2 心得体会

通过本次实验,我掌握了一些重要的知识和技能。首先,我学会了使用DOS命令,如DIR用于查看文件列表,DEL用于删除文件,RENAME用于文件重命名,COPY用于文件复制等。这些命令对于管理和操作文件非常有用,提高了我的计算机技能。

其次,我学习了8086指令的使用,包括MOV、ADD、ADC、SUB、SBB、DAA和XCHG等。这些指令在编程和汇编语言中起着重要作用,通过实际操作和调试,我更好地理解了这些指令的功能和用法。

此外,我还学习了DEBUG命令的应用,如A、D、E、F、R、T和U等。DEBUG是一个强大的工具,可以用于查看和修改内存中的数据,以及进行程序的调试和跟踪。我通过实验掌握了DEBUG命令的基本用法,并且能够观察和分析内存中的数据。

在本次实验中,我还学习了BCD码、ASCII码以及用16进制数表示二进制码的方法。这些编码方法在计算机中广泛应用,了解它们对我理解计算机系统和数据表示方式非常重要。

最后,我对8086寄存器有了更深入的了解,特别是AX、BX、CX、DX、Flags和IP等寄存器的作用和内容。我学会了使用R命令来检查寄存器的内容,并且能够理解和分析其中的标志位,如ZF、CF和AF等。

通过本次实验,我不仅学到了实际操作的技能,还深化了对计算机系统和指令集的理解。我意识到计算机组成原理这门课是一个广阔而有趣的领域,需要不断学习和探索,我了解到了具体的汇编指令在计算机中是如何进行代码的编写的,而不是单纯地像以前的高级语言一样,我将继续努力提升自己的技能,并将所学知识应用到更广泛的实际问题中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我是一只大狸子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值