5.0 概述
1.[BX]和内存单元的描述
要完整地描述一个内存单元,需要有两种信息:1)内存单元的地址;2)内存单元的长度(类型)。
用[0]表示一个内存单元时,0表示偏移地址,段地址默认在DS中,单元的长度(类型)可以由具体指令中的其他操作对象(如寄存器)指出。
[bx]同样表示一个内存单元,它的偏移地址在bx中。
2.loop
循环指令。
3.自定义的描述性符号“()”
为了描述的简洁,用“()”来表示一个寄存器或内存单元中的内容。
4.约定符号idata表示常量
5.1 [BX]
mov ax,[bx]
功能:bx中存放的数据做为一个偏移地址EA,段地址SA默认在ds中。将SA:EA处的数据送入ax中。
mov [bx],ax
功能:bx中存放的数据做为一个偏移地址EA,段地址SA默认在ds中。将ax处的数据送入SA:EA中。
5.2 loop指令
loop指令的格式是:
loop 标号
CPU执行loop指令的时候,要进行两步操作:1)(cx)=(cx)-1;2)判断cx中的值,不为0则转至标号处执行程序,为0则向下执行。
5.3 在debug中跟踪用loop指令实现的循环程序
>>>>在汇编源程序中,数据不能以字母开头<<<<
>>>>程序中的int 21指令,需要用p命令来执行<<<<
>>>>使用g命令,可以直接运行到自己指定的地址处<<<<
>>>>使用p命令,可以直接运行到循环结束<<<<
5.4 Debug和汇编编译器masm对指令的不同处理
Debug将[idata]解释为一个内存单元,而编译器将[idata]解释为idata。可以利用下面的方法来改变编译器的解释:
1)利用bx寄存器,如使用[bx]
2)显示地加上段寄存器,如使用ds:[idata]
5.5 loop和[bx]的联合应用
在实际编程中,我们经常会遇到用同一种方法处理坡地连续的内存单元中的数据的问题。我们需要用循环来解决这类问题,同时我们必须能够在每次循环的时候按照同样一种方法来改变要访问的内存单元的地址。
5.6 段前缀
指出现在访问内存单元的指令中,用于显示地指明内存单元段地址寄存器的标识,在汇编语言中称为段前缀。
如:mov ax,ds:[bx]
5.7 一段安全的空间
0:200~0:2ff
5.8 段前缀的使用
实验4 [bx]和loop的使用
略