微机期末复习.docx
- 文档编号:12834188
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:36
- 大小:578.77KB
微机期末复习.docx
《微机期末复习.docx》由会员分享,可在线阅读,更多相关《微机期末复习.docx(36页珍藏版)》请在冰点文库上搜索。
微机期末复习
基本运算:
符号位,正数用0,负数用1
(注意和通信原理A律的差别,是不一样的,别搞混了!
)
原码
原码最高位是
+420101010B-4210101010B
0有两种表示00000001000000
反码
正数与原码相同,负数对非符号位取反
+420101010B-4211010101B
0两种表示000000011111111
补码
正数的补码与它的原码和反码相同
负数的补码等于其对应正数的补码包括符号位一起按位取反后加1
或复苏的补码等于符号位不变,数字部分的各位按位取反后加1
0的表示唯一
补码的运算[X+Y]补=[X]补+[Y]补
[X-Y]补=[X+(-Y)]补=[X]补+[-Y]补
8086/8088系统结构
8086
1、执行单元(EU)
执行单元由通用寄存器、标志寄存器、运算器(ALU)和EU控制系统等组成。
EU从BIU的指令队列中获得指令,然后执行该指令,完成指令所规定的操作。
EU负责全部指令的执行,向BIU提供数据和所需访问的内存或I/O端口的地址,
并对通用寄存器、标志寄存器和指令操作数进行管理
寄存器
用途
AX
字乘法,字除法,字I/O
AL
字乘法,字除法,字I/O,转移,十进制算术运算
AH
字节乘法,字节除法
BX
转移
CX
串操作,循环次数
CL
变量移位或循环控制
DX
字乘法,字除法,间接I/O
状态标志寄存器FL(Flag)共有9个状态标志位,6个为状态标志位,3个为控制标志位。
15
14
13
12
11
10
09
08
07
06
05
04
03
02
01
00
OF
DF
IF
TF
SF
ZF
AF
PF
CF
CF—进位标志位。
若做加法时出现进位或做减法时出现借位,则该标志位置1;否则清0。
位移和循环指令也影响该标志位。
PF—奇偶标志位。
若结果的低8位中1的个数为偶数,则该标志位置1;否则清0。
AF—半加标志位。
在做加法时,若位3需向位4进位,或在做减法时,若位3需向位4借位,则该标志位置1,;否则清0。
该标志位通常用于对BCD算术运算结果进行调整。
ZF—零标志位。
当运算结果的所有位均为0时,该标志位置1;否则清0。
SF—符号标志位。
当运算结果的最高位为1时,该标志位置1,否则清0。
TF—陷阱标志位(单步标志位)。
当该标志位置1时,将使8086进入单步指令工作方式。
在每条指令执行结束时,CPU总是去测试T标志位是否为1。
该中断处理程序的首地址有内存的0004H~0007H这4个单元提供。
该标志位通常用于程序的调试。
IF—中断允许标志位。
如果该标志位置1,则处理器可以影响可屏蔽中断请求;否则就不能影响可屏蔽中断请求。
DF—方向标志位。
当该标志位置1时,串操作指令为自动减量指令,DF=0时,自动增量指令。
OF—溢出标志位。
在算术运算中,带符号数的运算结果超出了8位或16位带符号数所能表达的范围,即字节运算大于+127或小于-128时,该标志位置1;当字运算大于+32767或小于-32768时,该标志位也置1。
总线接口单元(BIU)
总线接口单元由段寄存器、指令指针、地址形成逻辑、总线控制逻辑和指令队列等组成。
总线接口单元负责从内存储器的指定区域中取出指令送到指令队列中去排队;执行指令时所需要的操作数(内存储器操作数和I/O端口操作数)也由总线接口单元从相应的内存区域或I/O端口取出,传送给执行单元EU。
如果指令执行的结果需要存入内存储器,也是由BIU写入相应的内存区域。
指示器与变址寄存器组
堆栈指示器SP,基址指示器BP,源变址寄存器SI,目的变址寄存器DI。
段寄存器组
代码段寄存器CS(CodeSegment)、数据段寄存器DS(DataSegment)、
堆栈段寄存器SS(StackSegment)、附加段寄存器ES(ExtraSegment)。
指令指示器IP(InstructionPointer)
指令指示器的内容有BIU来修改,使IP包含有从当前代码段基址开始的下一条指令的偏移地址,即IP和CS一起指出了下一条指令的实际地址。
寻址方式
立即寻址
只针对源操作数
低八位低地址,高八位高地址
MOVAX,1200H
寄存器寻址
参加操作的操作数
在CPU的通用寄存器中
MOVAX,BX
直接寻址
指令中直接给出操作数的偏移地址:
默认在数据段
MOVAX,[1200H]
[1200H]给AL
[1201H]给AH
寄存器间接寻址
用寄存器的内容
表示操作数的偏移地址,
此时寄存器中的内容
不再是操作数本身,
而是存放数据的偏移地址
MOVBX,1200H
MOVAX,[BX]
注意点:
存放偏移地址的寄存器
称为间址寄存器,它们是:
BX,BP,SI,DI
偏移地址字长均为16位,
故间址寄存器必须是16位寄存器
操作数的段地址取决于选择哪一个间址寄存器:
BX,SI,DI——>数据段
BP—>堆栈段
寄存器相对寻址
操作数的偏移地址为寄存器的内容
加上一个位移量(常量)
格式:
MOVAX,[BX+DATA]
或:
MOVAX,[BX][DATA]
MOVBX,220H
MOVCL,[BX+5]
基址-变址寻址
操作数的偏移地址为
一个基址寄存器的内容+一个变址寄存器的内容;
操作数的段地址
由选择的基址寄存器决定
基址寄存器为BX,默认在数据段
基址寄存器为BP,默认在堆栈段
基址变址寻址方式与相对寻址方式一样,主要用于一维数组操作。
MOVSI,1100H
MOVBX,SI
MOVAX,[SI+BX]
基址-变址-相对寻址
操作数的偏移地址为:
基址寄存器内容+变址寄存器内容+位移量
操作数的段地址由选择的基址寄存器决定。
基址变址相对寻址方式
主要用于二维表格操作。
MOVDI,1100H
MOVBP,DI
MOVAL,[BP][DI]5
隐含寻址
指令中隐含了一个或两个操作数的地址,即操作数在默认的地址中。
MULBL
指令执行:
AL×BL——>AX
指令系统 标志位的影响
数据传送指令该类指令的执行对标志位不产生影响
一般数据传送指令MOV
两操作数字长必须相同;
两操作数不允许同时为存储器操作数;
两操作数不允许同时为段寄存器;
在源操作数是立即数时,目标操作数不能是段寄存器;
IP和CS不作为目标操作数,FLAGS一般也不作为操作数在指令中出现。
堆栈操作指令
先进后出,以字为单位
堆栈操作指令的操作数必为16位
不能是立即数,可以是16位寄存器或存储器2个单元;
若为存储器操作数,需要声明操作数的字长。
压栈指令PUSH
PUSHOPRD
指令执行过程:
SP-2→SPSP指向的是堆栈底
操作数高字节→SP+1
操作数低字节→SP
出栈指令POP
格式:
POPOPRD
指令执行过程:
SP——>操作数低字节
SP+1——>操作数高字节
SP←SP+2
交换指令
XCHGREG,MEM/REG
两操作数必须有一个是寄存器操作数,不允许使用段寄存器。
XCHGAX,BX
XCHG[2000],CL
查表指令
XLAT
BX的内容代表表格首地址,
AL内容为表内位移量,
BX+AL得到要查找元素的偏移地址
将BX+AL所指单元的内容送AL
MOVBX,2000H;BX←表首地址
MOVAL,11;AL←序号
XALT;查表转换
执行后:
AL=42H
还可用其他方法实现,如:
MOVBX,0BH
MOVAL,[BX+2000H]
字位扩展指令
格式:
CBW
将符号数的符号位扩展到高位;
指令为零操作数指令,采用隐含寻址,
隐含的操作数为AX及AX,DX
无符号数的扩展规则为在高位补0
将AL内容扩展到AX
若最高位=1,则执行后AH=FFH
若最高位=0,则执行后AH=00H
字到双字的扩展指令
CWD
将AX内容扩展到DXAX
若最高位=1,则执行后DX=FFFFH
若最高位=0,则执行后DX=0000H
输入输出指令
输入指令:
INacc,PORT
输出指令:
OUTPORT,acc
直接寻址
端口地址为8位时,指令中直接给出8位端口地址;寻址256个端口。
间接寻址
端口地址为16位时,指令中的端口地址必须由DX指定;可寻址64K个端口。
INAX,80H
MOVDX,2400H
INAL,DX
OUT35H,AX
地址传送指令
取偏移地址指令LEA
将变量的16位偏移地址取出送目标寄存器
当程序中用符号地址表示内存偏移地址时,须使用该指令。
LEAREG,SRC
源操作数必须是存储器操作数,
而目的操作数必须是16位通用寄存器。
不影响标志位
LEABX,[BX+DI+2000H]
指令执行前:
BX=4000H,DI=0100H
指令执行后:
BX=4000+0100+2000H=6100H
从源操作数所指定的存储器单元中取出4个字节的变量地址指针,
把前两个字节(变量的偏移地址)
传送到目标操作数,
后两个字节(变量的段基址)
传送到DS段寄存器中。
变量的16位地址偏移量必须传送至一个16位的通用寄存器,典型为SI。
不影响标志位
LDSREG,SRC
LDSSI,[1000H]
指令执行前:
DS=6000H,(61000H)=0600H,(61002H)=2000H
指令执行后:
SI=0600H,DS=2000H
从源操作数所指定的存储器单元中取出4个字节的变量地址指针,
把前两个字节(变量的偏移地址)
传送到目标操作数,
后两个字节(变量的段基址)
传送到ES段寄存器中。
变量的16位地址偏移量必须传送至一个16位的通用寄存器,典型为DI。
。
不影响标志位
LESREG,SRC
LESDI,[BX]
指令执行前:
DS=6000H,BX=0800H,(60800H)=0608H,(60802H)=4000H
指令执行后:
DI=0608H,ES=4000H
标志位操作指令
LAHF将FLAGS的低8位装入AH
SAHF将AH装入FLAGS的低8位
PUSHFPOPF将标志寄存器压栈或从堆栈弹出
加法运算指令(溢出标志位是指对于有符号数的溢出)
普通加法指令ADD
ADDOPRD1,OPRD2OPRD1+OPRD2->OPRD1
带进位的加法指令ADC
OPRD1+OPRD2+CF->OPRD1
ADC指令多用于多字节数相加,
使用前要先将CF清零。
加1指令INC(不影响CF但影响AF\OF\PF\ZF)
INCOPRD操作:
OPRD+1->OPRD常用于在程序中修改地址指针
减法运算指令
普通减法指令SUB
SUBOPRD1,OPRD2OPRD1-OPRD2->OPRD1
考虑借位的减法指令SBB
OPRD1-OPRD2-CF->OPRD1
减1指令DEC
DECOPRDOPRD–1->OPRD
比较指令CMP
CMPOPRD1,OPRD2OPRD1-OPRD2
指令执行的结果不影响目标操作数,仅影响标志位!
用于比较两个数的大小,可作为条件转移指令转移的条件
指令对操作数的要求及对标志位的影响与SUB指令相同
两个无符号数的比较:
CMPAX,BX
若AX>BXCF=0
若AX 两个带符号数的比较CMPAX,BX OF和SF状态相同AX>BX OF和SF状态不同AX 求补指令NEG NEGOPRD操作: 0–OPRD->OPRD 用0减去操作数,相当于对该操作数求补码 当给定操作数为80H或8000H时,执行NEG结果不变但OF置1,其他情况下OF均为0 乘法指令 无符号的乘法指令MUL带符号的乘法指令IMUL 乘法指令采用隐含寻址,隐含的是存放被乘数的累加器AL或AX及存放结果的AX,DX; 如果乘积的高半部分(字节相乘时AH字相乘时为DX)不为0则CF=OF=1否则CF=OF=0 对有符号乘法,若乘积的高半部分是低半部分的符号位的扩展则CF=OF=0否则CF=OF=1 若运算结果的高位全为0或1,表示其为无效数据,OF=CF=0。 MULOPRD不能是立即数 OPRD为字节数AL×OPRD——>AX OPRD为16位数AX×OPRD——>DXAX 除法指令除法指令对六个标志位都没有影响 无符号除法指令DIVOPRD 有符号除法指令IDIVOPRD 若OPRD是字节数执行: AX/OPRD结果: AL=商AH=余数 若OPRD是双字节数执行: DXAX/OPRD结果: AX=商DX=余数 逻辑运算和移位指令 逻辑运算指令对操作数的要求大多与MOV指令相同。 “非”运算指令要求操作数不能是立即数; 除“非”运算指令外,其余都会使标志位OF=CF=0 实现两操作数按位相与的运算ANDBL,[SI] 使目标操作数的某些位不变,某些位清零ANDAL,0FH 在操作数不变的情况下使CF和OF清零ANDAX,AX 实现两操作数相“或”的运算ORAX,[DI] 使某些位不变,某些位置“1”ORCL,0FH 在不改变操作数的情况下使OF=CF=0ORAX,AX NOTOPRD操作数按位取反再送回原地址 指令中的操作数不能是立即数指令的执行对标志位无影响NOTBYTEPTR[BX] XOROPRD1,OPRD2两操作数相“异或”,结果送目标地址 测试: TESTOPRD1,OPRD2 执行“与”运算,但运算的结果不送回目标地址。 常用于测试某些位的状态 移位指令 逻辑左移SHL 算术左移SAL 逻辑右移SHR 算术右移SAR 不带进位位的循环移位 左移ROL 右移ROR 带进位位的循环移位 左移RCL 右移RCR 重复前缀 无条件重复: REP 条件重复 REPE相等重复/REPZ为零重复/REPNE不相等重复/REPNZ不为零重复 串操作 串传送MOVS串比较CMPS串扫描SCAS串装入LODS串送存STOS 源串一般存放在数据段,偏移地址由SI指定。 允许段重设; 目标串必须在附加段,偏移地址由DI指定; 指令自动修改地址指针,修改方向由DF决定。 DF=0增地址方向DF=1减地址方向 数据块长度值由CX指定,可增加自动重复前缀以实现自动修改CX内容。 用串传送指令实现200个字节数据的传送: LEASI,MEM1 LEADI,MEM2 MOVCX,200 CLD REPMOVSB HLT CMPSOPRD1,OPRD2CMPSBCMPSW 串比较指令常与条件重复前缀连用,指令的执行不改变操作数,仅影响标志位。 前缀的操作对标志位不影响 测试200个字节数据是否传送正确: LEASI,MEM1 LEADI,MEM2 MOVCX,200 CLD;DF=0使地址按增量方向修改 REPECMPSB TESTCX,00FFH JZSTOP DECSI MOVAL,[SI] MOVBX,SI STOP: HLT SCASOPRDSCASBSCASW 执行与CMPS指令相似的操作,只是这里的源操作数是AX或AL常用于在指定存储区域中寻找某个关键字。 格式: LODSOPRDLODSBLODSW 对字节: AL<-[DS: SI] 对字: AX<-[DS: SI] STOSOPRDSTOSBSTOSW 对字节: AL->[ES: DI] 对字: AX->[ES: DI] 需要定义附加段,目标操作数必须在附加段 需要设置数据的操作方向、确定DF的状态 源串和目标串指针分别为SI和DI 串长度值必须由CX给出 注意重复前缀的使用方法 传送类指令前加无条件重复前缀 串比较类指令前加条件重复前缀,但前缀不影响ZF状态 转移指令 无条件转移指令JMPOPRD 段内直接转移: 转移的目标地址由指令直接给出JMPLABEL 段内间接转移: 转移的目标地址存放在某个16位寄存器或存储器的某两个单元中 JMPBX若: BX=1200H则: 转移的目标地址=1200H 段内直接转移 转移的目标地址由指令直接给出 JMPFARLabel 段间间接寻址 转移的目标地址由指令中的32位操作数给出 JMPDWORDPTR[BX] 条件转移指令条件转移指令均为段内短转移,即转移范围为: -128------+127 几种条件转移指令的应用 JC/JNC判断CF的状态。 常用于比大小 JZ/JNZ判断ZF的状态。 常用于循环体的结束判断 JO/JNO判断OF的状态。 常用于有符号数溢出的判断 JP/JPE判断PF的状态。 用于判断运算结果低8位中1的个数是否为偶数 JA/JAE/JB/JBE判断CF或CF+ZF的状态。 常用于无符号数的大小比较 循环范围: 以当前IP为中心的-128~+127范围内循环。 循环次数由CX寄存器指定。 循环指令: LOOP*LOOPZ*LOOPNZ 格式: LOOPLABEL 循环条件: CX≠0 操作: DECCXJNZ符号地址 段内调用 被调用程序与调用程序在同一代码段 调用前只需保护断点的偏移地址CALLNEARPROC 执行过程: 将断点的偏移地址压入堆栈,根据过程名找子程序入口 段间调用 子过程与原调用程序不在同一代码段 调用前需保护断点的段基地址和偏移地址 先将断点的CS压栈,再压入IP。 CALLFARPROC 返回指令 从堆栈中弹出断点地址,返回原程序RET RET指令一般位于子程序的最后。 中断指令的执行过程 将FLAGS压入堆栈; 将INT指令的下一条指令的CS、IP压栈; 由n×4得到存放中断向量的地址;低地址IP高地址CS 将中断向量(中断服务程序入口地址)送CS和IP寄存器;转入中断服务程序。 若溢出则中断指令INTO 若OF=1,则启动一个类型为4的中断过程,给出一个出错标志, 如果OF=0,不做任何操作。 INTO指令通常安排在有符号数加减运算指令之后。 中断返回指令IRET 中断服务程序的最后一条指令,负责恢复断点,恢复标志寄存器内容 伪指令与宏汇编 指示性语句——CPU不执行,而由汇编程序执行的语句,不生成目标代码 指令性语句——CPU执行的语句,能够生成目标代码 算术运算+,-,*,/,MOD MOVAL,8AND4MOVAL,8+4-1 取值运算符 TYPE取变量的类型 LENGTH取所定义存储区的长度 SIZE取所定义存储区的字节数 若BUFFER存储区用如下伪指令定义: BUFFERDW200DUP(0) 则: TYPEBUFFER等于2 LENGTHBUFFER等于200 SIZEBUFFER等于400 OFFSET取得其后变量或标号的偏移地址 SEG取得其后变量或标号的段地址 属性运算符用于指定其后存储器操作数的类型 PTRMOVBYTRPTR[BX],12H 数据定义伪指令 DB定义的变量为字节型 DW定义的变量为字类型(双字节) DD定义的变量为双字型(4字节) DQ定义的变量为4字型(8字节) DT定义的变量为10字节型 DATA1DB11H,22H,33H,44H DATA2DW11H,22H,3344H DATA3DD11H*2,22H,33445566H M1DB10DUP(5)10个初值为5的字节单元 DW20DUP(? ) “? ”的作用表示随机值,用于预留存储空间 符号定义伪指令 符号名EQU表达式 操作: 用符号名取代后边的表达式,不可重新定义 CONSTANTEQU100 VAREQU30H+99H 段定义伪指令 DATASEGMENT MEM1DB11H,22H MEM2DB‘Hello! ’ MEM3DW2DUP(? ) DATAENDS 设定段寄存器伪指令 说明所定义逻辑段的性质 ASSUME段寄存器名: 段名[,段寄存器名: 段名,…] 结束伪指令 表示源程序结束 END[标号]实际编程中必有,该处标号须与程序第1条指令前的标号一致。 过程定义伪指令 用于定义一个过程体 过程名PROC[NEAR/FAR] ┇ RET 过程名ENDP DOS中断 DOS中断是包含多个子功能的功能包; 各子功能用功能号区分; 用软中断指令调用,中断类型码固定为21H。 调用格式: MOVAH,功能号 <置相应参数> INT21H 存储器的扩展高地址区分芯片,低地址内部单元 SRAM静态存储器 62648K*8B 地址线A0-A12 数据线D0-D7 输出允许 写允许 DRAM动态存储器2164A64K*1bit采用行地址和列地址来确定一个单元; 行列地址分时传送,用一组地址信号线; 行地址选通信号 列地址选通信号 : 写允许信号 地址总线上先送上行地址,后送上列地址 在RAS和CAS有效期间锁存在锁存器中。 存储容量存储单元个数×每单元的二进制数位数 存取时间实现一次读/写所需要的时间 存取周期连续启动两次独立的存储器操作所需间隔的最小时间 全地址译码 用全部的高位地址信号作为译码信号; 使存储器芯片的每一个单元都占据一个唯一的内存地址 部分地址译码 用部分高位地址信号作为译码信号; 使被选中存储器芯片占有几组不同的地址范围。 两组地址: F0000H——F1FFFH B0000H——B1FFFH 若已有存储芯片的容量为L×K,要构成容量为M×N的存储器,需要的芯片数为: (M/L)×(N/K) 位扩展 每片地址线、控制线并联, 数据线分别引出 (单元数不变,位数增加) 字扩展地址空间的扩展 芯片每个单元中的字长满足, 但单元数不满足。 每个芯片的地址线、数据线、控制线并联。 片选段分别引出 每个芯片必须有不同的地址范围。 基本I/O 按键指示灯 中断 8259A …… Seg7
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 期末 复习