为了进一步的使用对内存单元进行灵活的操作,所以使用[BX]和loop指令对其进行操作
[BX]和loop指令
在开始学习之前,需要对一些符号进行讲解
[bx]和内存单元的描述
要完整的描述一个内存单元,需要两种信息:
- 内存单元的地址
- 内存单元的长度(类型)
这里[bx]表示一个内存单元,段地址默认为ds,偏移地址存储在bx中
loop
loop在英文中有循环的含义,所以这个指令肯定和循环有关,我们在后面进行详细的说明
我们定义的描述性的符号:“( )”
为了描述上的简洁我们用一个描述性的符号”()“来表示一个寄存器或者一个内存单元中的值
现在我们可以把[bx]的物理地址表示为((ds)*16+(bx))
“(X)”所表示的数据有两种类型:1)字节;2)字 数据类型由寄存器名称或者具体的运算决定
约定符号idata表示常量
之前我们说在”[…]“里用一个常量0表示内存单元的偏移地址,现在我们可以把所有常量都作为[idata]
[BX]
指令功能:
1 | mov ax,[bx] |
bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将SA:EA处的数据送入ax中,即(ax) = ((ds)*16+(bx))
1 | mov [bx],ax |
bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将ax处的数据送入SA:EA处,即((ds)*16+(bx)) = (ax)
Loop指令
loop指令的格式是:loop 标号
,CPU执行loop指令的时候,需要进行两步操作:
- (cx) = (cx) - 1
- 判断cx中的值,不为0则转至标号处执行程序,如果为0就向下执行
在此我们可以看出cx的值影响了loop指令的执行结果。通常我们用loop来实现循环功能,cx中存放循环次数
这里我们通过一个程序引出关于loop的使用:
1 | assume cs:code |
我们注意到这里使用了标号”s” ,在汇编语言中标号代表一个地址,它实际上标识了一个地址