8086内部有4个16位的数据寄存器AX、BX、CX和DX,用来存放16位数据信息或地址信息;也可分成8个8位寄存器来使用,低8位寄存器位AL、BL、CL和DL,高8位为AH、BH、CH和DH,它们只能用来存放8位数据,不能用来存放地址信息。这些通用寄存器也可以有专门的用途。
通过汇编指令来修改寄存器中的内容,从而来控制CPU,寄存器是CPU中保存地址信息和数据信息的地方,寄存器之间是互相独立的。
以下为通用寄存器:
注:H = high 高 ,L= Low低,AH为高八位,AL为低八位,通用寄存器由高八位和低八位组成。
通用寄存器 一般存放数据 ,存放的最小值为0000H,最大值为FFFFH,由2个字节构成的。(2Byte = 16Bit)
范围0 ~ 65535(0 ~ 2的16次方 - 1)
Byte = 8bit (字节型数据)
word = 2Byte = 16bit (字型数据)
0 地址内存单元存放的<字节型>数据为 33H
0 地址内存单元存放的<字型>数据为 2C33H
2 地址内存单元存放的<字节型>数据为 6FH
2 地址内存单元存放的<字型>数据为 F26FH
1 地址内存单元存放的<字节型>数据为 2CH
1 地址内存单元存放的<字型>数据为 6F2CH
使用 以下指令可为寄存器赋值
mov 寄存器, 值
可以看到AX寄存器已经被赋值4E20
当为AH赋值时,可以发现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
例五:
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