汇编语言第二章.ppt
《汇编语言第二章.ppt》由会员分享,可在线阅读,更多相关《汇编语言第二章.ppt(81页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第二章第二章 寻址方式寻址方式一、本章的学习内容一、本章的学习内容:本章主要介绍本章主要介绍80 x86汇编的汇编的6种寻址方式:立即寻种寻址方式:立即寻址,直接寻址,寄存器寻址,寄存器间接寻址,址,直接寻址,寄存器寻址,寄存器间接寻址,变址寻址和基址加变址寻址。变址寻址和基址加变址寻址。(1 1)6 6种寻址方式的使用格式种寻址方式的使用格式;(2 2)每种寻址方式的地址表示的特点及功能每种寻址方式的地址表示的特点及功能;(3 3)6 6种寻址方式的应用举例种寻址方式的应用举例。二、本章的学习重点二、本章的学习重点:(1)6种寻址方式的使用种寻址方式的使用格式格式及及语法规定语法规定;(2)
2、6种寻址方式地址表示的种寻址方式地址表示的含义及应用含义及应用;三、本章学习的难点:三、本章学习的难点:直接寻址,寄存器间接寻址,变址寻址和基址直接寻址,寄存器间接寻址,变址寻址和基址加变址寻址的使用格式及功能。加变址寻址的使用格式及功能。第二章第二章 寻址方式寻址方式2.1 简述简述问题的由来:问题的由来:汇编语言语句汇编语言语句名字名字 操作符操作符 操作数或地址操作数或地址 ;注释注释 INC AX MOV SI,AX一条带有操作数的指令:一条带有操作数的指令:操作符操作符 操作数操作数 要指明要指明两个问题:两个问题:(1)进行什么操作,)进行什么操作,(2)用什么方式寻找操作数的存放
3、地址。)用什么方式寻找操作数的存放地址。2.1 简述简述对比问题:如何得到某人的住址?对比问题:如何得到某人的住址?1.看见该人回到自己的家里。看见该人回到自己的家里。立即得到。立即得到。2.向该人询问。向该人询问。直直接获得。接获得。3.问其他知情者。问其他知情者。间间接获得。接获得。每个知情者可能只知道一部分,每个知情者可能只知道一部分,要问几个知情者。要问几个知情者。组合组合方式。方式。结论:客观上存在几种可能的渠道获得某人的住结论:客观上存在几种可能的渠道获得某人的住址,然后找到该人。址,然后找到该人。因此,计算机的指令也可以通过几种方式得到因此,计算机的指令也可以通过几种方式得到操作
4、数的存放地址,然后取到操作数。操作数的存放地址,然后取到操作数。l什么是寻址方式:指寻找操作数的地址的什么是寻址方式:指寻找操作数的地址的 表示方式表示方式l80 x86种采用两种寻址方法,并设置种采用两种寻址方法,并设置6种寻种寻址方式:址方式:寻址方法寻址方法直接寻址方法直接寻址方法立即寻址方式立即寻址方式寄存器寻址方式寄存器寻址方式直接寻址方式直接寻址方式间接寻址方法间接寻址方法寄存器间接寻址方式寄存器间接寻址方式变址寻址方式变址寻址方式基址加变址寻址方式基址加变址寻址方式2.1 简述简述2.1 简述简述学习寻址方式的学习寻址方式的3点思考点思考:(1)语法问题:寻址方式的使用格式及语法
5、规定语法问题:寻址方式的使用格式及语法规定;(2)类型问题:寻址方式的格式中有无类型类型问题:寻址方式的格式中有无类型;(3)段的确定问题:寻址方式所表示的操作对象若段的确定问题:寻址方式所表示的操作对象若在内存中时,它在内存中的什么段中在内存中时,它在内存中的什么段中?使用格式:使用格式:n(n为常数或数值表达式,称为立即为常数或数值表达式,称为立即数)数)功能:操作数功能:操作数n,就是紧跟在指令操作码后面的一就是紧跟在指令操作码后面的一个可用个可用8位、位、16位或位或32位二进制补码表示的有符位二进制补码表示的有符号数,构成了指令的一部分,位于代码段中。号数,构成了指令的一部分,位于代
6、码段中。例例:MOV BX,10 MOV AH,A ADD EAX,-12345678H2.2 立即寻址方式立即寻址方式 说明:说明:(1)立即数)立即数n只能是只能是常数常数或结果为或结果为确定值的表达式确定值的表达式;(2)立即数只能作为双操作数指令的)立即数只能作为双操作数指令的源操作数源操作数,不能作为,不能作为目的操作数;立即数不能作为单操作数指令的操作数;目的操作数;立即数不能作为单操作数指令的操作数;(3)立即数只有大小,)立即数只有大小,没有没有数据数据类型类型,占用的字节数由指,占用的字节数由指令指定令指定(目的操作数目的操作数)的操作数类型确定未分配内存单元;的操作数类型确
7、定未分配内存单元;如如:MOV 100H,AX;ERROR INC 50 ;ERROR(4)立即寻址方式主要用于给寄存器或存储器立即寻址方式主要用于给寄存器或存储器赋初值赋初值。它是随指令取到它是随指令取到CPU内部的,不需要再单独运行总内部的,不需要再单独运行总 线周期访问存储器,速度快,表达简单明了、清晰线周期访问存储器,速度快,表达简单明了、清晰 直观。直观。2.2 立即寻址方式立即寻址方式 例:例:MOV WORD PTR SI,3000H 源操作数寻址方式为立即寻址源操作数寻址方式为立即寻址2.2 立即寻址方式立即寻址方式0C7H 04H 00H 30H 操作码及目的操作数寻址方式码
8、操作码及目的操作数寻址方式码源操作数(立即寻址)源操作数(立即寻址)使用格式:使用格式:R;R为为CPU中寄存器名。中寄存器名。功能:操作对象在功能:操作对象在CPU的寄存器的寄存器R中,不在内存。中,不在内存。例例1:DEC BX 执行前:执行前:(BX)=0040H 执行:执行:(BX)1=0040H1=003FH BX 结果:结果:(BX)=003FH例例2:ADD EAX,EBX 执行前:执行前:(EAX)=12345678H,(EBX)=56201111H 执行:执行:(EAX)+(EBX)=68546789H EAX 执行后:执行后:(EAX)=68546789H (EBX)=56
9、20H2.3 寄存器寻址方式寄存器寻址方式 说明:说明:(1)寄存器既可以作为源操作数,也可以作为目的操作数)寄存器既可以作为源操作数,也可以作为目的操作数(2)操作数的类型由寄存器的位数决定:操作数的类型由寄存器的位数决定:8位寄存器是字位寄存器是字节类型;节类型;16位寄存器是字类型;位寄存器是字类型;32位寄存器是双字类型位寄存器是双字类型.(3)在双操作数的指令中,当两个操作数类型均明确时,)在双操作数的指令中,当两个操作数类型均明确时,必须一致。必须一致。如如:MOV BL,AX;ERROR BL是字节类型是字节类型,AX是字类是字类型,类型不一致型,类型不一致MOV AX,EAX;
10、ERROR AX是字类型,是字类型,EAX是双字是双字类型,类型不一致类型,类型不一致(4)寄存器寻址的指令执行速度快,在编程中,应该充分)寄存器寻址的指令执行速度快,在编程中,应该充分利用寄存器存放经常使用的操作数利用寄存器存放经常使用的操作数2.3 寄存器寻址方式寄存器寻址方式 使用格式:使用格式:段寄存器名:段寄存器名:EA(“段寄存器段寄存器:”称为称为段跨越前缀段跨越前缀)或:或:含有变量的地址表达式(变量含有变量的地址表达式(变量 或或 变量变量+常数)常数)其中:偏移地址其中:偏移地址EA的形式为常数或者数值表达式。的形式为常数或者数值表达式。功能:操作数存放在指定的段中。操作数
11、的偏移地功能:操作数存放在指定的段中。操作数的偏移地址址EA(16位或位或32位)紧跟在指令操作码后面,存位)紧跟在指令操作码后面,存放在内存的代码段中,构成了指令的一部分,通过放在内存的代码段中,构成了指令的一部分,通过指令指示器指令指示器IP/EIP获取。获取。2.4 直接寻址方式直接寻址方式说明:说明:(1)n是一个数值或数值表达式,直接表明操作是一个数值或数值表达式,直接表明操作数的偏移地址值,是一个无符号数数的偏移地址值,是一个无符号数。(2)段属性问题:)段属性问题:“段寄存器名段寄存器名:EA”格式中,操作对象在段寄格式中,操作对象在段寄存器名指定的段中。必须在存器名指定的段中。
12、必须在n前面加上希望访问前面加上希望访问段的段的段前缀段前缀。“含有变量的地址表达式含有变量的地址表达式”格式中,操作对象在格式中,操作对象在变量所定义的段中。变量所定义的段中。2.4 直接寻址方式直接寻址方式含有变量的地址表达式含有变量的地址表达式(变量变量 或或 变量变量+常数常数)在在汇编过程中将转换成汇编过程中将转换成“段寄存器名段寄存器名:n”,n由汇由汇编程序计算地址表达式得到,段寄存器名根据编程序计算地址表达式得到,段寄存器名根据变变量定义所在的段量定义所在的段,以及,以及段假定伪指令段假定伪指令共同决定。共同决定。D1 SEGMENT A DW?D1 ENDS ASSUME D
13、S:D1 MOV AX,A MOV AX,DS:0 2.4 直接寻址方式直接寻址方式含有变量的地址表达式如果前面带有跨段前缀怎含有变量的地址表达式如果前面带有跨段前缀怎么办。么办。由段前缀的段寄存器决定由段前缀的段寄存器决定例:例:MOV AX,ES:A操作数在操作数在ES附加数据段,偏移地址仍由变量在所附加数据段,偏移地址仍由变量在所属段的位置决定属段的位置决定MOV AX,ES:0 2.4 直接寻址方式直接寻址方式 (3)类型属性问题)类型属性问题 “段寄存器名段寄存器名:EA”格式表示的操作数无类型格式表示的操作数无类型 “含有变量的地址表达式含有变量的地址表达式”格式表示的操作数格式表
14、示的操作数有类型,且类型由有类型,且类型由变量的类型变量的类型决定。决定。MOV AX,ES:20H;源操作对象在内存源操作对象在内存ES段中,段中,无类型。无类型。MOV BUF,AX;目的操作数为直接寻址,且类目的操作数为直接寻址,且类型和段属性由型和段属性由BUF决定。(其中决定。(其中BUF为已定义的为已定义的字类型的变量)字类型的变量)2.4 直接寻址方式直接寻址方式例例:MOV AX,ES:20H;源操作对象在内存源操作对象在内存ES段中,段中,无类型。无类型。LEA AX,20H;等价等价MOV AX,20H,即源操作即源操作数为立即寻址数为立即寻址MOV BUF,AX;目的操作
15、数为直接寻址,且类目的操作数为直接寻址,且类型和段属性由型和段属性由BUF决定。(其中决定。(其中BUF为已定义的为已定义的字类型的变量)字类型的变量)2.4 直接寻址方式直接寻址方式例例:在在”ADD WORD PTR DS:1000H,3000H”中,目的操作数的寻址方式为直接寻址方中,目的操作数的寻址方式为直接寻址方式,其中式,其中“WORD PTR DS:1000H”指出指出类类型为字型为字目的操作数在当前数据段中,所在存储单元到段目的操作数在当前数据段中,所在存储单元到段首址的字节距离为首址的字节距离为1000H。问题:问题:DS是否可以去掉,为什么?是否可以将是否可以去掉,为什么?
16、是否可以将DS:1000H改写成变量名,如改写成变量名,如A?2.4 直接寻址方式直接寻址方式不需要用户去计算每一存贮单元的不需要用户去计算每一存贮单元的EA,这一工作,这一工作由汇编程序计算完成。由汇编程序计算完成。用户只要为该存贮单元取一变量名,直接引用名用户只要为该存贮单元取一变量名,直接引用名字即可。如上例,为当前数据段的字即可。如上例,为当前数据段的1000H号字存号字存储单元取名为储单元取名为A,1002H号字存储单元取名为号字存储单元取名为B,以上指令可写为:以上指令可写为:ADD A,3000H 或或 ADD B-2,3000H 2.4 直接寻址方式直接寻址方式指令指令 MOV
17、 BX,A+3 假定假定A是一个已定义的字类型的变量是一个已定义的字类型的变量与与C语言中赋值语句语言中赋值语句 B=A+3 有本质的区别有本质的区别MOV BX,A+3 表示取表示取A的偏移地址的偏移地址+3后得到后得到的值作为操作数的偏移地址,取字类型数据的值作为操作数的偏移地址,取字类型数据2.4 直接寻址方式直接寻址方式 使用格式:使用格式:R 功能:操作对象在内存中;操作对象的功能:操作对象在内存中;操作对象的EA在寄存在寄存器器R中。中。R为为16位寄存器位寄存器BX,BP,SI,DI之一;或是之一;或是32位寄位寄存器存器:EAX,EBX,ECX,EDX,EDI,ESI,EBP,
18、ESP之一。之一。不能是不能是8位寄存器。位寄存器。2.5 寄存器间接寻址方式寄存器间接寻址方式操作码操作码 EA R 段选择符段选择符 段寄存器段寄存器 CPU依据工作方式进行段依据工作方式进行段/页转换,计算页转换,计算PA操作数操作数PA2.5 寄存器间接寻址方式寄存器间接寻址方式说明:说明:(1)操作数的)操作数的偏移地址偏移地址在指令指明的寄存器中在指令指明的寄存器中(2)段属性段属性 默认情况:当默认情况:当R是是BP,EBP,ESP,则操作对象则操作对象在当前在当前堆栈段堆栈段中。即操作数地址为中。即操作数地址为“SS:(R)”;R为其它规定的寄存器,则操作对象在当前为其它规定的
19、寄存器,则操作对象在当前数据段数据段中,即操作数为中,即操作数为”DS:(R)”。显式情况:在显式情况:在R前可加上段跨越前缀,则操前可加上段跨越前缀,则操作对象在作对象在前缀前缀指定的段中。指定的段中。例:例:MOV DS:EBP,CX;目的操作数表示操目的操作数表示操作对象在作对象在DS段中,而不是在段中,而不是在EBP默认的堆栈段中。默认的堆栈段中。2.5 寄存器间接寻址方式寄存器间接寻址方式说明:说明:(3)类型属性:此种寻址无类型,在操作数类型)类型属性:此种寻址无类型,在操作数类型不明确时,一定要指出操作数类型不明确时,一定要指出操作数类型 MOV AL,DI ;很明确,字节很明确
20、,字节 MOV BX,SI ;很明确,字很明确,字 MOV SI,10H ;不明确,字节不明确,字节?字字?双字双字?;汇编程序的版本不同处理汇编程序的版本不同处理有所不同有所不同 INC ECX ;不明确不明确 MOV BX,EDX ;不明确,且不正确不明确,且不正确2.5 寄存器间接寻址方式寄存器间接寻址方式说明:说明:(4)注意)注意R中的中的R必须是规定的寄存器。必须是规定的寄存器。所有的所有的32位寄存器都可以作为间址寄存器位寄存器都可以作为间址寄存器 16位的寄存器只有位的寄存器只有BX、SI、DI、BP能作能作间址寄存器;间址寄存器;如如:MOV AX,CX;ERROR MOV
21、DX,BL;ERROR2.5 寄存器间接寻址方式寄存器间接寻址方式0020H0021H001FH0022H例1:MOV AX,SI执行前(AX)=0005H (SI)=20H DS:(20H)=1234H执行后(AX)=1234H (SI)=20H34H12H偏移地址0000H56H78HDS问:MOV CL,SI (CL)=?操作数的类型是如何确定的,你猜出来了吗?2.5 寄存器间接寻址方式寄存器间接寻址方式2.5 寄存器间接寻址方式寄存器间接寻址方式例2:MOV AH,BP执行前(AX)=0005H (BP)=21H SS:(BP)=12H执行后(AX)=1205H (BP)=21H78H
22、56H34H12H45H偏移地址0000H0020H0021H001FH0022HSP001EHBP寄存器间接寻址的应用设设 以以A A为首址的字数据区中存放有为首址的字数据区中存放有4 4个数,求它们的和送入个数,求它们的和送入B B中。中。A DW 100H,300H,500H,700H B DW?与数组类比:与数组类比:A0,A1,A2,A0,A1,A2,共同特点:单元中的内容无规律,共同特点:单元中的内容无规律,但单元之间的地址有规律但单元之间的地址有规律。A 0000H0004H0003H0002H00H01H00H00H0001Hreg.asm2.5 寄存器间接寻址方式寄存器间接寻
23、址方式03H0005H0009H B 0008H0007H05H00H07H?0006H?2.5 寄存器间接寻址方式寄存器间接寻址方式.386 DATA SEGMENT USE16A DW 100H,300H,500H,700HB DW?DATA ENDSSTACK SEGMENT USE16 STACK DB 100 DUP(0)STACK ENDS 2.5 寄存器间接寻址方式寄存器间接寻址方式CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA,SS:STACKBEGIN:MOV AX,DATA MOV DS,AX MOV ECX,OFFSET A ;ECX为
24、取数指针为取数指针 MOV AX,0 ;AX为累加器为累加器 ADD AX,ECX ;(;(AX)+100H AX ADD ECX,2 ;指针下移;指针下移 ADD AX,ECX ;(;(AX)+300H AX ADD ECX,2 ;指针下移;指针下移 ADD AX,ECX ;(;(AX)+500H AX ADD ECX,2 ;指针下移;指针下移 ADD AX,ECX ;(;(AX)+700H AX MOV B,AX MOV AX,4C00H INT 21HCODE ENDS END BEGIN2.5 寄存器间接寻址方式寄存器间接寻址方式结果:结果:(B)=(AX)=1000H (ECX)=A
25、的偏移地址的偏移地址+6问题:上述程序中,若将问题:上述程序中,若将ECX改为改为CX是否可以?是否可以?(reg1.asm),改为改为BP或者或者EBP呢?呢?改为改为EDX或者或者DX呢?呢?改为改为BX呢?呢?2.5 寄存器间接寻址方式寄存器间接寻址方式在数据多时,此方法行不行在数据多时,此方法行不行?得使用寄存器间接方式通过得使用寄存器间接方式通过循环循环取得数据取得数据BEGIN:MOV AX,DATA MOV DS,AX MOV EDX,OFFSET A MOV AX,0 MOV CX,4NEXT:ADD AX,EDX ADD EDX,2 DEC CX JNE NEXT MOV B
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 第二
限制150内