1.15k likes | 1.33k Vues
吉林大学远程教育学院. 微机原理及汇编语言. 主讲人: 赵宏伟 教授 总学时: 80 吉林大学计算机科学与技术学院. 第 六 讲. 第 2 章 8088 指令系统. 指令: 控制计算机完成指定操作的命令 指令系统: 所有指令的集合 8088/8086 指令系统是所有 x86 系列 CPU 指令系统的基础, 80286 、 80386 乃至于 Pentium 等新型 CPU 指令是在这个基础上做了一些扩充。 8088 指令系统共包含 92 种基本指令 8088 指令按照功能分为 6 大类: 数据传送类 算术运算类
E N D
吉林大学远程教育学院 微机原理及汇编语言 主讲人: 赵宏伟 教授 总学时: 80 吉林大学计算机科学与技术学院 第 六 讲
第2章8088指令系统 • 指令:控制计算机完成指定操作的命令 • 指令系统:所有指令的集合 • 8088/8086指令系统是所有x86系列CPU指令系统的基础,80286、80386乃至于Pentium等新型CPU指令是在这个基础上做了一些扩充。 • 8088指令系统共包含92种基本指令 • 8088指令按照功能分为6大类: 数据传送类 算术运算类 逻辑运算和移位 串操作 控制转移类 处理器控制
指令的基本构成 • 指令助记符包括操作码和操作数,指令长度一般在1~6个字节之间 • 操作码:表示指令完成什么样的功能 • 操作数:指令的操作对象(操作数可以是:双操作数,即源操作数和目的操作数;单操作数;隐含操作数) • 指令的一般格式: 操作码 [操作数],[操作数];[注释] • 操作数的一般形式: 1.立即数操作数(具有固定数值的操作数,即常数,8位或16位。只能用作源操作数) 2.寄存器操作数(如8个通用寄存器,段寄存器) 3.存储器操作数(可以作源操作数或目的操作数) 4.I/O端口操作数(可以作源操作数或目的操作数)
2.1 8088的寻址方式 • 寻址方式:获得操作数地址的方法 • 寻址方式通常有6种: 1.立即寻址 2.直接寻址 3.寄存器寻址 4.寄存器间接寻址 5.变址寻址 6.基址加变址寻址 • 为了适应各种数据结构,指令中的段内偏移量可以由几个部分组成,称之为有效地址EA。
M M AH AL 操作码 操作码 立即数 码段 码段 低8位 02H 高8位 31H 立即寻址(Immediate Addressing) • 操作数紧跟在操作码后面,与操作数一起存放在一个代码段区域中。可以是8位也可以16位。 • 例如:MOV AX, 3102H
操作码 DS 2000 0 码段 02 20000 31 3102 + 23102 40 30 40 23102 AX 30 23103 直接寻址(Direct Addressing) • 直接寻址时,有效地址(EA )直接包含在指令中,紧跟在操作码之后。 • 例如 • DS=2000H • MOV AX, [3102H]
DS AH AL 执行结果送DS 寄存器寻址(Register Addressing) • 操作数存放在指定的寄存器中,对于16位数据,寄存器有AX、BX、CX、DX、SI、DI、SP、BP • 例如:MOV DS, AX
EA= (BX) (SI) (DI) (BP) 码段 AH AL 数据段 44H 61200H 33H 61201H 执行结果(AX)=3344H 寄存器间接寻址(Register Indirect Addressing) • 寄存器中的内容是操作数的偏移地址,操作数存放在存储器中。(SI、DI、BX、BP) 例如:MOV AX,[SI] DS=6000H SI=1200H
DS: 6000 0 操作码 码段 操作码 08 60000 BX: 1000 DATA: + 0008 61008 低字节 高字节 00 61008 66H 55H 数据段 AH AL AX 变址寻址(Index Addressing) • 操作数放在存储器中,寄存器(SI、DI、BX、BP)内容作为间接地址,加上指令中给出的8位或16位偏移量(相对值),形成操作数的有效地址。 • 段寄存器由间址寄存器决定。 • 例:MOV AX,DATA[BX]
吉林大学远程教育学院 微机原理及汇编语言 主讲人: 赵宏伟 教授 总学时: 80 吉林大学计算机科学与技术学院 第 七 讲
DS 8000 0 操作码 DS : 80000 BX: 1000 SI: + 2000 83000H 码段 40 30 40 83000 AX 数据段 30 83001 基址加变址寻址(1) • 有效地址为:基址寄存器(BX、BP)内容加变址寄存器(SI、DI)内容。 • BX的默认段寄存器DS。BP的默认段寄存器是SS. 例如:MOV AX, [BX][SI]
DS 8000 0 操作码 码段 DS : 80000 BX: 1000 DI: + 2000 DATA: + 0200 83200H DATA 00 02 40 30 40 83200 AX 数据段 30 83201 基址加变址寻址(2) • 有效地址为基址寄存器内容加变址寄存器内容加8位或16位偏移量。默认段寄存器DS或SS • 例如:MOV AX,DATA[BX][DI]
字节1 字节2 字节3、4 字节5、6 7 2 1 0 7 6 5 4 3 2 1 0 7· · · 0 7· · · · ·0 7· · · · · 0 7· · · · · 0 OP code D w MOD REG R/M DISPL DISPH DATAL DATAH 操作码字节 寻址方式字节 位移量 立即数 8086指令格式(1) • 8086/8088指令是由1~6个字节组成。 • 第一字节通常为指令的操作码。它表示该条指令要进行什么样的操作。 • OP code为操作码,表示该指令要完成的操作。 • D=0:第一个操作数是目的操作数, 1:第二个操作数是目的操作数 • W=0:8位操作数, 1:16位操作数 • MOD指明寻址方式: MOD=11 寄存器寻址 • MOD≠11存储器寻址 • 00没有偏移量 01 8位偏移量 1016位偏移量 • REG用编码方式指明操作中所使用的寄存器。 • R/M用编码方式指出存储器有效地址计算方法。 • DISP表示地址偏移量。DATA则指明立即数。
8086指令格式(2) • R/M(寄存器/存储器)编码及有效地址计算方法 例:ADD DISP[BX][DI],DX DISP=2145H 000000 0 1 10 010 001 01000101 00100001 操作码 D W MOD REG R/M 位移量低 位移量高 D=0 源操作数是寄存器操作数 W=1 操作数是16位 操作码是: 01914521H
2.2 8088的标志寄存器 标志寄存器FLAG • 16位,其中有6个状态位、3个控制位 • 6个状态位:CF、PF、AF、ZF、SF、OF • 3个控制位:IF、DF、TF
吉林大学远程教育学院 微机原理及汇编语言 主讲人: 赵宏伟 教授 总学时: 80 吉林大学计算机科学与技术学院 第 八 讲
8088的标志寄存器 (1) 标志寄存器FLAG(状态位) • 进位标志CF,反映算术运算后,最高位(字节操作为D7,字操作为D15)出现进位(或借位)的情况,有则为“1” • 奇偶标志PF,反映操作结果中“1”的个数的情况,若为偶数,PF=1 • 辅助进位标志AF,反映一个8位量的低4位向高4位有无进位(或借位)的情况,有则置“1”
8088的标志寄存器 (2) 标志寄存器FLAG(状态位) • 零标志ZF,反映运算结果是否为零的情况,结果为零,ZF置为“1” • 符号标志SF,反映运算结果的符号情况,若结果为负数,SF为“1”。SF的取值与运算结果最高位(字节操作为D7,字操作为D15)一致 • 溢出标记OF,反映带符号数运算结果是否超过机器所能表示的数值范围的情况,对字节运算为-128~+127,对字运算为-32768~+32767。若超过上述范围则称为“溢出”,OF=1
8088的标志寄存器 (3) 标志寄存器FLAG(控制位) • 方向标志DF,在进行字符串操作时,每执行一条串操作指令,对地址要进行一次调整,由DF决定地址是增还是减。若DF=1,则为减量;若DF=0则为增量 • 中断允许标志IF,表示系统是否允许外部的可屏蔽中断。若IF=1,表示允许中断。IF对非屏蔽中断及内部中断请求不起作用 • 跟踪标志TF,当TF=1时,CPU每执行完一条指令,便自动产生一个内部中断,对程序进行逐条检查,常用于程序的调试
2.3 指令系统 • 六个功能组: ①数据传送 (Data Transfer) ②算术运算 (Arithmetic) ③逻辑运算 (Logic) ④串操作 (String manipulation) ⑤控制传送 (Control Transfer) ⑥处理器控制 (Processor Control)
寄存器、缩写、符号 • 意义 • OPRD • 操作数 • mem • acc • dest • Src • disp • DATA • port • ( ) • 存储器操作数 • 累加器操作数 • 目的操作数 • 源操作数地址 • 8位或16位偏移量 • 8位或16位立即数 • 输入输出接口 • 表示寄存器的内容 • [ ] • 存储单元内容或偏移地址 指令中的符号
吉林大学远程教育学院 微机原理及汇编语言 主讲人: 赵宏伟 教授 总学时: 80 吉林大学计算机科学与技术学院 第 九 讲
数据传送类指令 • 使用最频繁的指令,包括: • 一般数据传送:MOV、PUSH、POP、CBW • 输入输出指令:IN、OUT • 地址传送指令:LEA • 标志传送指令:PUSHF、POPF • 可以实现: • 一次可以传送8位,也可以传送16位 • 传送的位数取决于寄存器长度和立即数长度 • 可以使用各种寻址方式
数据传送类指令-通用数据传送指令(1) 1.传送指令 MOV • 指令格式:MOV dest,src • 功能:将一个操作数从源地址传送到目的地址,而源地址中的操作数不变 • 类型: • ① 通用寄存器之间的传送 MOV AL, BL MOV AX, DX MOV SI, BP MOV BX, DI MOV DL, CH
数据传送类指令-通用数据传送指令(2) • ②寄存器与存储器之间的传送 MOV [BX],AX ;寄存器到存储器 若(DS)=6000H ,(BX)=1200H,(AX)=1234H 执行后(61200H)=34H (61201H)=12H MOV CL,[BP][DI] 将SS段的偏移地址(BP)+(DI)存储单元内容送CL。 如(SS)=8000H,(BP)=1020H, (DI)=0383H,(813A3H)=55H 执行后 (CL)=55H MOV AX,[6000H] 将DS段的6000H和6001H两个单元的内容送AX。 • ③立即数传送至CPU的通用寄存器 MOV AL,5 MOV BX,3078H
吉林大学远程教育学院 微机原理及汇编语言 主讲人: 赵宏伟 教授 总学时: 80 吉林大学计算机科学与技术学院 第 十 讲
执行前DS 81000H • 00H • 8000H 81001H • 20H 执行后DS • 2000H 数据传送类指令-通用数据传送指令(3) • ④立即数到存储器的传送 MOV BYTE PTR[BP+SI],5;5→SS:(BP+SI) MOV WORD PTR[BX],1005H;05H→[DS:(BX)], 10H→[ DS:(BX+1)] MOV WORD PTR [DI] ,2000H ;将立即数2000H存放到以DI的内容为地址指针的相邻两个单元中 • ⑤寄存器与段寄存器之间的传送 MOV DS,[1000H] MOV [BX],ES 若执行前: DS=8000H (81000H)=00H (81001H)=20H ES=4000H BX=1200H 执行以上两条指令之后: DS=2000H ;第一条指令执行完 (21200H)=00H ;第二条指令执行完 (21201H)=40H。
MEM2+0 MEM1→SI,MEM2→DI,200→CX [SI] →AL,AL →[DI] MEM1+0 • C7H • C6H INC SI,INC DI DEC CX MEM2+199 CX=0? • 01H N MEM1+199 • 00H 结束 数据传送类指令-通用数据传送指令(4) • 例:把内存中首地址为MEM1的200个字节送到首地址为MEM2的区域中,编程。 MOV SI,OFFSET MEM1 MOV DI,OFFSET MEM2 MOV CX,200 NEXT:MOV AL,[SI] MOV [DI],AL INC SI INC DI DEC CX JNZ NEXT HLT
SS 低 : : 增长方向 栈顶SP 高 数据传送类指令-通用数据传送指令(5) 2.堆栈操作指令 • 堆栈的概念 堆栈是内存中一个特定的区域,用以存放寄存器和存储器中暂时不用又必须保存的数据 • 段寄存器是SS • 存取原则:以字为单位 • 从高地址向低地址存放 • 只能是寄存器或存储器操作 • 所在段由SS决定 • SP总是指向栈顶。 • 遵循后进先出。
SP-2 SP-1 SP • AH • AL 数据传送类指令-通用数据传送指令(6) • ①入栈指令 PUSH • 指令格式:PUSH Src • 将16位操作数送至由堆栈指针SP所指向的堆栈的顶部,然后修改堆栈指针SP。 • Scr可以是: • 寄存器(数据寄存器、IP、变址寄存器) • 段寄存器 • 两个连续地存储单元 • 例:PUSH AX • 操作过程 AH→[(SP)-1 ];AH入栈 AL→[(SP)-2] ;AL入栈 (SP)-2→(SP)
SP SP+1 SP+2 xxH yyH • BH • BL 数据传送类指令-通用数据传送指令(7) • ②出栈指令 POP • 指令格式:POPdest • 把SP指向的栈顶的一个字送至目标地址, 并修改堆栈指针SP。(不能POP CS) • 例:POP BX (SP)→BL ;栈顶数据送BL (SP+1)→BH ; 下一单元内容送BH SP+2→(SP);堆栈指针加2 • SP总是指向下一个要出栈的存储单元。
9E1FCH DH DL AH AL 90 00 9E200H 00H 90 00 90H FFH AH AL 执行PUSH指令之后 DH DL 38 FF 38H 38 FF 00H 90H FFH 38H 92000H 执行POP指令之后 数据传送类指令-通用数据传送指令(7-1) • 例 MOV AX, 9000H MOV SS, AX MOV SP, 0E200H MOV DX, 38FFH PUSH DX PUSH AX : POP DX POP AX
吉林大学远程教育学院 微机原理及汇编语言 主讲人: 赵宏伟 教授 总学时: 80 吉林大学计算机科学与技术学院 第 十一 讲
数据传送类指令-通用数据传送指令(8) 3.交换指令 • XCHG dest,src • 功能:把一个字或一个字节的目的操作数与源操作数交换。 • 类型: • 说明:不能在存储器与存储器之间进行,交换不能是段寄存器的内容,字长必须相同 • 例:XCHG AX, BX ;AX↔BX XCHG BL, [2000H] XCHG CL,DL ;CL ↔DL XCHG AX,BUFFER ;AL ↔(BUFFER) ;AH ↔(BUFFER+1)
数据传送类指令-累加器专用指令(1) 1. 输入指令 IN • 直接寻址I/O 指令和寄存器间接寻址I/O 指令 • 直接寻址指令包含了一个8位的I/O地址,允许寻址256个端口。 • 间接寻址指令由DX指出,包含了一个16位的I/O地址,允许寻址65536个端口。 • 直接寻址端口地址00H~FFH • 间接寻址端口地址0000H~FFFFH • IN AL,n ;[n] →AL,n是8位数据端口地址 • IN AX,n ;[n+1] ,[n] →AX • IN AL,DX ;[(DX)] →AL,(DX)是8位数据端口地址 • IN AX,DX ;[(DX)+1] ,[(DX)] →AX
数据传送类指令-累加器专用指令(2) 2. 输出指令 OUT • OUT n ,AL ;AL→[n] • OUT n ,AX ;AX→[n+1] ,[n] • OUT DX ,AL ;AL→[(DX)] • OUT DX ,AX ;AX→[(DX)+1] ,[(DX)]
数据传送类指令-累加器专用指令(3) 3. XLAT (查表转换) • 格式:XLAT 转换表 • 功能:从转换表中查找出一个字节的内容,取代AL内容。隐含寻址,有效地址EA=(BX)+(AL) 即将EA为偏移地址的存储单元单字节内容 →AL • 过程:转换表最长256字节, BX←表始址,AL←表内位移 • 例:有0-9的ASCII码表,首地址TABLE,要求将2转换成对应的ASCII码。 MOV BX, OFFSET TABLE MOV AL, 02H XLAT TABLE TABLE+0 TABLE+1 : : TABLE+8
数据传送类指令-地址目标传送指令(1) 1. LEA(装入有效地址) • 格式:LEA 寄存器,存储器 • 功能:把存储器操作数所在的16位偏移量传送到16位长的通用寄存器中。 • 例:LEA BX,MEM 结果:BX=2000H LEA BX,BUFFER ;将16位偏移地址→寄存器 MOV AL,[BX] ;存储单元[BX]内容→AL MOV AH,[BX+1] ;存储单元[BX+1]内容→AH,
数据传送类指令-地址目标传送指令(2) 2. LDS(装入数据段指针) • 格式:LDS 寄存器16,存储器32 • 功能:将源操作数的双字指针(段基址:偏移量)低字送目标寄存器,高字送DS。 16位寄存器操作数可为BX、BP、SI、DI 中的一个。32位存储器操作数,给出内存连续4个单元的首地址: 低地址单元相邻两个字节是偏移量→寄存器 高地址单元相邻两个字节是段基址→DS • 例:LDS SI,ADDR
数据传送类指令-地址目标传送指令(3) 3. LES(装入附加段指针) • 格式:LES 寄存器,存储器 • 功能:将源操作数的双字指针(段基址:偏移量)低字送目标寄存器,高字送ES。 • 例:LES DI,ADDR
AH→ FLAG→ SF ZF AF PF CF 数据传送类指令-状态标志传送指令 1. LAHF(装入AH) • 格式:LAHF • 功能:把FLAG低8位送入AH,标志本身不受影响. 2. SAHF(设置标志) • 格式:SAHF • 功能:AH→FLAG低8位 3. PUSHF(标志入栈) • 格式:PUSHF • 功能:①SP-2→SP ②FLAG→(SP) 4. POPF(标志出栈) • 格式:POPF • 功能:①(SP)→FLAG ②SP+2→SP ③ 原FLAG内容被破坏
算术运算类指令 • 8088提供了加减乘除4组基本算术运算指令。 • 可以实现字、字节、无符号数和有符号数运算。 • 可以: • 单操作数,不能是立即数, • 双操作数,立即数只能作源操作数。 • 隐含操作数 • 无符号组合BCD适用加、减十进制运算。 • 无符号未组合BCD适用加、减、乘、除十进制运算。
算术运算类指令–加法指令(1) 1.ADD 不带进位加法指令 • 格式:ADD OPRD1,OPRD2 • 功能:OPRD1+ OPRD2→ OPRD1,完成两个字节或字操作数的相加,并将结果送目的操作数。 • OPRD1和OPRD2均可以是8位或16位寄存器或存储器操作数 • 源操作数可以是立即数 • 可以是无符号数或有符号数 • 但不能同时是存储器数 • 不能对段寄存器进行运算 • ADD AL,30H • ADD AX,SI • ADD BX,3FEH • ADD DX,DATA[BX+SI] • ;基址间址变址寻址 • ADD DATA [SI],100 • ADD DATA [SI],Al ; • ;Al+[DATA+[SI]] → [DATA+[SI]] • 例: • MOV AL,7EH ;AL←7EH • ADD AL,5BH ;AL←7EH+5BH • 最后两条执行后AL=D9H,7FH<D9H<FFH, • 各寄存器的状态: • AF=1,CF=0,OF=1,PF=0,SF=1,ZF=0 • CF=0,无进位 • OF=1,若有符号数相加则产生溢出。
算术运算类指令–加法指令(2) 2.ADC 带进位加法指令 • 格式:ADC OPRD1,OPRD2 • 功能:PRD1+OPRD2+CF→OPRD1,能够完成两个源操作数及进位位CF的相加,结果送目的操作数。 • 例如:求两个4字节无符号数0107A379H+10067E4FH=? 程序如下: MOV DX,0107H ;高16位→DX MOV AX,0A379H ;低16位→AX MOV BX,1006H ;第二个数高16位→BX MOV CX,7E4FH ;第二个数低16位→CX CLC ;清进位标志 ADD AX,CX ;AX+CX→AX(低位) ADC DX,BX ;DX+BX+CF→DX(高位) 结果在DX和AX寄存器=110E21C8H
算术运算类指令–加法指令(3) 3.INC 加1指令(Increment) • 格式:INC OPRD • 功能:OPRD+1→OPRD (B/W ),不影响CF • 例如: INC AL ;AL+1→AL INC BX ;BX+1→BX INC WORD PTR 4[BX] ;((BX)+4)+1→ ((BX)+4) • WORD PTR就是指明要对存储单元中的一个16位数加1,而不是8位数。 • 操作数是寄存器和存储器操作数 • 可以是8位也可以是16位 • 不能是段寄存器和立即数
吉林大学远程教育学院 微机原理及汇编语言 主讲人: 赵宏伟 教授 总学时: 80 吉林大学计算机科学与技术学院 第 十二 讲
算术运算类指令–加法指令(4) 4.AAA 指令(未组合BCD加法调整) • 格式:AAA • 功能:对AL中未组合BCD调整。 • 调整过程: IF (AL&0FH)>9 OR AF=1 THEN AL←AL+6 AH←AH+1 AF←1 CF←AF AL←AL&0FH • 影响AF和CF,但对OF、PF、SF、ZF未定义。 例如: MOV AL, 09H MOV BL, 04H ADD AL, BL AAA • AAA指令调整如下: • AL=09BCD 00001001 • BL=04BCD+)00000100 • ADD AL,BL 00001101 ;低4位>9,加06H调整 • AAA+)00000110 • 00010011 ;AF=1,AL∧OFH→AL • ;AH=AH+1,CF=1
算术运算类指令–加法指令(5) 5.DAA 指令(组合BCD加法调整)(Decimal adjust addition) • 格式:DAA • 功能:对AL中组合BCD调整。 • 调整过程: (1) IF (AL&0FH)>9 OR AF=1 THEN AL←AL+6 AF←1 (2) IF AL>9FH OR CF=1 THEN AL←AL+60H CF←1 • 影响AF、CF、PF、SF和ZF,但对OF未定义。 • 例如: • MOV AL,48H • ADD AL,27H • ;AL=6FH,不正确,须调整 • DAA • ;(48)BCD+(27)BCD=(75)BCD • DAA指令调整如下: • AL=48BCD01001000 • BL=27BCD+)00100111 • ADD AL,27H 01101111 ;AL中值>9,须加6调整。 • DAA+)00000110 • 01110101
算术运算类指令–减法指令(1) 1.SUB 不带借位(CF)的减法 • 格式:SUB OPRD1,OPRD2 • 操作数为累加器,寄存器或立即数(B/W) 。 • 例如: SUB CX ,BX;寄存器之间 SUB DX,TOTAL[SI];寄存器与存储器 SUB [BP+2],CL;存储器与寄存器 SUB AL,02;累加器和立即数 SUB [BP]BALANCE,100;存储器和立即数