500 likes | 741 Views
微型计算机原理及应用技术. 微机原理与汇编语言程序设计. 河北科技师范学院 欧美学院 信息技术系. 微机指令系统. 第 3 章. 3.1 寻址方式 ( 重点 ). 3.2 指令系统 ( 难点 ). 3.2 指令系统. 1. 数据传送指令 6. 字符串操作指令 2. 算术运算指令 7. 处理器控制指令 3. 逻辑运算指令 9. 输入 / 输出指令 4. 移位指令 10. 中断指令 5. 转移指令. 全面而准确地理解每条指令的功能和应用,是编写汇编语言程序的关键。
E N D
微型计算机原理及应用技术 微机原理与汇编语言程序设计 河北科技师范学院 欧美学院 信息技术系
微机指令系统 第3章 3.1 寻址方式(重点) 3.2 指令系统(难点)
3.2指令系统 1.数据传送指令 6.字符串操作指令 2.算术运算指令 7.处理器控制指令 3.逻辑运算指令 9.输入/输出指令 4.移位指令 10.中断指令 5.转移指令
全面而准确地理解每条指令的功能和应用,是编写汇编语言程序的关键。全面而准确地理解每条指令的功能和应用,是编写汇编语言程序的关键。 • 内容貌似较多,但并不复杂,在理解的基础上去记忆,需要同学们的耐心。
3.2.1数据传送指令 • 最常使用、最基本、最重要的一种操作 • 把数据从一个位置传送到另一个位置 • 除标志寄存器传送指令外,均不影响标志位 1.通用数据传送指令 MOV,PUSH,POP,XCHG,XLAT 2.地址传送指令 LEA,LDS,LES 3.标志寄存器传送指令 LAHF,SAHF,PUSHF,POPF
1.通用数据传送指令 (1)数据传送指令 MOV (2)堆栈操作指令 PUSH & POP (3)交换指令与换码指令 XCHG & XLAT
1.通用数据传送指令 (1)数据传送指令 MOV 格式:MOV OPD, OPS 功能:将源操作数送至目的地址中,OPS OPD 7种形式: 1.立即数到寄存器,如:MOV AX,03H 2.寄存器到寄存器,如:MOV AX,BX 3.寄存器到存储单元,如:MOV TABLE,AX 4.存储单元到寄存器,如:MOV AX,Y[BP+DI]
1.通用数据传送指令 (1)数据传送指令 MOV 5.段寄存器到寄存器或存储单元,如: MOV AX,DS或 MOV [BX], ES. 6.寄存器或存储单元到除CS外的段寄存器,如: MOV DS, DATA 7.立即数到存储单元,但必须用PTR确定操作数类型(字或字节),如: MOV BYTE PTR[2000H],12H
1.通用数据传送指令 (1)数据传送指令 MOV 注意 1.不允许在两个存储单元间直接传送数据 2.不允许在两个段寄存器间之间传送数据 3.不允许用立即数直接为段寄存器赋值 4.MOV指令不影响标志位
1.通用数据传送指令 (2)堆栈操作指令 PUSH & POP 特点:后进先出 栈顶 低地址 栈底 高地址
SP-2 字 SP-1 1.通用数据传送指令 格式:PUSH OPS 功能:将寄存器、段 寄存器或存储器中的 一个字数据压入堆栈。 入栈指令 PUSH 若:AX=2A5CH SP=2000H 执行:PUSH AX 结果如何? 低地址 5CH 2AH 栈底 SP 高地址
SP 1.通用数据传送指令 若:AX=2A5CH SP=2000H 执行:PUSH AX 入栈指令 PUSH 执行后: SP指向栈顶 (1FFEH)=2A5CH 低地址 5CH 2AH 栈底 高地址
SP SP 1.通用数据传送指令 执行:POP AX 执行后: (AX)=053FH 出栈指令 POP 低地址 3FH 05H 栈底 高地址 栈底
1.通用数据传送指令 (2)堆栈操作指令 PUSH & POP 1.PUSH指令的操作数不能是立即数 2.POP指令的操作数不能是段寄存器 3.PUSH和POP指令都不影响标志位 4.PUSH的压入顺序与POP的弹出顺序正相反
CX DX SP 1.通用数据传送指令 (2)堆栈操作指令 PUSH & POP 4.PUSH的压入顺序与POP的弹出顺序正相反 ABH PUSH CX PUSH DX POP DX POP CX 3FH 05H 10H 栈底
1.通用数据传送指令 (3)交换指令与换码指令 XCHG & XLAT 交换指令:XCHG 格式:XCHG OPD,OPS 功能:将两个操作数的内容互换 OPD OPS
1.通用数据传送指令 (3)交换指令与换码指令 XCHG & XLAT 1.可在累加器、通用寄存器或存储器间相互交换, 但两个存储器间不能直接交换,也不允许使用 段寄存器。 2.XCHG指令可以是字节或字操作,不影响标志位 例如:XCHG BX, AX XCHG DX, [2010H]
1.通用数据传送指令 (3)交换指令与换码指令 XCHG & XLAT 既然不能直接在存储器间交换,如何用XCHG 实现两个内存单元间的内容互换? 分三步: MOV AX,NUM1 XCHG AX,NUM2 MOV NUM1,AX
1.通用数据传送指令 (3)交换指令与换码指令 XCHG & XLAT 换码指令:XLAT 格式:XLAT 或 XLAT OPS 功能:将一种代码转换成另一种代码 AL BX+AL
2.地址传送指令 (1)有效地址送寄存器指令 LEA (2)数据段指针送寄存器指令 LDS (3)附加段指针送寄存器指令 LES
2.地址传送指令 (1)有效地址送寄存器指令 LEA 格式:LEA OPD,OPS 功能:把源操作数的地址送到指定的寄存器中。 例如:LEA AX,TABLE LEA CX,[BX+DI] LEA DX,NUM[SI+BX] OPD可以为任一个16位通用寄存器,OPS可以是变量 名、标号或地址表达式。 LEA指令取的是变量的偏移地址,而不是变量的值。 区分LEA DX,VALUE与MOV AX,VALUE
2.地址传送指令 (2)数据段指针送寄存器指令 LDS 格式:LDS OPD,OPS 功能:把源操作数指定的内存中连续4个字节单元中的 低地址中的字送到由指令指定的寄存器中(通常指定SI) ,将双字的高地址中的字送到DS寄存器中。 说明:OPD是一个16位通用寄存器,OPS是存储器地址。 例如: LDS SI,[BX] 执行前:DS=0C00H,BX=0200H, (0C200H)=2A35H,(0C202H)=4000H
2.地址传送指令 (3)附加段指针送寄存器指令 LES 格式:LES OPD,OPS 功能:把源操作数指定的内存中连续4个字节单元中的 低地址中的字送到由指令指定的寄存器中(通常指定DI) ,将双字的高地址中的字送到ES寄存器中。 说明:OPD是一个16位通用寄存器,OPS是存储器地址。 例如: LES DI,[BX] 执行前:DS=B000H,BX=0020H, (B0020H)=0076H,(B0022H)=1F00H
3.标志寄存器传送指令 (1)标志寄存器送AH指令 LAHF (2)AH送标志寄存器指令 SAHF (3)标志寄存器入栈指令 PUSHF (4)标志出栈指令 POPF
3.2.2算术运算指令 • 无符号、有符号二进制数以及十进制数 • 4种标准算术运算指令加、减、乘、除 • 十进制调整指令和操作数符号扩展指令 1. 加、减、乘、除法指令 2. 符号扩展指令 3. BCD码调整指令
3.2.2算术运算指令 • 加法运算指令 • 减法运算指令 • 乘法运算指令 • 除法运算指令 备注:这些指令都会影响标志位
1.加法指令 • (1)、不带进位加法指令ADD • (2)、带进位加指令ADC • (3)、加1指令INC
(1)不带进位加指令 ADD • 格式:ADD OPD,OPS • 功能:OPD←OPD + OPS • ADD AX, BX • ADD AX,[BX]
(2)带进位加指令 ADC 格式:ADC OPD,OPS 功能:OPD+OPS+CF → OPD。 (3)加1指令 INC 格式:INC OPD 功能:OPD+1 → OPD。
关于加法指令的例子 例1:16位单精度加法运算,指令为: ADD BX,0F0F0H 执行前:BX=1122H 则,执行后:BX=? CF=? ZF=? OF=? SF=?
关于加法指令的例子 例2:32位双精度加法运算,其中: OPD=(DX,AX) , OPS=(CX,BX) 执行前:DX=0067H,AX=F000H CX=0001H,BX=2345H 指令序列为:ADD AX,BX ADC DX,CX 执行结果如何? CF=? ZF=? OF=? SF=?
2.减法指令 • (1)普通减法指令 SUB • (2)带借位减法指令 SBB • (3)减1指令 DEC • (4)比较指令 CMP • (5)求补指令 NEG
(1)普通减法指令 SUB 格式:SUB OPD,OPS 功能:OPD-OPS → OPD。 (2)带借位减法指令 SBB 格式:SBB OPD,OPS 功能:OPD-OPS-CF → OPD。
(3)减1指令 DEC 格式:DEC OPD 功能:OPD-1 → OPD。 (4)比较指令 CMP 格式:CMP OPD,OPS 功能:OPD-OPS。不保存运算结果,只根据结果设置条件标志位。
例题 【例】比较AL的内容与50的大小。 CMP AL,50 ;(AL)-50 JB BELOW ;(AL)<50, 转到BELOW处执行 SUB AL,50 ;(AL)>=50,(AL)-50→AL INC AH ;(AH)+1→AH BELOW: …
(5)求补指令 NEG 格式:NEG OPR 功能:将OPR按位求反再加1。 例:求补运算。 MOV AX,0FF64H NEG AL ;(AL)=9CH NEG AX ;(AX)=009CH
3.乘法指令 (1)无符号数乘法指令 MUL 格式:MUL OPS 功能:字节操作 AX←AL*OPS 字操作 DX,AX←AX*OPS (2)有符号数乘法指令 IMUL 格式:IMUL OPS 功能:字节操作 AX←AL*OPS 字操作 DX,AX←AX*OPS
3.乘法指令 说明 (1)OPS不能为立即数 (2)目的操作数是隐含的 AX或DX,AX (3)指令影响标志位CF和OF (4)根据OPS类型确定用MUL或IMUL
4.除法指令 (1)无符号数乘法指令 DIV 格式:DIV OPS 功能:实现两个无符号二进制数除法运算。字节相除,被除数放在AX中;字相除,被除数放在DX、AX中,除数在OPS中。 字节操作AL←AX/OPS的商 AH←AX/OPS的余数 字操作AX←(DX,AX)/OPS的商 DX←(DX,AX)/OPS的余数
4.除法指令 (2)有符号数乘法指令 IDIV 格式:IMUL OPS 功能:与DIV相同,但操作数必须为有符号数。计算的商和余数也为有符号数,且余数的符号和被除数相同。
5.符号扩展指令 (1)字节转换为字指令 CBW 格式:CBW 功能:把AL中的符号扩展到AH。如果AL最高位为0,AH=00H;如果最高位为1,则AH=FFH。 (2)字转换为双字指令 CWD 格式:CWD 功能:把AX的符号位扩展到DX,原理同CBW。
综合小例题 例:在A,B,C这3个字型变量中各存有16位有符号数a,b,c。用程序实现(a*b+c)/a的运算,结果的商存入AX,余数存入DX。 MOV AX,A MOV AX,C IDIV A IMUL B CWD ADD BX,AX MOV BX,AX ADC CX,DX MOV CX,DX
3.2.3逻辑运算指令 • 逻辑与指令 AND • 逻辑或指令 OR • 逻辑非指令 NOT • 异或指令 XOR • 测试指令 TEST
(1)逻辑与指令AND 格式:AND OPD,OPS 功能:OPD∧OPS → OPD。 (2)逻辑或指令OR 格式:OR OPD,OPS 功能:OPD∨OPS → OPD。
(3)逻辑非指令NOT 格式:NOT OPD 功能:OPD → OPD。 (4)异或指令XOR 格式:XOR OPD,OPS 功能:OPD∨OPS → OPD。
(5)测试指令TEST 格式:TEST OPD,OPS 功能:OPD ∧OPS。根据逻辑与的结果置标志位SF、ZF、PF,操作结束后OPD和OPS的内容不变。
逻辑运算指令小例题 若AX=3A8FH, 执行 AND AX,00FFH 后,AX=? 执行 OR AX,35H 后,AX=? 执行 NOT AX 后,AX=? 执行 XOR AX,10FFH 后,AX=? AX依次为:008FH,3ABFH,C570H,2A70H。
逻辑运算指令小例题 若AX=1234H, 1.请将AX的第7位置1. 2.请将AX的第4、5位清0. 3.将AH的各位取反。 4.判断一下AH的第3位是否为0. 1.OR AX,0080H 2. AND AX,0FFCFH 3.NOT AH或XOR AH,0FFH 4.TEST AH,08H JZ NEXT
课后总结: 掌握8086CPU指令系统中9类指令的基本格式 及各自的功能。 熟练掌握指令的使用方法,进行简单的程序 设计。
课后作业: 掌握本节课所学习的指令的格式、功能和用法。 下次课前请部分同学到黑板上做题。 书上82页,习题三的2-6题。