码迷,mamicode.com
首页 > 其他好文 > 详细

实验四 [BX]和loop的使用

时间:2018-11-17 20:46:42      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:指令   单元   但我   而且   控制   功能   src   地址   http   

1. 综合使用 loop,[bx],编写完整汇编程序,实现向内存 b800:07b8 开始的连续 16 个 字单元重复填充字数据0403H。 

源程序如图所示

技术分享图片

编译连接后的运行结果

技术分享图片

将line7的0403h改为0441h后的运行结果为

技术分享图片

2. 综合使用 loop,[bx],编写完整汇编源程序,实现向内存 0:200~0:23F 依次传送数据 0~63(3FH)。

(1)必做:综合使用loop, [bx], mov实现 

 源程序如图所示

技术分享图片

编译连接后进行追踪

技术分享图片

使用d命令和g命令查看执行前后 0:200~23f的变化

技术分享图片

 

(2)选做*:利用栈的特性,综合使用 loop,push 实现(限定仅使用 8086 中已学过 指令实现) 

 源程序如图所示

 技术分享图片

 追踪程序执行过程,使用d命令和g命令查看执行前后 0:200~23f的变化

技术分享图片

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

 这个实验要求我们复制程序返回指令之前的指令,那么我们首先要做的就是找到程序存储的位置,由第四章4.9可知cs:ip指向程序的第一条指令,那么我们看一下这个程序,它的line4要求我们将ax的值存入到段地址ds中,而再看line9和line10,很明显,这就是将指令复制到):200处的指令,那么ds:bx内的数据就是我们的程序,而且我们可以从cs和code得到程序的段地址,那么line3第一个空应该填cs或者code,接下来就是line8的空,cx用来控制循环的次数,但我们不知道这个程序到底有多少字节,那我们应该先随便填写一个数,编译连接后追踪程序,用r命令查看程序的总长度(cx=1c),但我们得到的字节数是包括了程序返回指令的字节数的,因此我们要减去多余的数,已知程序返回指令的字节数为5,那么我们就减去5,得到总长为17,因为这是16进制,所以我们应该填 17h.

操作过程如下图所示

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

 

实验四 [BX]和loop的使用

标签:指令   单元   但我   而且   控制   功能   src   地址   http   

原文地址:https://www.cnblogs.com/-Anguvia-/p/9975156.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!