第一章导论
1.3
冯诺依曼体系结构
(1)以二进制形式表示指令和数据
(2)程序和数据事先放在存储器中(预存储)
(3)由运算器、控制器、输入设备和输出设备五大部件组成
字长、主频、架构
地址总线AB
数据总线DB
控制总线CB
运算器ALU
控制器CU
指令寄存器IR
指令译码器ID
可编程逻辑阵列PLA
程序计数器PC 存放下一条要执行指令所在的存储单元的地址
地址寄存器AR
数据缓冲寄存器DR
累加器A
标志寄存器FLAGS(程序状态字PSW)
寄存器阵列RA
存储器
位Bit、字节Byte、字Word
内存容量
K----2^10 M----2^20 G---2^30 T------2^40
第二章 数制和编码
2.2
原码
反码
正数的反码与原码相同
负数的反码是在原码的基础上,符号位不变(仍为1),数值位按位取反
[-0]反=(2^8-1)-0 =1111 1111B
[-127]反=(2^8-1)-127=1000 0000B
补码
正数的补码与其原码、反码相同
负数的补码是在原码基础上,符号位不变,数值位按位取反,末位加1(反码+1)
[+48]补=0011 0000B=30H 字长扩展 =0000 0000 0011 0000B=0030H
[-48]补=1101 0000B=0D0H =1111 1111 1101 0000B=0FFD0H
[-128]补=2^8-128(用定义算)=1000 0000B=80H =0FF80H
溢出
符号位进位CF、数值部分最高位(次高位)进位DF
OF=CF⊕DF
同时有进位或者同时没有进位,结果没有溢出
负+负 正+正 可能溢出
正-正 正+负 不溢出
第三章 8086微处理器
3.1
3.2
主频是指芯片所使用的主时钟频率,直接影响计算机的运行速度
8086有20根地址线,直接对2^20=1M个存储单元进行访问 00000H~FFFFFH
总线接口单元BIU-----------访问内存
执行单元EU----------访问I/O
存储器分段结构 段地址:段内偏移地址(有效地址)
AX累加器
BX基址寄存器 BX用来存放操作数在内存中数据段内的偏移地址,BP用来存放操作室在堆栈段内的偏移地址
CX计数器 在设计循环程序时放循环此时
DX数据寄存器 在寄存器间接寻址的I/O指令中存放I/O端口地址,在双字长乘法运算时,DX与AX一起存放一个双字长操作数,其中DX存放高16位
SP堆栈指针寄存器
BP基指寄存器 堆栈段内的偏移地址
SI源变址寄存器
DI目的变址寄存器
IP程序指针寄存器,用户不能直接访问IP
FLAGS标志寄存器
状态标志位
CF进位标志位
PF奇偶标志位,低8位含有偶数个1时,PF为1
AF辅助进位标志位,低字节的低4位向高4位有进位或借位时,AF=1
ZF零标志位,结果为0,ZF为1
SF符号标志位,最高位为1,SF=1
OF溢出标志位,溢出,OF=1
控制标志位
TF跟踪(陷阱)标志位,TF置1,处于单步工作方式
IF中断允许标志位,用来控制可屏蔽中断的控制标志位,用STI指令将IF置1,表示允许CPU接受外部从INTR引脚上发来的可屏蔽中断请求信号;用CLI指令将IF清0,禁止CPU接受可屏蔽中断请求信号。IF的状态对非屏蔽中断及内部中断没有影响
DF方向标志位,用STD将DF置1,串操作按减地址方式进行(每操作一次地址自动递减);若用CLD将DF清0,串操作按递增地址方式进行
8086引脚
地址/数据分时复用引脚AD15~AD0,传送地址时单向输出,传送数据时双向输入或输出
地址/状态时分复用引脚A19/S6~A16/S3,当访问存储器时,A19~A16,与AD15~AD0一起构成访问存储器的20位物理地址;
控制引脚
NMI非屏蔽中断请求信号
INTR可屏蔽中断请求信号,CPU在每个指令周期的最后一个时钟周期检测该信号是否有效,若此信号有效,表明有外设提出了中断请求,这时若IF=1,则当前指令执行完立即响应中断
M/IO*
物理地址20位A19~A16、D15~D0
逻辑地址 段地址:偏移地址
端口地址
8086系统可访问的8位I/O端口有65536(64K)个
基本的读周期由4个时钟周期组成
第四章 8086指令系统
4.2
4.3
寻址方式
数据寻址方式
- 立即数寻址方式
MOV BL,80H MOV AX,1090H
- 寄存器寻址方式
(AX,BX,CX,DX,SI,DI,SP,BP
MOV CL,DL
MOV AX,BX
- 存储器寻址方式
直接寻址
MOV AL,[1064H]
MOV AL,value (用符号地址来表示偏移量)
寄存器间接寻址 BX、SI、DI
MOV ES:[DI],AX
寄存器相对寻址 BX、SI、DI、BP
MOV [SI+10H],AX
MOV CX,[BX+COUNT]
MOV AL,TABLE[BP]
基址变址寻址 BX、BP SI、DI
MOV [BX+DI],AX
MOV AH,[BP][SI]
基址变址相对寻址
MOV AH,[BX+DI+1234H]
MOV AX,COUNT[BX][SI]
- I/O端口寻址
端口直接寻址方式
IN AL,21H
端口间接寻址方式
MOV DX,120H OUT DX,AX
>FFH,必须先通过DX
地址寻址方式
(CS):(IP)
- 段内转移
NEAR:更新(IP)
- 段内直接
JMP LABEL 无条件转移(近转移)
JZ getzero 条件转移(短转移)
JMP NEAR PTR PROGIA -32768~+32767
JMP SHORT QUEST -128~+127
2.段内间接
程序转移地址存放在寄存器或存储单元中
JMP BX
JMP WORD PTR [BP+TABLE]
- 段外转移
FAR: (CS):(IP)
- 段间直接
JMP LABLE_NAME
JMP FAR PTR NEXTROUTINT
2.段间间接
JMP VAR_DOUBLEWORD (已定义的32位的存储器变量)
JMP DWORE PTR[BP][DI]
8086指令系统
- 数据传送类
MOV dst,src
reg/mem<------data
reg/mem<------>reg
reg/mem<------>seg
CS不能做目的操作数
不能meg<----->meg、seg<----->seg、seg<-----data
- 堆栈操作指令
push src (SP)<-----(SP)-2 ((SP)+1:(SP))<-----(src)
pop dst (SP)<-----(SP)+2 (dst)<-----((SP)+1:(SP))
src: reg、seg、mem
dst不能为CS
dst、src不能是立即数
- 数据交换指令
XCHG dst,src (dst)<---->(src)
reg<------>reg/mem 段寄存器的内容不能交换
- 输入/输出指令
IN acc,port acc<---port
IN acc,DX
OUT port,acc
OUT DX,acc
- 字节装换指令
XLAT
XLAT src_table AL<-----(BX)+(AL)
MOV BX,OFFSET Hex_tabel (BX)<---表首址 offset取出偏移地址
MOV AL,0AH (AL)<----序号
XLAT Hex_table
- 地址传送指令
LEA reg16,mem
LEA BX,value 等同于MOV BX,OFFSET value
mov bx,value这是错误的
地址指针装入DS指令LDS
LDS SI,[0010H]
- 标志传送指令
LAHF load AH from flags
SAHF store AH into flags
PUSHF、POPF
5
6.3
7.3
8