菜鸟学汇编002 通用寄存器AX、BX、CX、DX

1. 8086CPU有14个寄存器,

    通用寄存器:AX、BX、CX、DX

    SI、DI

    SP、BP、IP

    CS、SS、DS、ES、PSW

 

    8086CPU的所有寄存器都是16位的。

 

    8位寄存器放存放十进制数的范围:[0] 至 [2^8],  即 [0] ~ [255]

 

2. 看到上面这么多寄存器,头晕了不? = =~

 

3. 既然头晕,就一个一个来吧。 先学习通用寄存器。

 

    通用寄存器用来存放一般性数据,所以称为通用寄存器。

 

4. 有一个很有意思的地方。 8086CPU的上一代CPU,寄存器都是8位的,为了保证兼容性,

 

    8086CPU中的AX、BX、CX、DX(通用寄存器) 都只可以分为2个独立的8位寄存器来用。

 

    AX 可分为 AH AL

    BX 可分为 BH BL

    CX 可分为 CH CL

    DX 可分为 DH DL

 

    L 应该是 Lower 低8位(0 ~ 7位)的意思, H 应该是 Higher 高8位(8 ~ 15位)的意思.

 

5. 8086CPU可以一次性处理2种尺寸的数据: byte(字节)、word(字)

 

    其中 一个字(word)由2个字节组成, 1 word = 2 bytes.

 

6. 几条汇编指令:

    mov ax, 18 将18送入寄存器AX mov ah, 78 将78送入寄存器AH add ax, 8 将寄存器AX中的数值加上8 mov ax, bx 将寄存器BX中的数据送入寄存器AX add ax, bx 将AX和BX寄存器中的数值相加,结果存在AX中

 

7. 几种常见错误:

 

    mov ax, bl (不能在8位和16位寄存器之间传送数据) mov bh, ax (不能在16位和8位寄存器之间传送数据) mov al, 20000 (8位寄存器最大可存放值为:255,这个20000 = =~) add al, 100H (8位寄存器可存放不了这个高于8位的数据, 嘻嘻)

 

 

8. 代码示例:2个通用寄存器 add

    假设 ax 和 bx 都是 8226H

    add ax, bx

 

    // 以下进行小学加法运算

    8226H

                +

    8226H

 --------------------

  1044CH

 

    由于 ax 寄存器要存放 add 的结果值 1044CH, 而1044CH明显是大于4位的16进制数据,

    ax 寄存器是16位寄存器,只能存放 16 / 4 = 4 位16进制数据,

    所以最高位 1 无法在ax 寄存器中保存,最终 ax 寄存器中存放的数据为: 044CH

 

9. 代码示例:al 寄存器 add

    假设: al 中存放的数据为 C5H

    add al, 93H

 

    // 下面还是进行小学加法运算

    C5H

           +

    93H

----------------

  158H

 

    由于al 是8位寄存器,最多只能存放 8 / 4 = 2位16进制数据,

    So, 最高位 1 无法在 al 寄存器中存放, 最终 al 寄存器中的数据为 58H

 

你可能感兴趣的:(c,汇编,byte)