汇编语言实验.docx

上传人:b****5 文档编号:14301696 上传时间:2023-06-22 格式:DOCX 页数:7 大小:17.53KB
下载 相关 举报
汇编语言实验.docx_第1页
第1页 / 共7页
汇编语言实验.docx_第2页
第2页 / 共7页
汇编语言实验.docx_第3页
第3页 / 共7页
汇编语言实验.docx_第4页
第4页 / 共7页
汇编语言实验.docx_第5页
第5页 / 共7页
汇编语言实验.docx_第6页
第6页 / 共7页
汇编语言实验.docx_第7页
第7页 / 共7页
亲,该文档总共7页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

汇编语言实验.docx

《汇编语言实验.docx》由会员分享,可在线阅读,更多相关《汇编语言实验.docx(7页珍藏版)》请在冰点文库上搜索。

汇编语言实验.docx

汇编语言实验

汇编语言实验

汇编语言程序设计

实验一DEBUG程序使用技巧

学号:

姓名:

1.寄存器和内存

开始Debug程序。

输入“Q↲”退出程序。

再次启动Debug。

输入“r↲”来显示CPU的当前状态和寄存器中的当前内容。

输入“rAX↲”和“1234”,_______寄存器中的内容变为1234。

输入“rDS↲”和“2000”,_______寄存器中的内容变为2000。

输入“dDS:

1000↲”来显示数据段中80H字节数据,把数据抄在这里:

 

输入“fDS:

1000110077↲”再显示一次这80H字节。

判断这条指令的作用是什么?

 

再输入“d2000:

1000↲”来显示数据段中80H字节数据。

观察与前面的数据有无不同。

 

输入“d1900:

0100↲”和“d1ff0:

0100↲”来显示两个存储段中的内容。

比较其中2000:

0000段中的数据。

相同段落中的数据相同么?

根据你的观察,得出结论,是否程序员可以用不同的段起始地址和偏移量组合,把不容内容存入相同的内存段中。

2.输入机器码,使用单步和断点

退出Debug,再重新启动Debug。

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

 

使用两种方式输入一段程序,第一种方式:

直接输入机器码。

输入“u↲”来显示程序段中的指令序列。

然后输入“dCS:

100↲”来显示代码段中的数据。

观察显示内容。

“uCS:

100106↲”做反汇编,就是显示出汇编语句。

将这几句汇编语句记录下来:

 

使用输入“r↲”观察CPU的状态,使用“t↲”来跟踪程序,直至最后一条指令执行完毕。

注意,跟踪程序前,要让IP寄存器中的值是100H。

一直监视AX和IP寄存器的内容变化,尤其是标志位的变化。

 

第二种方式,是输入汇编语句。

重启Debug程序。

先输入“aCS:

100↲”,然后输入:

MOVAX,FF00

ADDAX,01F0

MOVBX,AX

NEGBX

ADDAX,BX

输入“uCS:

10010A↲”就可以得到这几条语句的机器码。

把机器码记录下来:

 

使用命令“rip↲”再输入“100↲”,可以将寄存器IP中的内容置为“100H”。

再输入“r↲”观察CPU的状态,然后反复输入“t↲”跟踪程序,直到程序结束。

解释为什么标志位内容会有改变?

另外,说明这段程序完成什么任务?

 

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

程序中还可以加断点,做法是在程序中加入“int3”这条指令。

如果这条指令在程序的末尾,我们可以通过输入“g↲”来完成运行程序。

这样就不需像上面需要告诉Debug程序最后机器码字节的地址偏移量了。

“int3”是Debug中很有效的返回控制指令。

把这条指令放在程序中必要的位置上,在这条指令后面的代码在不允许时就不会运行。

 

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

(i)标准ASCII(AmericanStandardCodeforInformationInterchange)码使用7-bit二进制数来代表字符。

一般文本信息经常用ASCII编码。

使用命令“aCS:

100↲”,输入下面的代码:

MOVBX,0

MOV[BX],BL

INCBX

CMPBH,1

JNE103

INT3

使用“dDS:

0100↲”命令,显示程序运行前相应内存段中的数据。

运行上面的程序来填充DS:

0000-00FF这段内存中的内容。

