首页 > 代码库 > 汇编基础知识

汇编基础知识

1.SI和DI

功能和bx相似,只是不能分成2个8寄存器使用。


2INC ax指令

将寄存器的内容加1

mov ax,0

inc ax

执行完毕ax=1


3.bx,si,di,bp寄存器

CPU的核心是寄存器,学习汇编这么一段时间,我也深刻体会到对寄存器理解的重要性

(1)在8086CPU中,只有这4个寄存器可以在[...]中来进行内存单元的寻址。比如下面指令是正确的。

mov ax,[bx]

mov ax,[bx+si]

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+bp]

mov ax,[si+di]


(3)只要在[...]中使用寄存器bp,而指令中没有显性给出段地址,段地址就默认在ss中,比如:

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

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

4.存放段地址的寄存器也可以显示给出,比如:

mov ax,ds:[bp]

mov ax,es:[bx]


5.指令要处理的数据有多长?

8086CPU的指令,可以处理俩种尺寸的数据,byte和word。所以在机器指令中要指明,指令进行的是字操作还是字节操作。对于这个问题,汇编语言如下处理:

(1)通过寄存器指明

mov ax,1

mov bx,ds:[0]

上面都是word

mov al,1

mov al,bl

上面都是byte

(2)在没有寄存器的情况下,用操作符X ptr指明内存单元长度,X可以是word或者byte

mov word ptr ds:[0],1

inc word ptr [bx]

inc word ptr [bx],2