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

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

  1. 编程:向内存0:200-0:23F依次传送数据0~63
    在这里插入图片描述

代码分析:
首先,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,传递退出信息。
在这里插入图片描述
2. 编程:向内存0:2000:23F依次传送数据063,程序中只能使用9条指令(包括程序的2条返回语句)

在这里插入图片描述
在这里插入图片描述
出现问题:-d想要看数据的时候会强制退出dosbox
因为如果不首先改变ds段地址的话,那么在我运行代码的时候改变的也是当前段地址ds:0-ds:的内容,所以当我-d 000:200的时候是不会查看到我想要改变的内容的,所以我必须在执行之前就把段地址给改了。

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

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值