【汇编语言(汇编语言第三版 王爽著)】--知识归纳--第五章

第五章 [BX]和loop指令

1.[bx]和内存单元的描述

完整地描述一个内存单元:①内存单元的地址;②内存单元的长度(类型)  
[bx]同样也表示一个内存单元,它的偏移地址在bx中。比如:  
**mov ax,[bx]**  
将一个内存单元的内容送入ax,这个内存单元长度为2字节,存放一个字,偏移地址在bx中,段地址在ds中。  

2.loop

loop这个指令与循环有关。  

3.我们定义的描述性的符号:“()”

为了描述的简介,用“()”来表示一个寄存器或一个内存单元中的内容。    
“()”的元素可以为:①寄存器名;②段寄存器名;③内存单元的物理地址(一个20位数据)  
“(X)”所表示的数据有两种类型:①字节;②字。是哪种类型由寄存器或具体的运算决定。  

4.约定符号idata表示常量

指令中,在“[...]”里用一个常量0表示内存单元的偏移地址。以后我们用idata表示常量。比如:  
mov ax,[idata]就代表 mov ax,[1]、mov ax,[2]、mov ax,[3]等。  
mov bx,idata就代表mov bx,1、mov bx,2、mov bx,3等。  

[BX]

mov ax,[bx]:
(ax) = ((ds)*16+(bx))  
mov [bx],ax:
((ds)*16+(bx)) = (ax)  
**注意:内存中,越往下,越高位**  

Loop指令

loop指令的格式是:loop 标号,CPU执行loop指令的时候,要进行两步操作:  
①(cx)=(cx)- 1;  
②判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行。  
例:计算2^12
assume cs:code  
code segment  
    mov ax,2  
	mov cx,11  
s: add ax,ax  
	loop s   
	mov ax,4c00h  
	int 21h  
code ends  
end  
总结:  
(1)在cx中存放循环次数;  
(2)loop指令中的标号所标识地址要在前面;  
(3)要循环执行的程序段,要写在标号和loop指令的中间。  

在Debug中跟踪用loop指令实现的循环程序。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HcTAAxOK-1583721418514)(1.jpg)]
在汇编源程序中,数据不能以字母开头
打开Debug开始调试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GyiHSHWy-1583721418515)(2.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bOh6ehIA-1583721418516)(3.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YDevTbXA-1583721418517)(4.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZIVnGMCe-1583721418517)(5.png)]

当我们不想一步一步跟踪前面的程序,希望一次能够执行,然后从循环开始跟踪,可以使用G命令:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NWPEyGff-1583721418518)(6.jpg)]

当想直接将循环直接运行完跳到循环下一个语句时,可以在遇到循环loop时用p指令:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O2NRaelQ-1583721418518)(7.png)]

Debug和汇编编译器masm对指令的不同处理

对于这条指令:  
mov ax,[0]
在Debug中处理是:mov ax,ds:0000  
在masm中处理时: mov ax,0  
所以在masm中要用bx来代替直接使用数值的偏移地址  
因此在masm中实现 mov ax,[0]  
方法一:mov bx,0  mov ax,[bx]
方法二:mov ax,ds:[0]  

loop和[bx]的联合应用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JBnHcTyN-1583721418519)(8.jpg)]
在实际编程中,用loop和[bx]来解决处理地址连续的内存单元中的数据问题。

段前缀

mov ax,ds:[bx]  
mov ax,cs:[bx]  
mov ax,ss:[bx]  
mov ax,es:[bx]  
mov ax,ss:[bx]  
mov ax,cs:[0]  
mov ax,ds:[0]   
以上的“ds:” “cs:” “ss:” “es:” 称为段前缀  

一段安全的空间

简单来说,汇编是对实际的硬件的操作,因此,有时候有些代码可能会改变一些数据,然后导致报错,所以不能随意地向一段内存空间写入数据或者代码,因为不知道这段空间是否存放着重要的数据或代码。  
因此,我们通常使用0:200~0:2ff空间。  

段前缀的使用

将内存ffff:0~ffff:b单元中的数据复制到0:200~0:20b单元中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FC1jrl0R-1583721418522)(9.jpg)]  

实验4 [bx]和loop的使用

(1)编程,向内存0:200~023f一簇传送数据0到63(3fh)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kcXI4Sl5-1583721418529)(10.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WKLPbngF-1583721418533)(11.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hwJnuaMC-1583721418535)(12.png)]

(2)编程,编程,向内存0:200~023f一簇传送数据0到63(3fh),程序中只能用9条指令,包括”mov ax,4c00h“和”int 21h“。
上图程序即符合题目要求,不再次展示。

(3)下面程序是将”mov ax,4c00h之前的指令复制到内存0:200处,补全程序。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RXxKQBaZ-1583721418537)(13.png)]
解答:
mov ax,cs
mov cx,5
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LplY2Q34-1583721418537)(14.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gdfbVXuc-1583721418538)(15.png)]
复制的是“mov ax,cs”到“loop s”的代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值