汇编语言实验

更新时间:2023-12-01 22:47:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

汇编语言程序设计 实验一

DEBUG 程序使用技巧

学号: 姓名:

1. 寄存器和内存

开始 Debug 程序。输入“Q? ” 退出程序。再次启动 Debug。 输入 “r? ”来显示CPU的当前状态和寄存器中的当前内容。 输入 “r AX? ”和“1234”,_______寄存器中的内容变为 1234。 输入 “r DS? ”和“2000”,_______寄存器中的内容变为 2000。

输入 “d DS:1000? ”来显示数据段中 80H 字节数据,把数据抄在这里:

输入 “f DS:1000 1100 77? ”再显示一次这 80H 字节。判断这条指令的作用是什么?

再输入 “d 2000:1000? ”来显示数据段中 80H 字节数据。观察与前面的数据有无不同。

输入 “d 1900:0100? ”和“d 1ff0:0100? ”来显示两个存储段中的内容。比较其中 2000:0000 段中的数据。相同段落中的数据相同么?根据你的观察,得出结论,是否程序员可以用不同的段起始地址和偏移量组合,把不容内容存入相同的内存段中。

2.输入机器码,使用单步和断点 退出 Debug,再重新启动 Debug。

输入 “r? ”观察 CPU 的状态,下一条指令是什么?

使用两种方式输入一段程序,第一种方式:直接输入机器码。

输入 “u? ”来显示程序段中的指令序列。然后输入 “d CS:100? ” 来显示代码段中的数据。观察显示内容。

“u CS:100 106? ”做反汇编,就是显示出汇编语句。将这几句汇编语句记录下来:

使用输入 “r? ”观察 CPU 的状态,使用 “t? ”来跟踪程序,直至最后一条指令执行完毕。注意,跟踪程序前,要让 IP 寄存器中的值是 100H。一直监视 AX 和 IP 寄存器的内容变化,尤其是标志位的变化。

第二种方式,是输入汇编语句。重启 Debug 程序。 先输入 “a CS:100? ”,然后输入: MOV AX, FF00 ADD AX,01F0 MOV BX,AX NEG BX ADD AX,BX

输入 “u CS:100 10A? ”就可以得到这几条语句的机器码。把机器码记录下来:

使用命令“r ip? ”再输入 “100? ”,可以将寄存器 IP 中的内容置为 “100H”。再输入“r? ”观察 CPU 的状态,然后反复输入 “t? ” 跟踪程序,直到程序结束。解释为什么标志位内容会有改变?另外,说明这段程序完成什么任务?

重新把寄存器 IP 的内容变为 100H,不使用跟踪命令 “t”,改用“g 10c”来完成程序。

程序中还可以加断点,做法是在程序中加入 “int 3” 这条指令。如果这条指令在程序的末尾,我们可以通过输入 “g? ” 来完成运行程序。这样就不需像上面需要告诉 Debug 程序最后机器码字节的地址偏移量了。“int 3”是 Debug 中很有效的返回控制指令。把这条指令放在程序中必要的位置上,在这条指令后面的代码在不允许时就不会运行。

3.ASCII 字符码,从键盘输入,从显示器输出

(i) 标准 ASCII ( American Standard Code for Information Interchange ) 码使用 7- bit 二进制数来代表字符。一般文本信息经常用 ASCII 编码。 使用命令 “a CS:100? ”, 输入下面的代码: MOV BX,0 MOV [BX],BL INC BX CMP BH,1 JNE 103 INT 3

使用 “d DS:0 100? ”命令,显示程序运行前相应内存段中的数据。运行上面的程序来填充 DS:0000-00FF 这段内存中的内容。再次输入 “d DS:0 100? ”命令来显示填充的内容。在窗口的右边,可以看到相应的ASCII码字符。

如果填充的内容不是字符,显示就用点表示。用类似方法,如何将字符串“How are you?”写入计算机内存呢?

(ii) 计算机的 BIOS ( Basic Input / Output System ) 程序有很多子程序,用来通过标准外设处理输入和输出,比如,键盘和显示器。

BIOS 的程序都可以通过称为系统中断的特殊指令被调用。例如: INT 16H 返回值是把下一个键盘输入值送入寄存器 AL

INT 10H 当 BH = 0 时,将光标移到由寄存器 DH 和 DL 内容所指定的行和列的位置上 INT 21H 当 AH = 2 时,将 DL 中的内容作为 ASCII 码的字符显示出来

INT 21H 当 AH = 9 时,将位于 DS:DX 的内容显示为字符串 ( 一个 ASCII 码序列由 $ 符作结束符)。

(ii)(a) 将下列代码输入程序段 CS:0100 中: MOV AH,0 INT 16H INT 3 JMP 100

使用“u CS:100 110? ” 命令,将程序转换为机器码。其中 “JMP 100”的机器码是 “EBF9”。如果使用的是相对寻址方式,我们可以猜测出机器码中“F9”的含义么?相对寻址方式比绝对地址方便的地方是什么?

重置 IP 的内容为 100H,再输入“g? ”来执行程序。程序中断时,输入字母“B”,检查寄存器 AL 中的内容为: _________

重复上面的动作,但输入不同字母,记录下每次 AL 中的内容,能不能判断出来,这段程序的功能是什么?

(ii)(b) 将下面的代码输入 CS:200 中: MOV BH,0 MOV DL,0 MOV DH,0 MOV AH,2 INT 10 MOV DX,0 MOV AH,9 INT 21 INT 3

通过命令 “e DS:0 68 65 6C 6C 21 24?.”在内存数据段中输入了一个字符串,将 IP 设为 200,输入 “g?.” 来运行程序,在屏幕左上角能找到输入的字符串是什么:_____________ 这个程序是用来做什么的? _____________________________________________________ _____________________________________________________

本文来源:https://www.bwwdw.com/article/f9vt.html

Top