8086CPU的14个寄存器:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。
##############################################以下为寄存器的英文全称,内容转自:http://blog.csdn.net/knxw0001/article/details/7249248
通用寄存器:
ax——accumulate register——累加器
bx——based register——基地址寄存器
cx——count register——计数器
dx——data registered——数据寄存器
段寄存器:
cs——code segment——代码段
ds——data segment——数据段
ss——stack segment——栈段寄存器
es——extra segment——附加段寄存器
特殊功能寄存器:
ip——instructor point——指令指针寄存器
sp——stack point——堆栈指针寄存器
bp——base point——基础指针
si——source index——源变址寄存器
di——destination index——目的变址寄存器
psw——program state word——程序状态字
Psw的常用标志:
OF(11位-overflow flag-溢出标志位)——OV(overflow-溢出)——NV(not overflow-没溢出)
DF(10位-direction flag-方向标志位)——DN(down-下方)——UP(up-上方)
IF(9位-interrupt flag-中断标志位)——EI(enable interrupt-允许中断)——DI(disabled interrupt-不允许中断)
TF(8位-trap flag-陷阱标志位)——
SF(7位-sign flag-负号标志位)——NG(negative-负)——PL(plus-正)
ZF(6位-zero flag-零值标志位)——ZR(zero-为零)——NZ(not zero-不为0)
AF(4位-auxiliary carray flag-辅助进位标志位)——AC(auxiliary carry-有辅助进位)NA(not auxiliary carry-没有辅助进位)
PF(2位-parity flag-奇偶标志位)——PE(parity even-偶)——PO(parity odd-奇)
CF(0位-carry flag-进位标志位)——CY(carried-有进位)——NC(not carried-没进位)
AX BX CX DX这四个寄存器每个大小为16位,但是可以把每个寄存器分为 两个一字节的 小寄存器
如:
AX = > AH AL
BX=>BH BL
CX=>CH CL
DX=>DH DL
H是High的缩写,也就是高8位寄存器的意思
L是Low的缩写,指低8位寄存器
汇编指令:
mov add
mov ax,123 相当于 ax=123
add ax,123 相当于 ax=ax+123
8086给出地址的方法:
8086CPU有20根总线,可以传送20位的地址
但是它又是16位结构,在它的内部只能一次性处理、传输、存储的地址为16位。
那么它是怎么给出20位的地址的呢?
8086通过内部的一个 地址加法器 采用 物理地址=段地址*16+偏移地址 的方法用段地址和偏移地址合成20位的地址
比如 CPU要访问 123C8H ,这个地址换成二进制为 10010001111001000 总共17位,超出了一个寄存器所能容纳的16位长度
那么 8086是这样做的:
先把 123C8H分成 1230H 和 00C8H ,然后 再把 1230H 乘以 16 就变成了 12300H,然后再把 13200H和 00C8H相加 最后 得出地址:123C8H
总的来说 段地址*16+偏移地址=物理地址 的方法 我们还可以看得简单一点:
把 段地址*16 的结果看成是一个 基础地址
于是 公式就成了
物理地址=基础地址(段地址*16)+便宜地址