8086的通用寄存器

AX

8086是16位的微处理器。这意味着,它的所有寄存器也都是16位的,它能一次性处理16位数据。它有4个通用寄存器,分别是AX,BX,CX,DX。他们逻辑结构是一致的,下图展示了AX的结构。

不过这四个寄存器都可以分别作为两个独立的8位寄存器。例如AL作8位寄存器的时候,一旦数据超过FFH就会被丢弃或者是存放在进位位中,而不是把进位位放在上图8这个位置处。

AX分为AH和AL; BX分为BH和BL; CX分为CH和CL; DX分为DH和DL;(H代表高8位,L代表低8位)

从图中可以看到数据在寄存器中的排列顺序。

在进行数据传输或者是运算的时候,需要注意汇编指令的两个操作数的位数应当是一致的。

BX

BX寄存器有一个特殊的功能,就是可以用来做寄存器寻址,例如:

mov ax,2000H
mov ds,ax
mov bx,1000H
mov [bx],ax

上面这段指令将2000H送入内存地址位2000:1000的内存单元。AX,CX,DX寄存器不能这样使用。

上图明确的展示了只有BX寄存器可以这样使用。

CX

CX寄存器中的值影响loop指令的执行。如果我们使用loop指令来实现循环,那么CX寄存器中存放的就是循环次数。下面这个例子展示了使用loop指令结合cx寄存器来求得2^3。

assume cs:code

code segment

    mov ax,1
    mov cx,3
s:  add ax,ax
    loop s


mov ax,4c00H
int 21H

code ends

end

在debug下,我们一步一步执行,即可看到AX,CX的值都在变化。如下所示:

 

可以看到CX寄存器中的值是自动递减的。最后当CX=0000的时候,循环结束。下一条指令变成了MOV AX,4C00,这也说明了CX确实能控制循环的次数。换成别的寄存器就不行了,例如换成BX寄存器。那么上面的代码会一直执行到AX溢出,才停止循环。因此,通常我们的循环代码都会写成如下的格式:

    mov cx,循环次数
s:  需要循环执行的代码段
    loop s

段前缀

段前缀是明确指出了段地址所在,如下的指令都是.

mov ax,cs:[bx]
mov ax,ds:[bx]
mov ax,ss:[bx]
...

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值