[BX]和Loop命令
[BX]和内存单元的描述
*
*完整描述一个内存单元,需要两种信息
1.内存单元的地址
2.内存单元长度(类型)
*[0]:0表示单元的偏移地址,段地址默认在ds中,单元长度由具体指令的其他操作对像指出,如AX,AL
LOOP指令
*描述性符号“()”
*约定符号idata表示常量
*格式:Loop 标号
*CPU执行loop时需要执行两步操作
loop s
1.(cx)=(cx)-1;
2.判断cx中的值,不为零转至标号s,为0执行下一条指令
*loop循环框架
mov cx,次数
s:
循环程序段
loop s
在Debug中跟踪用loop指令实现的循环程序
*赋值是指让ax中的数据的值和ffff:0006单元中数据的值大小相等
*即使两个数据的长度不同,但是他们的值是相等的
如何赋值
*汇编中数据不能以字母开头,需要在前加0
*用P和G指令直接执行完循环
Debug和汇编编译器masm对指令的不同处理
1、MASM代码中默认是十进制的,而debug是十六进制。
2、MASM中mov ax,[bx]将数据寄存器dx*16+bx中的值放入ax中
Debug中使用mov ax,[0] 将数据寄存器dx*16+0中的值放入ax中
*如要将masm像Debug一样需要加上段地址ds
Loop和[bx]联合应用
*解决类型的匹配和结果的不超界:如8位和16位可以利用一个16位寄存器做中介
具体做法:将内存单元中的8位数据赋值到一个16位寄存器ax中,再将ax加到bx上
段前缀
*ex:mov ax [bx]中,段地址默认在ds中,ds称为一个段前缀
*可以手动更改指令中的段前缀如将ds改为es,cs等