汇编语言实验4

这是汇编语言实验4           

  1. 实验内容1

(1)源代码

首先这是masm环境下有些命令是无法兼容的:b800h不能被定义,于是修改为0b800h

 

修改后的代码为:

 

运行结果显示为:

结果分析:这里的一个字单元包含2个字节单元,循环16次,bx的内容增加2,即增加了一个字的长度

 

2)将源代码程序中字数据0403H→修改为0441H,再次运行,截图显示运行结果。

 

  1. 实验内容2(必做部分)

(1)源代码

(2)汇编、链接无误后,灵活使用 debug t 命令、g 命令、p 命令调试,用 d 命令 查看0:200~0:23F,确认是否将0~63传送至此段内存区域。这部分,要求有截图。

masm集成环境下编写代码:

 

设置ds:bx的初始地址为0:200ax单元的内容送入ds:[bx]中。初始时将ax值赋予0000h

 

首先使用u反汇编得到各条指令的地址,先单步调试前四条指令,此时查看0:200处的内容:

此时使用G命令调试,因为这是一个循环,所以用G命令追踪到程序结束的地址:

 

 

由结果可以看出来,ax中的值和bx中的值由原来的ax=0000ax=0040,bx=0200bx=0240,由此看出这确实是循环了64次后得到的结果,将0-63送入0:200 23f

(3)综合利用loop和栈将0-63送入0:200 23f

①源代码:

 

调试内容:反汇编查看指令

 

调试时直接用g命令执行到程序结束,然后d查看0200 23f处的内容。由此可以看出用栈和loop也可以进行传数操作,具体的原因在上面的源代码注释中

 

  1. 实验内容3

(1)源代码

 

设置cx的测试值为0

实验要求为将mov ax,4c00h之前的指令复制到内存0:200处,我们知道8086csip寄存器是存储指令的地址,故默认写入的指令会存入CSip中,所以第一空填写cs,而想复制指令,便必须得知道指令段的长度,在没有调试之前是无法知道该段的长度,所以输出测试数据然后查看cx中的内容即可先反汇编查看代码段,R命令查看寄存器的内容

 

 

 

这里可以看到cx计数器记录了该代码段的长度,减去mov ax,4c00h int 21h的长度5.则在mov ax,4c00h前的指令长度为:001CH-5H=17H,所以第二空应该填上17H

(2)汇编连接后,灵活使用debugt命令、g命令、p命令调试,用d命令查看0:200 之后的若干字节,观察是否将mov ax, 4c00h之前的指令复制到指定内存,这部分要求有截 图,并以文字方式说明空白处填写依据。

 

还原指令,然后反汇编0:200开始的连续17个内存单元里的内容,得到下面结果,可以看出,复制成功。

 

posted @ 2018-11-17 22:40  BeartoHero  阅读(340)  评论(0编辑  收藏  举报