再次输入“dDS:

0100↲”命令来显示填充的内容。

在窗口的右边,可以看到相应的ASCII码字符。

 

如果填充的内容不是字符,显示就用点表示。

用类似方法,如何将字符串“Howareyou?

”写入计算机内存呢?

 

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

BIOS的程序都可以通过称为系统中断的特殊指令被调用。

例如:

INT16H返回值是把下一个键盘输入值送入寄存器AL

INT10H当BH=0时,将光标移到由寄存器DH和DL内容所指定的行和列的位置上

INT21H当AH=2时,将DL中的内容作为ASCII码的字符显示出来

INT21H当AH=9时,将位于DS:

DX的内容显示为字符串(一个ASCII码序列由$符作结束符)。

(ii)(a)将下列代码输入程序段CS:

0100中:

MOVAH,0

INT16H

INT3

JMP100

使用“uCS:

100110↲”命令,将程序转换为机器码。

其中“JMP100”的机器码是“EBF9”。

如果使用的是相对寻址方式,我们可以猜测出机器码中“F9”的含义么?

相对寻址方式比绝对地址方便的地方是什么?

 

重置IP的内容为100H,再输入“g↲”来执行程序。

程序中断时,输入字母“B”,检查寄存器AL中的内容为:

_________

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

 

(ii)(b)将下面的代码输入CS:

200中:

MOVBH,0

MOVDL,0

MOVDH,0

MOVAH,2

INT10

MOVDX,0

MOVAH,9

INT21

INT3

通过命令“eDS:

068656C6C2124↲.”在内存数据段中输入了一个字符串,将IP设为200,输入“g↲.”来运行程序,在屏幕左上角能找到输入的字符串是什么:

_____________

这个程序是用来做什么的?

_____________________________________________________

_____________________________________________________

4.内存寻址

把下面程序输入到内存中以地址CS:

0000为起始的代码段中。

MOVAX,33

MOVAX,[SI]

MOVAX,[SI+2]

MOVAX,[SI]2

MOVAX,[25]

MOVAX,[BX+SI]

MOVAX,[BX+SI-3]

MOVAX,20[BX+SI-10]

INT3

这些指令分别使用了哪些寻址方式?

将上面的程序翻译为机器码时,可以发现有些指令的机器码是相同的。

哪些代码的机器码相同?

根据发现,得出的结论是什么?

 

将数据段与代码段对齐,将数据段中前40H字节的数据显示出来,使用命令“dDS:

040↲.”,把这些数据记录下来。

 

假设BX和SI中的内容分别是12和17,判断一下程序运行后的结果是什么?

跟踪程序,记录AX寄存器中的内容,与你预计的结果相符么?

 

5.堆栈.

(i)将程序输入内存中以地址CS:

0000为起始的代码段中:

MOVBX,22

MOVAX,33

PUSHAX

PUSHBX

MOVAX,0

MOVBX,0

POPAX

POPBX

INT3

跟踪程序,记录发现的变化。

不要忘记运行前要把IP的内容变为0。

步骤AXBXSP堆栈内容

1_________________________________________

2_________________________________________

3_________________________________________

4_________________________________________

5_________________________________________

6_________________________________________

7_________________________________________

8_________________________________________

增加什么语句,能够使AX和BX的内容在程序运行后被恢复。

 

(ii)重启Debug

将指令"INT3"在代码段地址CS:

100中输入。

输入“r↲.”记录堆栈段和代码段的参数:

SS:

____________SP:

____________CS:

____________IP:

______________

将堆栈段中SS:

FFE0FFFF的内容显示出来,记录堆栈段中的有效数据。

地址:

______________________________________________________________________

内容:

______________________________________________________________________

 

执行"INT3"指令,引起CPU的软件中断。

相应的中断程序被调用。

中断服务程序的最后一条指令是"IRET",它告诉CPU中断服务结束。

一步步跟踪"INT3"直到"IRET"指令被执行。

注意寄存器SP中内容的变化,记录被推入堆栈的内容,以及中断程序终止时,弹出命令将什么内容送到什么地方?

根据观察,能找到INT3中断向量的内容么?

中断服务程序的起始地址是什么?

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2