1 / 256

第 3 章

第 3 章. 80 86 的 寻址方式 和 指令系统. 中国科学技术大学 何克东. 本章要点. 寻址方式 常用指令的功能、格式、操作、对标志的影响 计算机是如何实现转移、调用、中断的. 3.1 8086 寻址方式. 寻址 (addressing) : 把物理地址分配给程序的各条指令的过程。 寻址方式 (addressing mode) :根据指令的地址码生成操作数的物理地址的方法。. 指令. 指令地址 : 指令通常存放在内存中. 地址. 操作数地址: 操作数可以存放在多个地方. : MOV BX, 123

hyman
Download Presentation

第 3 章

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. 第 3 章 8086 的寻址方式和 指令系统 中国科学技术大学 何克东

  2. 本章要点 • 寻址方式 • 常用指令的功能、格式、操作、对标志的影响 • 计算机是如何实现转移、调用、中断的

  3. 3.1 8086寻址方式 • 寻址(addressing) :把物理地址分配给程序的各条指令的过程。 • 寻址方式(addressing mode) :根据指令的地址码生成操作数的物理地址的方法。 指令

  4. 指令地址:指令通常存放在内存中 地址 操作数地址:操作数可以存放在多个地方 : MOV BX, 123 ADD AX, BX MOV AX, [2000H] IN AX, 12H : JMP L1 : CALL SUB1 : INT 21H CS IP

  5. 寻址方式 1、 立即寻址 2、 寄存器寻址 3、 直接寻址 4、 寄存器间接寻址 5、 基址加变址寻址 6、 寄存器相对寻址 7、 相对基址加变址寻址

  6. 操作数在何处? • 直接包含在指令中 立即数 MOV AX,0 立即数寻址 • 包含在某个寄存器中 寄存器操作数 MOV AX,BX 寄存器寻址 • 在内存中 存储器操作数(内存操作数)MOV AX,[1000H] 存储器寻址 • 在外设中 I/O操作数 IN AL,12H I/O寻址

  7. 一、 立即寻址方式 • 操作数直接存放指令中,紧跟在操作码之后。 • 这种操作数被称为立即数 imm • 它可以是8位数值i8(00H~FFH) • 也可以是16位数值i16(0000H~FFFFH) • 立即数寻址方式常用来给寄存器、存储器赋值 指令 操作数

  8. 立即数寻址指令 MOV AL,05H ;AL←05H MOV AX,0102H ;AX←0102H

  9. 错误: MOV AL, 256 MOV 12, AL

  10. 二、寄存器寻址方式 • 操作数存放在CPU的内部寄存器reg中,可以是: • 8位寄存器r8: AH、AL、BH、BL、CH、CL、DH、DL • 16位寄存器r16: AX、BX、CX、DX、SI、DI、BP、SP • 4个段寄存器seg: CS、DS、SS、ES 指令 寄存器 寄存器号 操作数

  11. 寄存器寻址指令 MOV AX,1234H ;AX←1234H MOV BX,AX ;BX←(AX)

  12. 错误用法 MOV AL , BX MOV AX , BL

  13. 存储器寻址方式 • 操作数在存储器中。指令中给出操作数在主存中的地址信息(偏移地址,称之为有效地址EA),而段地址在默认的或用段超越前缀指定的段寄存器中 • 物理地址=段地址+EA(有效地址) 段地址=(段寄存器)×16 EA=偏移地址 / [基址]+[变址]+[位移量]

  14. 8086设计了多种存储器寻址方式 1、直接寻址方式 2、寄存器间接寻址方式 3、寄存器相对寻址方式 4、基址变址寻址方式 5、相对基址变址寻址方式

  15. 三、直接寻址方式 • 有效地址在指令中直接给出 • 默认的段地址在DS段寄存器,可使用段超越前缀改变 段寄存器 段基址 存储器 指令 ⊕ 操作数 EA

  16. 直接寻址指令 MOV AX,[2000H] ; AX←(DS:[2000H]) ;指令代码:A10020 MOV AX,ES:[2000H]; AX←(ES:[2000H]) 段超越前缀 ;指令代码:26A10020

  17. 错误用法 DATA1 DB 1,2 DATA2 DW 1,2 : MOV AL,DATA2 MOV AX,DATA1

  18. 四、寄存器间接寻址方式 • 有效地址存放在基址寄存器BX、BP或变址寄存器SI、DI中。 • 默认的段地址在DS段寄存器,可使用段超越前缀改变(如果使用BP,则默认的段地址在SS段寄存器)。

  19. 寄存器间接寻址指令 MOV AX,[SI] ; AX←(DS:[SI]) MOV AX,[BX] ;AX←(DS:[BX]) MOV AX,[BP] ;AX←(SS:[SP])

  20. 错误用法: MOV AX,[CX] MOV BX, [AX] MOV AX, [BL] MOV [BX],1

  21. 五、寄存器相对寻址方式 • 有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI 有效地址=BX/BP/SI/DI+8/16位位移量 • 段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段超越前缀改变

  22. 寄存器相对寻址指令 MOV AX,8[SI] ; AX←(DS:[SI]+8 ) MOV AX,[SI+8] MOV AX,-8[BX] ;AX←(DS:[BX]-8 ) MOV AX,2[BP] ;AX←(SS:[BP]+2)

  23. 六、基址变址寻址方式 • 有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成: 有效地址=BX/BP+SI/DI • 段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变

  24. 基址变址寻址指令 MOV AX,[BX+SI]; AX←(DS:[BX+SI]) MOV AX,[BP+DI]; AX←(SS:[BP+DI]) MOV AX,DS:[BP+DI];AX←(DS:[BP+DI])

  25. 七、相对基址变址寻址方式 • 有效地址是基址寄存器(BX/BP)、变址寄存器(SI/DI)与一个8位或16位位移量之和: 有效地址=BX/BP+SI/DI+8/16位位移量 • 段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变

  26. 相对基址变址寻址指令 MOV AX,[BX+SI+06H] ;AX←(DS:[BX+SI+06H]) MOV AX,06H[BX][SI];

  27. 3.2 指令的机器码表示方法 • 高级语言:a= 0F03AH • 汇编语言:MOV DI, 0F03AH • 助记符 目 源 • 机器语言:计算机唯一能识别的语言 10111111 00111010 11110000

  28. P67 MOV SP,BX

  29. 3.3 8086指令系统 一、 数据传送指令 二、算术运算指令 三、逻辑运算和移位指令 四、字符串指令 五、程序控制指令 六、 处理器控制指令

  30. 一、数据传送指令 • 数据传送是计算机中最基本、最重要的一种操作 • 传送指令也是最常使用的一类指令 • 传送指令把数据从一个位置传送到另一个位置 • 除标志寄存器传送指令外,均不影响标志位

  31. 立即数 通用寄存器 AX BX CX DX BP SP SI DI 存 储 器 段寄存器 CS DS ES SS 1 、 通用数据传送指令 (1)MOV传送指令 指令格式: MOV 目标,源 指令功能:目标 (源)

  32. 寻址类型 指令 源 地址生成 目标 寄存器BX 寄存器AX 寄存器寻址 MOV AX,BX 立即寻址 MOV CH,3AH 数据3AH 寄存器CH DS×10H+DISP 10000H+1234H 存储器地址11234H 直接寻址 MOV [1234H],CL 寄存器CL DS×10H+BX 10000H+0300H 存储器地址10300H 寄存器CL 寄存器间接寻址 MOV [BX],CL 注意:BX=0300H,SI=0200H,ARRAY=1000H,DS=1000H

  33. 寻址类型 指令 源 地址生成 目标 存储器地址10500H DS×10H+BX+SI 10000H+0300H+0200H 寄存器BP 基址加变址寻址 MOV [BX+SI],BP DS×10H+BX+4 10000H+0300H+4 存储器地址10304H 寄存器相对寻址 MOV CL,[BX+4] 寄存器CL DS×10H+ARRAY+BX+SI 10000H+1000H+0300H+0200H 相对基址加变址寻址 MOV ARRAY[BX+SI],DX 存储器地址11500H 寄存器DX 注意:BX= 0300H,SI= 0200H,ARRAY=1000H,DS=1000H

  34. 立即数传送 mov al,4 ;al←4,字节传送 mov cx,0ffh ;cx←00ffh,字传送 mov si,200h ;si←0200h,字传送 mov byte ptr [si],0ah ;byte ptr 说明是字节操作 mov word ptr [si+2],0bh ;word ptr 说明是字操作

  35. 寄存器传送 mov ax,bx ;ax←bx,字传送 mov ah,al ;ah←al,字节传送 mov ds,ax ;ds←ax,字传送 mov [si],al ;[si]←al,字节传送

  36. 存储器传送 mov al,[bx] mov dx,[bp] ;dx←ss:[bp] mov es,[si] ;es←ds:[si]

  37. 段寄存器传送 mov [si],ds mov ax,es ;ax←es mov ds,ax ;ds←ax←es

  38. 注 意 • 源操作数可以是8/16位的立即数、寄存器操作数、内存操作数。目标操作数不允许为立即数,其余同源操作数。源、目不能同时为内存操作数。 • 以CS、IP为目标的一切指令都是非法的

  39. 两个操作数的类型要一致 • 绝大多数双操作数指令,除非特别说明,目的操作数与源操作数必须类型一致,否则为非法指令 MOV AL,050AH MOV AL,BX • 寄存器有明确的字节或字类型,有寄存器参与的指令其操作数类型就是寄存器的类型 • 对于存储器单元与立即数同时作为操作数的情况,必须显式指明;byte ptr指示字节类型,word ptr指示字类型 mov byte ptr [si],0ah

  40. 两个操作数不能都是存储器 8086指令系统不允许两个操作数都是存储单元(除串操作指令),要实现这种传送,可通过寄存器间接实现 Mov buffer1,buffer2 mov ax,buffer1 ;ax←buffer1(将buffer1内容送ax) mov buffer2,ax ;buffer2←ax ;这里buffer1和buffer2是两个字变量 ;实际表示直接寻址方式

  41. 要小心段寄存器的操作 • 不允许立即数传送给段寄存器 MOV DS,100H MOV AX, 100H MOV DS,AX ;非法指令:立即数不能传送段寄存器 • 不允许直接改变CS值 MOV CS,AX;不允许使用的指令 • 不允许段寄存器之间的直接数据传送 MOV DS,ES MOV AX,ES MOV DS,AX ;非法指令:不允许段寄存器间传送

  42. (2) PUSH 进栈操作指令 指令格式: PUSH 源操作数 指令功能 :SP(SP)-2 (SP)+1,(SP) (源操作数)

  43. SS 栈顶 MOV AX,1234H MOV BX, 5678H PUSH AX PUSH BX 12 34 56 78 78H 56H 34H 12H SP 栈底 堆栈(Stack)

  44. 汇编语句 例子 说明 PUSH reg16PUSH BX16位寄存器 PUSH mem16PUSH WORD PTR[BX] 16位寻址方式 PUSH segPUSH DS 任何段寄存器

  45. 例:现场保护恢复 push ax ;进入子程序后 push bx push ds ... pop ds ;返回主程序前 pop bx pop ax

  46. (3) POP 出栈操作指令 指令格式:POP 目标 指令功能:目标 ((SP)+1,SP)) SP (SP)+2

  47. SS 栈顶 POP BX POP AX 78H 56H 12H 34H 78H 56H 34H 12H SP 栈底 堆栈(Stack)

  48. POP指令 汇编语句 例子 说明 POP reg16POP CX 16位寄存器 POP mem16POP WORD PTR[BX+1] 16位存储器地址 POP segPOP DS 任何段寄存器

  49. (4) XCHG 交换指令 • 指令格式:XCHG 目标, 源 指令功能:(目标)↔(源) • 将寄存器的内容与任何其他寄存器或存储单元的内容交换。

More Related