汇编实验四 [bx]和loop指令的联合使用

一.实验目的
1、熟练掌握编写汇编语言原程序的基本方法和基本框架。
2、掌握[bx]访问内存的方法和loop循环指令。
3、熟练使用DEBUG调试程序跟踪循环指令的执行。
二.实验内容

  1. 编程:向内存0:200-0:23F依次传送数据0~63
    汇编实验四 [bx]和loop指令的联合使用_第1张图片

代码分析:
首先,ax=0,bx=200h,对应下面的mov ds:[bx],al即把al里面的内容移动到0:200里面,这里inc bx表示先把0mov到0:200之后,再把地址移动到0:201处,同时把al的值加1,即这个时候mov的是1.如此循环。
但是现在我不明白的是那一条语句表示的是循环到63时停止.。猜测是mov cx,64的原因,cx是计数寄存器

本问题中mov ax,4c00h表明应用程序要退出,并为调用本程序的程序返回00,传递退出信息。
汇编实验四 [bx]和loop指令的联合使用_第2张图片
2. 编程:向内存0:2000:23F依次传送数据063,程序中只能使用9条指令(包括程序的2条返回语句)

汇编实验四 [bx]和loop指令的联合使用_第3张图片
汇编实验四 [bx]和loop指令的联合使用_第4张图片
出现问题:-d想要看数据的时候会强制退出dosbox
因为如果不首先改变ds段地址的话,那么在我运行代码的时候改变的也是当前段地址ds:0-ds:的内容,所以当我-d 000:200的时候是不会查看到我想要改变的内容的,所以我必须在执行之前就把段地址给改了。

解决方法:在debug sy3.exe之后第一步就利用-r ds将ds改为0000然后再去单步执行sy3.exe,需要说明的是:当遇到下一个命令是loop时,可以直接使用-p来执行完下面所有的代码,那么至此问题就解决了。
汇编实验四 [bx]和loop指令的联合使用_第5张图片
3. 下面程序的功能是将“mov ax,4c00h”之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果。
assume cs:code
code segment
mov ax,
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,
s: mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
汇编实验四 [bx]和loop指令的联合使用_第6张图片
三.编程提示
对于实验任务3,有如下说明:
因为题目的要求是把代码段内的指令当作数据,复制到目的地址。所以要确定要复制的数据的位置和长度。
1.因为要复制的数据是代码段的一部分指令,那么要复制的数据的段地址就和代码段的段地址相同。
2. 因为要复制的数据是代码段的一部分指令,所以要复制的数据的长度,就是要复制的指令的长度,可以先假设要复制8位[1h~0ffh]数据的字节数(如:10h),把程序补全,以便通过编译。将程序补充完整并将其编译、连接、运行,接着进行DEBUG,在DEBUG时我们可以算出该程序的长度。然后得到正确的值后重新将程序补充完整。
四.实验要求
实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等
五.实验报告
1、程序说明。说明程序的功能、结构。
2、调试说明。包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
3、写出源程序清单和执行结果

你可能感兴趣的:(汇编)