汇编语言bx、si、di和bp寄存器

(1)处理的数据在什么地方?
(2)要处理的数据有多长?
这两个问题,在机器指令中必须给以明确或隐含的说明,否则计算机就无法工作。本章中,我们就要针一对8086CPU对这两个基本问题进行讨论。虽然讨论是在8086CPU的基础上进行的,但是这两个基本问题却是普遍的,对任何一个处理机都存在。我们定义的描述性符号:reg和sreg 为了描述上的简洁,在以后的课程中,我们将使用两个描述性的符号reg来表示一个寄存器,用sreg表示一个段寄存器。
reg的集合包括:ax, bx, cx, dx, ah, al, bh, b1, ch, c1, dh, dl, sp, bp, si
sreg的集合包括:ds, ss, cs, es

bx、si、di和bp

前3个寄存器我们己经用过了,现在我们进行一下总结
(1)在 8086CPU 中,只有这 4 个寄存器可以用在 “[...]” 中来进行内存单元的寻址。
比如下面的指令都是正确的:

mov ax, [bx]
mov ax, [bx+si]
mov ax, [bx+di]
mov ax, [bp]
mov ax, [bp+si]
mov ax, [bp+di]

而下面的指令是错误的

mov ax, [cx]
mov ax, [ax]
mov ax, [dx]
mov ax, [ds]

(2)在 “[...]” 中,这四个寄存器可以单个出现,或者以 4 种组合出现:bx 和 si,bx 和 di,bp 和 si,bp 和 di。
比如下而的指令是正确的:

mov ax,[bx]
mov ax,[si]
mov ax,[di]
mov ax,[bp]
mov ax,[bx+si]
mov ax,[bx+di]
mov ax,[bp+si]
mpv ax,[bp+di]
mov ax,[bx+si+idata]
mov ax,[bx+si+idata]
mov ax,[bp+si+idata]
mov ax,[bp+di+idata]

下面就是错误的:

mov ax,[bx+bp]
mov ax,[si+di]

(3)只要在[....]中使用寄存器bp,而指令汇总没有显示给出段地址,段地址就默认在ss中。 比如下面的指令。

mov ax,[bp]               含义:(ax)=((ss)*16+(bp))
mov ax,[bp+idata]         含义:(ax)=((ss)*16+(bp)+idata)
mov ax,[bp+si]            含义:(ax)=((ss)*16+(bp)+(si))
mov ax,[bp+si+idata]      含义:(ax)=((ss)*16+(bp)+(si)+idata)

发布日期:

所属分类: 易语言 标签: