汇编语言实验4

这是汇编语言实验4           

  1. 实验内容1

(1)源代码

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

 汇编语言实验4_第1张图片

修改后的代码为:

 汇编语言实验4_第2张图片

运行结果显示为:

汇编语言实验4_第3张图片

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

 

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

 汇编语言实验4_第4张图片

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

(1)源代码

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

masm集成环境下编写代码:

 汇编语言实验4_第5张图片

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

 汇编语言实验4_第6张图片

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

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

 汇编语言实验4_第7张图片

 

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

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

①源代码:

 汇编语言实验4_第8张图片

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

 汇编语言实验4_第9张图片

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

 汇编语言实验4_第10张图片

  1. 实验内容3

(1)源代码

 汇编语言实验4_第11张图片

设置cx的测试值为0

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

 

 

 汇编语言实验4_第12张图片

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

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

 汇编语言实验4_第13张图片

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

汇编语言实验4_第14张图片

 

转载于:https://www.cnblogs.com/jdl-TECshadower/p/9976045.html

你可能感兴趣的:(汇编语言实验4)