汇编语言 数据寄存器AX、BX、CX、DX

8086内部有4个16位的数据寄存器AX、BX、CX和DX,用来存放16位数据信息或地址信息;也可分成8个8位寄存器来使用,低8位寄存器位AL、BL、CL和DL,高8位为AH、BH、CH和DH,它们只能用来存放8位数据,不能用来存放地址信息。这些通用寄存器也可以有专门的用途。

  • AX为累加器:它是编程中用得最多、最频繁的寄存器。AX、AH和AL在乘、除法等操作中有专门的用途。
  • BX为基址寄存器:可以用来存放偏移地址。
  • CX为计数寄存器:在循环操作时作计数器用,用于控制循环程序的执行次数。
  • DX为数据寄存器:在乘、除法及I/O端口操作时有专门用途。

通过汇编指令来修改寄存器中的内容,从而来控制CPU,寄存器是CPU中保存地址信息和数据信息的地方,寄存器之间是互相独立的。

以下为通用寄存器:

  • AX = AH(High) + AL(Low) = AX可以存放一个字型数据 = 存放2个字节型数据
  • BX = BH + BL
  • CX = CH + CL
  • DX = DH + DL

注:H = high 高 ,L= Low低,AH为高八位,AL为低八位,通用寄存器由高八位和低八位组成。

通用寄存器 一般存放数据 ,存放的最小值为0000H,最大值为FFFFH,由2个字节构成的。(2Byte = 16Bit)
范围0 ~ 65535(0 ~ 2的16次方 - 1)

Byte = 8bit (字节型数据)

  • 一个内存地址就能保存一个字节

word = 2Byte = 16bit (字型数据)

  • 一个字需要2个地址连续的内存单元来存放
  • 高位地址存放 高位字节
  • 低位地址存放 低位字节

例如:
汇编语言 数据寄存器AX、BX、CX、DX_第1张图片
由上图可得不同地址存放的字节型和字型的数据分别为:

  • 0 地址内存单元存放的<字节型>数据为 33H

  • 0 地址内存单元存放的<字型>数据为 2C33H

  • 2 地址内存单元存放的<字节型>数据为 6FH

  • 2 地址内存单元存放的<字型>数据为 F26FH

  • 1 地址内存单元存放的<字节型>数据为 2CH

  • 1 地址内存单元存放的<字型>数据为 6F2CH


使用 以下指令可为寄存器赋值

mov 寄存器, 值

在这里插入图片描述

为AX寄存器赋值,在AX寄存器中存入 4E20
在这里插入图片描述

可以看到AX寄存器已经被赋值4E20
在这里插入图片描述
当为AH赋值时,可以发现AX寄存器的高八位的值已经发生变化。
汇编语言 数据寄存器AX、BX、CX、DX_第2张图片

当为AL赋值时,AX寄存器的低八位的值也发生了变化。
汇编语言 数据寄存器AX、BX、CX、DX_第3张图片

例如:
执行以下指令得到结果:

mov ax,4E20  ;将4E20赋值给 ax
mov bh,ah    ;将ah的值赋值给bh(AX高八位的值赋给BX的高八位)
mov cl,al	 ;将al的值赋值给cl(AX低八位的值赋给CX的低八位)
mov dx,ax    ;将ax的值赋值给dx(AX寄存器的值赋值给DX寄存器)

汇编语言 数据寄存器AX、BX、CX、DX_第4张图片
例一:

mov ax,18    ;将18赋值给 ax     结果:ax = 0018
mov ah,78    ;将78的值赋值给ah  结果:ax = 7818
add ax,8	 ;将78的值赋值给ax  结果:ax = 7820
mov bx,ax    ;将ax的值赋值给bx  结果:bx = 7820
add ax,bx    ;将bx与ax相加,相加后的结果保存在ax中  结果:ax = F040

例二:

mov ax,1090    ;将1090赋值给 ax     结果:ax = 1090
mov bx,1090    ;将1090的值赋值给bx  结果:bx = 1090
add ax,bx	 ;将bx的值与ax的值相加  结果:ax = 2120

例三:

mov ax,8226  ;将8226赋值给 ax     结果:ax = 8226
mov bx,ax    ;将8226的值赋值给bx  结果:bx = 8226
add ax,bx	 ;将bx的值与ax的值相加  结果:ax = 044C

汇编语言 数据寄存器AX、BX、CX、DX_第5张图片
例四:

mov ah,0   ;将0赋值给 ah     结果:ax = 0000
add al,85    ;将85赋值给 al     结果:ax = 0085
add al,93   ;将93赋值给 al     结果:ax = 0018

汇编语言 数据寄存器AX、BX、CX、DX_第6张图片
注:

  • 寄存器之间是互相独立的,AH 和AL 也是互相独立的。
  • AL的值不能直接赋值给AX
    例如:
    mov al,10
    mov ax,al
    因为AL的取值范围为 0 ~ FFH,AX的取值范围为0 ~ FFFFH。

例五:

mov ax,F4A3     ; 结果:ax = F4A3
mov ah,31       ; 结果:ax = 31A3
mov al,23       ; 结果:ax = 3123
add ax,ax       ; 结果:ax = 6246
mov bx,826C     ; 结果:bx = 826C
mov cx,ax       ; 结果:cx = 6246     ax = 6246   bx = 826C
mov ax,bx       ; 结果:ax = 826C     bx = 826C   cx = 6246
add ax,bx       ; 结果:ax = 04D8     bx = 826C   cx = 6246
mov al,bh       ; 结果:ax = 0482     bx = 826C   cx = 6246
mov ah,bl       ; 结果:ax = 6C82     bx = 826C   cx = 6246
add ah,ah       ; 结果:ax = D882     bx = 826C   cx = 6246
add al,6        ; 结果:ax = D888     bx = 826C   cx = 6246
add al,al       ; 结果:ax = D810     bx = 826C   cx = 6246
mov ax,cx       ; 结果:ax = 6246     bx = 826C   cx = 6246

例六:

汇编语言 数据寄存器AX、BX、CX、DX_第7张图片

mov ax,4E20    ;执行结果:ax = 4E20
add ax,1416    ;执行结果:ax = 6236
mov bx,2000    ;执行结果:bx = 2000
add ax,bx      ;执行结果:ax = 8236   bx = 2000
mov bx,ax      ;执行结果:ax = 8236   bx = 8236
add ax,bx      ;执行结果:ax = 046C   bx = 8236
mov ax,001A    ;执行结果:ax = 001A   bx = 8236
mov bx,0026    ;执行结果:ax = 001A   bx = 0026
add al,bl      ;执行结果:ax = 0040   bx = 0026
add ah,bl      ;执行结果:ax = 2640   bx = 0026
add bh,al      ;执行结果:ax = 2640   bx = 4026
mov ah,0       ;执行结果:ax = 0040   bx = 4026
add al,bl      ;执行结果:ax = 0066   bx = 4026
add al,9C      ;执行结果:ax = 0002   bx = 4026

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