汇编语言_第5章 [BX]和loop指令

1.[bx]和内存单元的描述
要完整的描述一个内存单元,需要2种信息:①内存单元的地址;②内存单元的长度(类型)。
用[0]表示一个内存单元时,0表示单元的偏移地址,段地址默认在ds中,单元的长度(类型)可以由具体指令中的其他操作对象(比如寄存器)指出。
[bx]同样也表示一个内存单元,它的偏移地址在bx中。
如:mov ax,[bx] 将一个内存单元的内容送入ax,这个内存单元的长度为2字节(字单元),存放一个字,偏移地址在bx 中,段地址在ds中。

2. loop 循环
3. 我们定义的描述性的符号:“()”
为了描述上的简洁,我们将使用一个描述性的符号“()”来表示一个寄存器或一个内存单元中的内容。
例:
(ax)表示ax中的内容、(al)表示al中的内容;
(20000H) 表示内存20000H单元的内容(()中的内存单元地址为物理地址);
((ds)* 16+(bx))表示:ds中的内容为ADR1,bx 中的内容为ADR2,内存ADR1*16+ADR2单元的内容。

注意:“()”中的元素可以有3种类型:①寄存器名;②段寄存器名;③内存单元的物理地址(一个20位数据)。
在这里插入图片描述
“(X)” 所表示的数据由2种类型: ①字节;②字。 是哪种类型由寄存器名 或 具体的运算决定。例:
在这里插入图片描述
4. 约定符号idata 表示常量

5.1 [BX]
在这里插入图片描述
在这里插入图片描述

5.2 Loop指令
loop指令的格式:loop 标号
CPU执行loop指令的时候,要进行2步操作:
①(cx)=(cx)-1;通常 cx 中存放循环次数
② 判断cx中的值,不为0 则转至标号处执行程序,如果为0则向下执行。
在这里插入图片描述

5.3 在Debug中跟踪用loop指令实现的循环程序
计算ffff:0006 单元中的数乘以123,结果存储在dx中
在这里插入图片描述
Debug 跟踪:
在这里插入图片描述

5.4 Debug 和汇编编译器masm对指令的不同处理
在这里插入图片描述

5.5 loop 和[bx]的联合应用
计算ffff:0~ffff:b 单元中的数据的和,结果存储在dx中。
在这里插入图片描述
5.6 段前缀

  • 出现在访问内存单元的指令中,用于显式地指明内存单元的段地址的“ds:”“cs:”“ss:”“es:”,在汇编语言中称为段前缀
    在这里插入图片描述
    以下例子同上:
    (2)mov ax,cs:[bx]
    (3)mov ax,ss:[bx]
    (4)mov ax,es:[bx]
    (5)mov ax,ss:[0] 等等

5.7 一段安全的空间
在这里插入图片描述

5.8 段前缀的使用
将内存ffff:0~ffff:b 单元的数据复制到0:200 ~0:20b单元中。
在这里插入图片描述

To be continue…

猜你喜欢

转载自blog.csdn.net/madao1234/article/details/83584977