1 / 50

微型计算机原理及应用技术

微型计算机原理及应用技术. 微机原理与汇编语言程序设计. 河北科技师范学院 欧美学院 信息技术系. 微机指令系统. 第 3 章. 3.1 寻址方式 ( 重点 ). 3.2 指令系统 ( 难点 ). 3.2 指令系统. 1. 数据传送指令 6. 字符串操作指令 2. 算术运算指令 7. 处理器控制指令 3. 逻辑运算指令 9. 输入 / 输出指令 4. 移位指令 10. 中断指令 5. 转移指令. 全面而准确地理解每条指令的功能和应用,是编写汇编语言程序的关键。

bozica
Télécharger la présentation

微型计算机原理及应用技术

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 微型计算机原理及应用技术 微机原理与汇编语言程序设计 河北科技师范学院 欧美学院 信息技术系

  2. 微机指令系统 第3章 3.1 寻址方式(重点) 3.2 指令系统(难点)

  3. 3.2指令系统 1.数据传送指令 6.字符串操作指令 2.算术运算指令 7.处理器控制指令 3.逻辑运算指令 9.输入/输出指令 4.移位指令 10.中断指令 5.转移指令

  4. 全面而准确地理解每条指令的功能和应用,是编写汇编语言程序的关键。全面而准确地理解每条指令的功能和应用,是编写汇编语言程序的关键。 • 内容貌似较多,但并不复杂,在理解的基础上去记忆,需要同学们的耐心。

  5. 3.2.1数据传送指令 • 最常使用、最基本、最重要的一种操作 • 把数据从一个位置传送到另一个位置 • 除标志寄存器传送指令外,均不影响标志位 1.通用数据传送指令 MOV,PUSH,POP,XCHG,XLAT 2.地址传送指令 LEA,LDS,LES 3.标志寄存器传送指令 LAHF,SAHF,PUSHF,POPF

  6. 1.通用数据传送指令 (1)数据传送指令 MOV (2)堆栈操作指令 PUSH & POP (3)交换指令与换码指令 XCHG & XLAT

  7. 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]

  8. 1.通用数据传送指令 (1)数据传送指令 MOV 5.段寄存器到寄存器或存储单元,如: MOV AX,DS或 MOV [BX], ES. 6.寄存器或存储单元到除CS外的段寄存器,如: MOV DS, DATA 7.立即数到存储单元,但必须用PTR确定操作数类型(字或字节),如: MOV BYTE PTR[2000H],12H

  9. 1.通用数据传送指令 (1)数据传送指令 MOV 注意 1.不允许在两个存储单元间直接传送数据 2.不允许在两个段寄存器间之间传送数据 3.不允许用立即数直接为段寄存器赋值 4.MOV指令不影响标志位

  10. 1.通用数据传送指令 (2)堆栈操作指令 PUSH & POP 特点:后进先出 栈顶 低地址 栈底 高地址

  11. SP-2 字 SP-1 1.通用数据传送指令 格式:PUSH OPS 功能:将寄存器、段 寄存器或存储器中的 一个字数据压入堆栈。 入栈指令 PUSH 若:AX=2A5CH SP=2000H 执行:PUSH AX 结果如何? 低地址 5CH 2AH 栈底 SP 高地址

  12. SP 1.通用数据传送指令 若:AX=2A5CH SP=2000H 执行:PUSH AX 入栈指令 PUSH 执行后: SP指向栈顶 (1FFEH)=2A5CH 低地址 5CH 2AH 栈底 高地址

  13. SP SP 1.通用数据传送指令 执行:POP AX 执行后: (AX)=053FH 出栈指令 POP 低地址 3FH 05H 栈底 高地址 栈底

  14. 1.通用数据传送指令 (2)堆栈操作指令 PUSH & POP 1.PUSH指令的操作数不能是立即数 2.POP指令的操作数不能是段寄存器 3.PUSH和POP指令都不影响标志位 4.PUSH的压入顺序与POP的弹出顺序正相反

  15. CX DX SP 1.通用数据传送指令 (2)堆栈操作指令 PUSH & POP 4.PUSH的压入顺序与POP的弹出顺序正相反 ABH PUSH CX PUSH DX POP DX POP CX 3FH 05H 10H 栈底

  16. 1.通用数据传送指令 (3)交换指令与换码指令 XCHG & XLAT 交换指令:XCHG 格式:XCHG OPD,OPS 功能:将两个操作数的内容互换 OPD OPS

  17. 1.通用数据传送指令 (3)交换指令与换码指令 XCHG & XLAT 1.可在累加器、通用寄存器或存储器间相互交换, 但两个存储器间不能直接交换,也不允许使用 段寄存器。 2.XCHG指令可以是字节或字操作,不影响标志位 例如:XCHG BX, AX XCHG DX, [2010H]

  18. 1.通用数据传送指令 (3)交换指令与换码指令 XCHG & XLAT 既然不能直接在存储器间交换,如何用XCHG 实现两个内存单元间的内容互换? 分三步: MOV AX,NUM1 XCHG AX,NUM2 MOV NUM1,AX

  19. 1.通用数据传送指令 (3)交换指令与换码指令 XCHG & XLAT 换码指令:XLAT 格式:XLAT 或 XLAT OPS 功能:将一种代码转换成另一种代码 AL BX+AL

  20. 2.地址传送指令 (1)有效地址送寄存器指令 LEA (2)数据段指针送寄存器指令 LDS (3)附加段指针送寄存器指令 LES

  21. 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

  22. 2.地址传送指令 (2)数据段指针送寄存器指令 LDS 格式:LDS OPD,OPS 功能:把源操作数指定的内存中连续4个字节单元中的 低地址中的字送到由指令指定的寄存器中(通常指定SI) ,将双字的高地址中的字送到DS寄存器中。 说明:OPD是一个16位通用寄存器,OPS是存储器地址。 例如: LDS SI,[BX] 执行前:DS=0C00H,BX=0200H, (0C200H)=2A35H,(0C202H)=4000H

  23. 2.地址传送指令 (3)附加段指针送寄存器指令 LES 格式:LES OPD,OPS 功能:把源操作数指定的内存中连续4个字节单元中的 低地址中的字送到由指令指定的寄存器中(通常指定DI) ,将双字的高地址中的字送到ES寄存器中。 说明:OPD是一个16位通用寄存器,OPS是存储器地址。 例如: LES DI,[BX] 执行前:DS=B000H,BX=0020H, (B0020H)=0076H,(B0022H)=1F00H

  24. 3.标志寄存器传送指令 (1)标志寄存器送AH指令 LAHF (2)AH送标志寄存器指令 SAHF (3)标志寄存器入栈指令 PUSHF (4)标志出栈指令 POPF

  25. 3.2.2算术运算指令 • 无符号、有符号二进制数以及十进制数 • 4种标准算术运算指令加、减、乘、除 • 十进制调整指令和操作数符号扩展指令 1. 加、减、乘、除法指令 2. 符号扩展指令 3. BCD码调整指令

  26. 3.2.2算术运算指令 • 加法运算指令 • 减法运算指令 • 乘法运算指令 • 除法运算指令 备注:这些指令都会影响标志位

  27. 1.加法指令 • (1)、不带进位加法指令ADD • (2)、带进位加指令ADC • (3)、加1指令INC

  28. (1)不带进位加指令 ADD • 格式:ADD OPD,OPS • 功能:OPD←OPD + OPS • ADD AX, BX • ADD AX,[BX]

  29. (2)带进位加指令 ADC 格式:ADC OPD,OPS 功能:OPD+OPS+CF → OPD。 (3)加1指令 INC 格式:INC OPD 功能:OPD+1 → OPD。

  30. 关于加法指令的例子 例1:16位单精度加法运算,指令为: ADD BX,0F0F0H 执行前:BX=1122H 则,执行后:BX=? CF=? ZF=? OF=? SF=?

  31. 关于加法指令的例子 例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=?

  32. 2.减法指令 • (1)普通减法指令 SUB • (2)带借位减法指令 SBB • (3)减1指令 DEC • (4)比较指令 CMP • (5)求补指令 NEG

  33. (1)普通减法指令 SUB 格式:SUB OPD,OPS 功能:OPD-OPS → OPD。 (2)带借位减法指令 SBB 格式:SBB OPD,OPS 功能:OPD-OPS-CF → OPD。

  34. (3)减1指令 DEC 格式:DEC OPD 功能:OPD-1 → OPD。 (4)比较指令 CMP 格式:CMP OPD,OPS 功能:OPD-OPS。不保存运算结果,只根据结果设置条件标志位。

  35. 例题 【例】比较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: …

  36. (5)求补指令 NEG 格式:NEG OPR 功能:将OPR按位求反再加1。 例:求补运算。 MOV AX,0FF64H NEG AL ;(AL)=9CH NEG AX ;(AX)=009CH

  37. 3.乘法指令 (1)无符号数乘法指令 MUL 格式:MUL OPS 功能:字节操作 AX←AL*OPS 字操作 DX,AX←AX*OPS (2)有符号数乘法指令 IMUL 格式:IMUL OPS 功能:字节操作 AX←AL*OPS 字操作 DX,AX←AX*OPS

  38. 3.乘法指令 说明 (1)OPS不能为立即数 (2)目的操作数是隐含的 AX或DX,AX (3)指令影响标志位CF和OF (4)根据OPS类型确定用MUL或IMUL

  39. 4.除法指令 (1)无符号数乘法指令 DIV 格式:DIV OPS 功能:实现两个无符号二进制数除法运算。字节相除,被除数放在AX中;字相除,被除数放在DX、AX中,除数在OPS中。 字节操作AL←AX/OPS的商 AH←AX/OPS的余数 字操作AX←(DX,AX)/OPS的商 DX←(DX,AX)/OPS的余数

  40. 4.除法指令 (2)有符号数乘法指令 IDIV 格式:IMUL OPS 功能:与DIV相同,但操作数必须为有符号数。计算的商和余数也为有符号数,且余数的符号和被除数相同。

  41. 5.符号扩展指令 (1)字节转换为字指令 CBW 格式:CBW 功能:把AL中的符号扩展到AH。如果AL最高位为0,AH=00H;如果最高位为1,则AH=FFH。 (2)字转换为双字指令 CWD 格式:CWD 功能:把AX的符号位扩展到DX,原理同CBW。

  42. 综合小例题 例:在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

  43. 3.2.3逻辑运算指令 • 逻辑与指令 AND • 逻辑或指令 OR • 逻辑非指令 NOT • 异或指令 XOR • 测试指令 TEST

  44. (1)逻辑与指令AND 格式:AND OPD,OPS 功能:OPD∧OPS → OPD。 (2)逻辑或指令OR 格式:OR OPD,OPS 功能:OPD∨OPS → OPD。

  45. (3)逻辑非指令NOT 格式:NOT OPD 功能:OPD → OPD。 (4)异或指令XOR 格式:XOR OPD,OPS 功能:OPD∨OPS → OPD。

  46. (5)测试指令TEST 格式:TEST OPD,OPS 功能:OPD ∧OPS。根据逻辑与的结果置标志位SF、ZF、PF,操作结束后OPD和OPS的内容不变。

  47. 逻辑运算指令小例题 若AX=3A8FH, 执行 AND AX,00FFH 后,AX=? 执行 OR AX,35H 后,AX=? 执行 NOT AX 后,AX=? 执行 XOR AX,10FFH 后,AX=? AX依次为:008FH,3ABFH,C570H,2A70H。

  48. 逻辑运算指令小例题 若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

  49. 课后总结: 掌握8086CPU指令系统中9类指令的基本格式 及各自的功能。 熟练掌握指令的使用方法,进行简单的程序 设计。

  50. 课后作业: 掌握本节课所学习的指令的格式、功能和用法。 下次课前请部分同学到黑板上做题。 书上82页,习题三的2-6题。

More Related