实验四
Posted lingana
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验四相关的知识,希望对你有一定的参考价值。
实验结论
实验任务1:综合使用 loop,[bx],编写完整汇编程序,实现向内存 b800:07b8 开始的连续 16 个 字单元重复填充字数据0403H。
源代码:
运行结果:
将源代码程序中字数据 0403H 修改为 0441H,再次运行。
实验任务2: 综合使用 loop,[bx],编写完整汇编源程序,实现向内存 0:200~0:23F 依次传送数据 0~63(3FH)。
源代码:
汇编、连接后进入 debug 调试,先查看寄存器的值并反汇编查看命令是否有误。
用 g 命令将循环之前的语句执行完。
再使用 t 命令执行第一次循环,查看有无逻辑错误。遇到 loop 指令,使用 p 命令。
遇到 int 21h,使用 p 命令。
调试完毕,,用 d 命令查看 0:200~0:23F,确认是否将0~63传送至此段内存区域。
实验任务3:教材实验4(3)(P121)
源代码:
汇编、连接后进入debug调试,查看寄存器的值,其中 cx 存放了程序的长度,根据 cx 可以进行精准反汇编(格式:-u [偏移地址1] [偏移地址2])。
使用 t、g、p 命令调试后,用 d 命令查看0:200 之后的若干字节,观察到 0000:0200~0000:0216 中存放的的确是所编写的代码的机器码。
再使用 u 命令反汇编查看 0:200 开始的程序,前几行与所编写的代码完全一致。
总结与体会
1、实验任务1中,我一开始编程时使用的是 “mov ax, b800h” ,但是编译器报错了,经过查询资料,发现在汇编语言编程中,约定所有的立即数如果第一个数是字母,那么前要加0。
2、实验任务3中,mov ax 后面填写的是 cs,因为根据题意要复制的内容是代码,所以要把代码段段地址赋给数据段段地址。mov cx 后面填写的是17h,因为要复制的内容是 mov ax,4c00h 前的内容,所以复制的代码是从 mov ax,cs 到 loop s。mov 用在寄存器之间占 2 个字节,用在寄存器和立即数之间占 3 个字节,inc bx 占 1 个字节,而loop s 相当于寄存器间的 mov 指令,占 2 个字节,因此可以计算出程序长度为 17h。
以上是关于实验四的主要内容,如果未能解决你的问题,请参考以下文章