文章目录[隐藏]
数据处理的两个基本问题:我们知道,计算机是进行数据处理、运算的机器,那么有两个基本的问题就包含在其中:
(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)