汇编语言之寄存器使用bx si di bp

转载自:https://www.cnblogs.com/youxin/archive/2012/05/29/2524780.htmlhtml

 

若是你看到这篇博客时正在作第七章问题,强烈建议先去把8.1~8.4看了,由于你在这章写代码踩的有关[...]的坑,在8.1~8.4都有说明, 下面都是8.1的内容缓存

 

通用寄存器的主要用途

寄存器的分类 寄存器

主 要 用 途spa

指针

htm

blog

内存

数据

 

寄存器ci

AX

乘、除运算,字的输入输出,中间结果的缓存get

AL

字节的乘、除运算,字节的输入输出,十进制算术运算博客

AH

字节的乘、除运算,存放中断的功能号

BX

存储器指针

CX

串操做、循环控制的计数器

CL

移位操做的计数器

DX

字的乘、除运算,间接的输入输出

变址
寄存器
SI

存储器指针、串指令中的源操做数指针

DI

存储器指针、串指令中的目的操做数指针

变址
寄存器
BP

存储器指针、存取堆栈的指针

SP

堆栈的栈顶指针

指令指针

IP/EIP  
标志位寄存器 Flag/EFlag  
32位

CPU的

段寄存器

16位CPU的

段寄存器

ES  附加段寄存器
CS  代码段寄存器
SS  堆栈段寄存器
DS  数据段寄存器
新增长的
段寄存器
FS  附加段寄存器
GS  附加段寄存器
这张表用来参照。

(1)在8086CPU中只有这四个寄存器能够在[...]中进行内存单元的寻址。
好比,下面的指令都是正确的:

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).在[...]中,这四个寄存器能够单独出现,或者只能以四种组合出现: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)

相关文章
相关标签/搜索