1 / 37

第四讲 8086/8088 的指令系统

第四讲 8086/8088 的指令系统. 复习 7 种寻址方式 1. 立即数寻址 MOV AX,09A0H 2. 寄存器寻址 MOV AX,BX 3. 直接寻址 MOV AX,(09A0H) 4. 寄存器间接寻址 MOV AX,[BX] 5. 相对的寄存器间接寻址 MOV AX,[BX+55H] 6. 基址加变址寻址 MOV [BX+SI] , AX 7. 相对的基址加变址寻址 MOV 55H[BX+SI] , AX. 第一部分 指令系统概述 8086/8088 的指令系统中共有 92 种基本指令。

dacia
Download Presentation

第四讲 8086/8088 的指令系统

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. 第四讲8086/8088的指令系统 复习7种寻址方式 1.立即数寻址 MOV AX,09A0H 2.寄存器寻址 MOV AX,BX 3.直接寻址 MOV AX,(09A0H) 4.寄存器间接寻址 MOV AX,[BX] 5.相对的寄存器间接寻址 MOV AX,[BX+55H] 6.基址加变址寻址 MOV [BX+SI] , AX 7.相对的基址加变址寻址 MOV 55H[BX+SI] , AX

  2. 第一部分 指令系统概述 8086/8088的指令系统中共有92种基本指令。 可以分成6个功能组: 1. 数据传送(Data transfer) 2. 算术运算(Arithmetic) 3. 逻辑运算和移位指令(Logic& Shift) 4. 串操作(String manipulation) 5. 控制转移(Control Transfer) 6. 处理器控制(Processor Control)

  3. 介绍指令系统使用的符号: 八位寄存器: AH,AL,BH,BH,BL,CH,CL,DH,DL 十六位通用寄存器: AX,BX,CX,DX,SP,BP,SI,DI 堆栈指针 SP 指令指针 IP(或PC) 标志位 Flags 目的和源变址寄存器 DI, SI 段寄存器 CS, DS, ES, SS

  4. src , dest 源,目的操作数(下列寻址方式都可以用) [BX+SI+n],[BX+DI+n],[BP+SI+n],[BP+DI+n] [SI+n], [DI+n], [BP+n], [BX+n] [N], r [ ] 存储器单元的内容(正常在数据段) ES:[ ] 附加存储器段的内容 OPRD 操作数 Seg 段寄存器(CS,DS,ES,SS) i m立即数 (n 8位, nn 16位, nnnn 32位 )

  5. 8086/8088指令助记符表(自学) 自学

  6. 自学

  7. 第二部分 8086/8088指令系统 一、 数据传送指令(Data transfer) (一)通用传送指令(General Purpose Transfer) (二)输入输出指令(Input and Output) (三)目的地址传送指令(Address-object transfer) (四)标志传送指令(Flag register transfer)

  8. (一)通用传送指令(General Purpose Transfer) 8088提供方便灵活的通用的传送操作,适用于大多数操作数。 通用传送指令(除了XCHG以外)是唯一允许以段寄存器为操作数指令。 通用传送指令包括: 1、MOV (Movement) 2、PUSH (Push word onto stack) POP (Pop word off stack) 3、XCHG (Exchange) 4、XLAT (Translate)

  9. 1. MOV dest, src ; (dest)  (src) • 目的 源 目的  源 • 功能: • 把一个字节(B)或一个字(W)操作数由源传送至目的。 • 实现: 寄存器  寄存器/存储器之间; • 立即数寄存器/存储器 • 寄存器/存储器段寄存器之间的数据传送。

  10. 具体说,通用数据传送指令能实现: ① CPU内部寄存器之间的数据的任意传送 (除了码段寄存器CS和指令指针IP以外)。 段寄存器之间不能传送。 例: MOV DL,CH ; 8位寄存器 8位寄存器 MOV AX,DX ; 16位寄存器 16位寄存器 MOV SI, BP MOV DS,BX ;通用寄存器 段寄存器 MOV AX, CS;段寄存器 通用寄存器

  11. 立即数传送至CPU内部通用寄存器组 • (AX、BX、CX、DX、BP、SP、SI、DI)。 • 用于给寄存器赋初值。 • 不能直接给段寄存器赋值 • 例: • MOV CL,04H ;立即数8位寄存器 • MOV AX,03FFH ;立即数16位寄存器 • PTR :属性定义符号,符号后面的变量(或地址单元)有符号前面的属性 • MOV WORD PTR [ SI] ,057BH ;立即数存储器 • MOV BYTE PTR MEM, 5 ;立即数存储器

  12. CPU内部寄存器(除CS和IP外) • 与存储器(所有寻址方式)之间数据传送。 • 可以实现一字节或一个字的传送。 • 存储单元之间不能直接传送 • 例: • MOV MEM , AX ; 累加器存储器,直接寻址 • MOV MEM ,DS ;段寄存器存储器,直接寻址 • MOV DISP[BX] ,CX ;寄存器存储器,变址寻址 • MOV AX , DISP [SI];存储器累加器,变址寻址 • MOV DS , MEM ;存储器段寄存器,直接寻址 • MOV CX , DISP [BX] [SI] ;存储器累加器,相对基址加变址

  13.  注意: • (1)不能用一条MOV指令实现以下传送。 • 存储单元之间的传送 MOV MEM2 , MEM1 错。 • MOV AX , MEM1 • MOV MEM2 , AX 对。 • 立即数送段寄存器 例 : MOV DS,2000H 错。 MOV AX, 2000 H MOV DS , AX 对。

  14. 段寄存器之间的传送 MOV ES , DS ; 错 MOV AX , DS MOV ES , AX ; 对 。 •  注意CS和IP的使用 CS和IP不能作为目标操作数,CS可以作为源操作数。 例: MOV CS,AX ; 错 • MOV AX,CS ;对 。 • MOV IP, AX ;错 • MOV AX, IP ;错。

  15. 注意操作数的范围 • 对字节操作指令 0 ~ FFH 0 ~ 255 • 对字操作指令 0 ~ FFFFH 0 ~ 65535 • MOV AL , 260 • MOV AX ,70000 • MOV AL, 1FFH • MOV AL, 2ABCDH

  16. 注意如下指令: • ① 不能两个同为存储器操作数 • MOV [ DI ] , [ SI ] • ② 目的操作数不能是立即数 • ADD 3 , AL • ③两个操作数的类型应相同 • SUB AX , BL • 若 value 定义为字类型存储器变量: • MOV CL, value [ BX ]

  17. (后面跟立即数时)内存操作数的属性应明确。(后面跟立即数时)内存操作数的属性应明确。 • MOV [ BX ] ,0 • MOV byte ptr [ BX ] , 0 • MOV word ptr [ BX ] , 0 • MOV [ BX ] , AL • MOV [ BX ] , AX

  18. A、B、C、D、E、F开头的十六进制数前面加0, • 与H结尾的标识符区别。 • 如 寄存器名: AH、BH、CH、 DH • 变量名 : abcdH 等 • 例 mov AL, 0AH • mov AL, AH • mov BX, 0abcdH

  19. CS 和 IP的值只在控制转移指令中修改。 • 对非控制转移指令,取完指令后IP值自动+1 ,指向下条指令。 • 段寄存器CS的值,只在MOV、PUSH中可作操作数, • 且这两条指令执行结果不改变CS值。 • MOV AX, CS • PUSH CS • IP、FR两个寄存器不能作为操作数在指令中出现。 • mov IP , 1234H • mov FR , 0F0FH • FR状态寄存器的值由指令执行后确定, • 不同的指令对各标志的影响不同。

  20. (2)段地址的默认 BX、SI、DI间址默认段地址为DS, BP间址默认段地址SS。 (3) 凡是遇到给SS赋值指令,系统自动禁止外部中断,执行本条指令和下条指令,恢复对SS寄存器赋值前的中断开放情况。 这样做为了允许程序员连续用两条指令分别对SS和SP寄存器赋值,同时又防止堆栈空间变动过程出现中断。 *在修改SS和SP的指令之间不要插入其他指令。 (4) 所有通用传送指令不影响标志位 (除SAHF、POPF以外)。

  21. 2. PUSH (Push word onto stack) • POP (Pop word off stack) • 这是两条堆栈操作指令。 • (1) 先介绍一下什么是堆栈,为什么需要堆栈 • 堆栈——按照先进后出原则组织的一段内存区域, • 特点: • 下推式的(规定堆栈设置在堆栈段内)改变SP的内容, • 随着推入堆栈内容增加,SP的值减少。 • 先进后出工作原则(Last In First Out 简称LIFO) • 堆栈在内存中的情况: • (10月20日课讲到此)

  22. 堆栈在内存中的情况: • 例: • 设: SS=2000H , SP=40H,BX=2340H • 运行PUSH BX后,SP=SP-2 • 堆栈在内存中的情况如右图所示: 堆栈在内存中的情况

  23. 堆栈用途: • 存放CPU寄存器或存储器中暂时不使用的数据, • 使用数据时将其弹出; • 调用子程序, 响应中断时都要用到堆栈。 • 调用子程序(或过程)或发生中断时要保护断点的地址, • 子程序或中断返回时恢复断点。 • 注意:SP——堆栈指针,始终指向栈顶。 • SP初值用MOV SP,i m来设定。

  24. 3、交换指令(Exchange) • 格式:XCHG dest , src ;(dest) (src) • 执行操作: • 把一个字节或一个字的源操作数与目的操作数相交换。 • 可以 实现: 寄存器之间 • 寄存器和存储器之间 • 注意: • 存储器之间不能交换,两个操作数中必须有一个在寄存器; • 段寄存器不能作为一个操作数; • 允许字或字节操作,不影响标志位。

  25. 应用举例: XCHG BL,DL XCHG AX,SI XCHG COUNT[DI], AX XCHG [BX],[DI] (错) XCHG DS, AX (错)

  26. XLAT(Translate)换码指令:该指令不影响标志位。XLAT(Translate)换码指令:该指令不影响标志位。 • 格式: XLAT str_table ;(AL)←(BX +AL) • 或 XLAT • str_table——表格符号地址(首地址), • 只是为了提高可读性而设置,汇编时仍用BX。

  27. XLAT指令使用方法: • 先建立一个字节表格; • 表格首偏移地址存入BX; • 需要转换代码的序号(相对与表格首地址位移量)存入AL; (表中第一个元素的序号为0) • 执行XLAT指令后,表中指定序号的元素存于AL中。 • (AL)为转换的代码。

  28. XLAT指令应用: 若把字符的扫描码转换成ASCII码; 或数字0~9转换成7段数码所需要的相应代码(字形码)等就要用XLAT指令。 例:内存的数据段中有一张十六进制数字的ASCII码表。 首地址为:Hex_table ,欲查出表中第10个元素(‘A’)

  29. 30H '0' Hex_table 31H '1' Hex_table+1 '2' 32H Hex_table+2 ... '9' 39H Hex_table+0AH 41H 'A' Hex_table+0BH 42H 'B' ... Hex_table+0FH 46H 'F' ... 执行指令序列: MOV BX,OFFSET Hex_table MOV AL,0AH XLAT Hex_table 假设: (DS)=F000H, Hex_table=0040H (AL)=0AH 执行XLAT以后: (AL)=41H=(F004AH), 即“A”的ASCII码。 16进制数的ASCII码表

  30. (二)输入输出指令(Input and Output) 输入输出指令共两条: 1、IN (Input byte or word) 2 、OUT (Output byte or word) 输入指令用于CPU从外设端口接受数据, 输出指令用于CPU向外设端口发送数据。 无论接受还是发送数据,必须通过累加器AX(字)或AL(字节), 又称累加器专用传送指令 。 输入、输出指令不影响标志位。

  31. 每个外设要占几个端口:数据口,状态口和控制口。每个外设要占几个端口:数据口,状态口和控制口。

  32. 信息交换要通过端口, 在IBMPC机里,可以配接许多外部设备, 每个外设与CPU之间交换数据,状态信息和控制命令, 每一种信息交换都要通过一个端口来进行。 端口数:外部设备最多有65536个I/O端口。 A0~A15译码形成。 端口号:端口号(即外设端口地址)为0000H~FFFFH。 PC机仅使用A0~A9译码形成I/O口地址,即1024H个口地址 端口号:0000H~03FFH 其中: A9=1,表示扩充槽上的口地址。

  33. 长格式: 端口号中前256个端口(0~FFH),可以直接写在指令中,这就是长格式。 端口号代替指令中的PORT, 机器指令用二字节表示,第二字节就是端口号。 短格式: 当端口号≥256时,只能使用短格式, 必须先把端口号放到DX寄存器中。 不需要用任何段寄存器来修改它的值。

  34. 1、IN (Input byte or word) 输入指令 格式:IN acc, port ;(acc)  (port) 具体形式有四种: IN AL, data8 ; 端口地址8位,输入一个字节 IN AX, data8 ;端口地址8位,输入一个字 IN AL, DX ;端口地址16位,输入一个字节 IN AX, DX ;端口地址16位,输入一个字 必须通过累加器AX(字)或AL(节)输入数据。

  35. 2 、OUT(Output byte or word) 输出指令 格式: OUT port, acc ;(port)  (acc) 具体形式有四种: OUT data8 , AL ; 端口地址8位,输出一个字节 OUT data8, AX ;端口地址8位,输出一个字 OUT DX , AL ;端口地址16位,输出一个字节 OUT DX , AX ;端口地址16位,输出一个字 必须通过累加器AX(字)或AL(节)输出数据。

  36. 例1:实现(29H)(28H)→(DATA_WORD) IN AX,28H MOV DATA_WORD,AX 例2:从端口3FCH 送一个字到AX寄存器 MOV DX,3FCH IN AX,DX ; (AL)←(3FCH), (AH)←(3FDH) 例3:实现将(AL) →(05H) OUT 5,AL;(05H)←(AL)

  37. 作业: 3.39(1)~(6),3.44,3.46

More Related