假装自己基础知识都会,结果发现还是要先补……
二进制数据
bit
是最小的单位;
最右边一位编号为0,叫最低位/LSB;最左一位是最高位/MSB。
nibble
1 nibble = 4 bits eg. 1001
用于16进制数处理,因为1H = 0001B;
用于BCD码处理。
byte
1 byte = 8 bits (= 2 nibbles) eg. 1001
是8086的最小可寻址单元,主存按byte编址;
可以存放0-255的unsigned或-128-127的signed;
还用来存放字符。
word
1 word = 16 bits = 2 bytes
0-7位:低字节 Low Order Byte;8-15位:高字节 High Order Byte;
8086中内存段地址和偏移地址都是word。
double word
1 double word = 32 bits = 2 words = 4 bytes
0-7位:低字 Low Order Word;8-15位:高字 High Order Word。
寄存器
8086有14个16bits寄存器。分为:8个通用寄存器,4个段寄存器,2个控制类寄存器。
通用寄存器
数据寄存器 AX, BX, CX, DX
每一个寄存器XX分为高低XH, XL两个。
AX:
Accumulator 累加器
乘除法运算、串运算、I/O指令中作为专用寄存器
BX:
Base 基址寄存器
寻址时存放基址
CX:
Count 计数寄存器
循环、串操作指令中用作计数器
DX:
Data 数据寄存器
寄存器间接寻址的I/O指令中存放I/O端口地址;
双字长除法运算时和AX存放一个双字长数据,DX存高位。
变址寄存器 SI, DI
除做通用寄存器外,常常用来寻址
SI:
Source Index 源变址寄存器
DI:
Destination 目的变址寄存器
地址指针寄存器 SP, BP
存放数据,更多存放内存单元的偏移地址
SP:
Stack Pointer 堆栈指针寄存器
堆栈的栈顶内存单元的偏移地址
除了堆栈操作外不应改变SP的地址
BP:
Base Pointer 基址指针寄存器
做通用寄存器、寻址
一点说明
只有BX, BP, SI, DI可以用在方括号[]中来寻址
缺省地址:如果方括号中有bp,段地址就是ss;如果没有bp,一律是DS
段寄存器 CS, SS, DS, ES
CS:
Code Segment 代码段寄存器
存放代码段的段地址
SS:
Stack Segment 堆栈段寄存器
存放堆栈段的段地址
DS:
Data Segment 数据段寄存器
存放数据段的段地址
ES:
Extra Segment 附加数据段寄存器
存放附加段的段地址
控制寄存器 IP, FL
IP:
Instruction Pointer 指令指针寄存器
存放代码段中的偏移地址
程序运行过程中, CS:IP始终指向下一条指令的首字节;CS是段地址, IP是偏移地址
用户程序不能直接访问IP
FL:
Flags 标志寄存器
16位寄存器,但只用其中9位(只考6个常用的:CF, ZF, OF, SF, DF, IF)
OF:
Overflow Flag 溢出标志
运算溢出置1, 否则置0;
JO:OF=1跳;JNO:OF=0跳;
非符号数运算不用考虑OF。
SF:
Sign Flag 符号标志
记录运算的符号,负数置1,否则置0;
JS:SF=1跳;JNS:SF=0跳;
仅对符号数有意义。
ZF:
Zero Flag 零标志
运算结果为零置1,否则置0;
JZ/JNZ.
CF:
Carry Flag 进位标志
运算时从最高位产生的进位值或借位值;
有进位/借位置1, 否则置0;
JC/JNC;
CLC:置0,STC:置1,CMC:反转CF;
仅对非符号数有意义。
DF:
Direction Flag 方向标志
DF=1时每次操作后SI和DI减量,使串处理从高地址向低地址方向进行;DF=0相反;
CLD:置0,STD:置1.
IF:
Interrupt Flag 中断标志
IF=1允许中断,IF=0关闭中断;
CLI:置0,STI:置1.