【汇编语言】[BX]和loop指令(一)—— 初识[BX]和loop指令-1. 概念引入

1.1 [bx]和内存单元的描述

[bx]是什么呢?

和[0]有些类似,[0]表示内存单元,它的偏移地址是0。比如在下面的指令中(但是注意这个是在 Debug 中使用的方式):

1.1.1 示例1

mov ax, [0]

将一个内存单元的内容送入 ax,这个内存单元的长度为2字节(字单元),存放一个字,偏移地址为0,段地址在ds中。

1.1.2 示例2

mov al, [0]

将一个内存单元的内容送入al,这个内存单元的长度为1字节(字节单元),存放一个字节,偏移地址为0,段地址在ds中。

要完整地描述一个内存单元,需要两种信息:①内存单元的地址;②内存单元的长度(类型)。

用[0]表示一个内存单元时,0表示单元的偏移地址,段地址默认在ds中,单元的长度(类型)可以由具体指令中的其他操作对象(比如说寄存器)指出。

[bx]同样也表示一个内存单元,它的偏移地址在bx中,比如下面的指令:

1.1.3 示例3

mov ax, [bx]

将一个内存单元的内容送入ax,这个内存单元的长度为2字节(字单元),存放一个字,偏移地址在bx中,段地址在ds中。

1.1.4 示例4

mov al, [bx]

将一个内存单元的内容送入 al,这个内存单元的长度为1字节(字节单元),存放一个字节,偏移地址在bx中,段地址在ds中。

1.2 loop

英文单词“loop”有循环的含义,显然这个指令和循环有关。

我们在这一章的学习中,会讲解[bx]和 loop 指令的应用、意义和相关的内容。

1.3 描述性的符号:“()”

为了描述上的简洁,在以后的内容中,我们将使用一个描述性的符号“()”来表示一个寄存器或一个内存单元中的内容

比如:

  1. (ax)表示 ax 中的内容、(al)表示 al 中的内容;

  2. (20000H)表示内存20000H单元的内容(括号中的是内存单元的地址为物理地址);

  3. ((ds)*16+(bx))表示:ds 中的内容为 ADR1,bx中的内容为 ADR2,内存 ADR1*16+ADR2 单元的内容。也可以理解为:ds中的ADR1作为段地址,bx中的ADR2作为偏移地址,内存ADR1:ADR2 单元的内容。

❗注意,“()”中的元素可以有3种类型:

①寄存器名;②段寄存器名;③内存单元的物理地址(一个 20位数据)。

比如:

(ax)、(ds)、(al)、(cx)、(20000H)、((ds)*16+(bx))等是正确的用法;

(2000:0)、((ds):1000H)等是不正确的用法。




“(X)”所表示的数据有两种类型:①字节;②字。

是哪种类型由寄存器名或具体的运算决定,比如:

  • (al)、(bl)、(cl)等得到的数据为字节型

  • (ds)、(ax)、(bx)等得到的数据为字型

  • (al)=(20000H),则(20000H)得到的数据为字节型

  • (ax)=(20000H),则(20000H)得到的数据为字型

1.4 约定符号idata表示常量

我们在 Debug 中写过类似的指令:mov ax,[0],表示将 ds:0处的数据送入 ax中。

指令中,在“[…]”里用一个常量 0表示内存单元的偏移地址。以后,我们用 idata 表示常量。比如:

mov ax,[idata]:代表mov ax,[l]、mov ax,[2]、mov ax,[3]等

mov bx,idata:代表mov bx,1、mov bx,2、mov bx,3等

mov ds,idata:代表mov ds,1、mov ds,2等,它们都是非法指令。
上一篇:十四届蓝桥杯STEMA考试Python真题试卷第二套第四题-题目描述


下一篇:分布式光伏系统管理捷径——借助专业软件