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个地址连续的内存单元来存放
* 高位地址存放 高位字节
* 低位地址存放 低位字节
例如:

由上图可得不同地址存放的字节型和字型的数据分别为:

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

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

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

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

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

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

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

为AX寄存器赋值,在AX寄存器中存入 4E20

可以看到AX寄存器已经被赋值4E20

当为AH赋值时,可以发现AX寄存器的高八位的值已经发生变化。

当为AL赋值时,AX寄存器的低八位的值也发生了变化。

例如:
执行以下指令得到结果:
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寄存器)

例一:
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

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

注:

* 寄存器之间是互相独立的,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
例六:

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

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信