汇编语言实验4
这是汇编语言实验4
- 实验内容1
(1)源代码
首先这是masm环境下有些命令是无法兼容的:b800h不能被定义,于是修改为0b800h
修改后的代码为:
运行结果显示为:
结果分析:这里的一个字单元包含2个字节单元,循环16次,bx的内容增加2,即增加了一个字的长度
(2)将源代码程序中字数据0403H→修改为0441H,再次运行,截图显示运行结果。
- 实验内容2(必做部分)
(1)源代码
(2)汇编、链接无误后,灵活使用 debug 的 t 命令、g 命令、p 命令调试,用 d 命令 查看0:200~0:23F,确认是否将0~63传送至此段内存区域。这部分,要求有截图。
在masm集成环境下编写代码:
设置ds:bx的初始地址为0:200将ax单元的内容送入ds:[bx]中。初始时将ax值赋予0000h
首先使用u反汇编得到各条指令的地址,先单步调试前四条指令,此时查看0:200处的内容:
此时使用G命令调试,因为这是一个循环,所以用G命令追踪到程序结束的地址:
由结果可以看出来,ax中的值和bx中的值由原来的ax=0000→ax=0040,bx=0200→bx=0240,由此看出这确实是循环了64次后得到的结果,将0-63送入0:200 23f处
(3)综合利用loop和栈将0-63送入0:200 23f处
①源代码:
调试内容:反汇编查看指令
调试时直接用g命令执行到程序结束,然后d查看0:200 23f处的内容。由此可以看出用栈和loop也可以进行传数操作,具体的原因在上面的源代码注释中。
- 实验内容3
(1)源代码
设置cx的测试值为0
实验要求为将mov ax,4c00h之前的指令复制到内存0:200处,我们知道8086中cs:ip寄存器是存储指令的地址,故默认写入的指令会存入CS:ip中,所以第一空填写cs,而想复制指令,便必须得知道指令段的长度,在没有调试之前是无法知道该段的长度,所以输出测试数据然后查看cx中的内容即可先反汇编查看代码段,R命令查看寄存器的内容
这里可以看到cx计数器记录了该代码段的长度,减去mov ax,4c00h 和int 21h的长度5.则在mov ax,4c00h前的指令长度为:001CH-5H=17H,所以第二空应该填上17H
(2)汇编连接后,灵活使用debug的t命令、g命令、p命令调试,用d命令查看0:200 之后的若干字节,观察是否将mov ax, 4c00h之前的指令复制到指定内存,这部分要求有截 图,并以文字方式说明空白处填写依据。
还原指令,然后反汇编0:200开始的连续17个内存单元里的内容,得到下面结果,可以看出,复制成功。