首页 > 代码库 > 汇编基础知识
汇编基础知识
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