代汇编语言程序设计.ppt
《代汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《代汇编语言程序设计.ppt(148页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计 第三章第三章第三章第三章 寻址方式与指令系统寻址方式与指令系统本章要点本章要点基本寻址方式基本寻址方式指令系统指令系统字符设备字符设备I/OI/O功能调用功能调用12343232位指令寻址位指令寻址指令系统:计算机提供给用户使用的指令集。目的操作数,源操作数替代目的操作数不影响源操作数操作结果操作结果操作码操作数操作码例如:MOV AX,100MOV AX,BXMOV AX,BX要访问操作数,首先必须确定如何形成操作数的地址。寻址方式:形成操作数地址的方法。寻址方式选择得正确与否,直接影响程序的执行效率。3.1.2 寻址方式寻址
2、方式与数据有关的寻址方式 确定内存单元的地址与转移地址有关的寻址方式 确定转移地址寻址方式寻址方式分类分类目的操作数,目的操作数,源操作数源操作数MOV有 7 种 与数据有关的寻址方式以以MOV指令为例指令为例:3.1.2 3.1.2 数据的寻址方式数据的寻址方式对源操作数分别使用对源操作数分别使用7 种种寻址方式如下:寻址方式如下:(1)立即寻址方式)立即寻址方式 (Immediate Addressing)(2)寄存器寻址方式()寄存器寻址方式(Register Addressing)(3)直接寻址方式)直接寻址方式(Direct Addressing)(4)寄存器间接寻址方式()寄存器间
3、接寻址方式(Register Indirect Addressing)(5)变址寻址方式)变址寻址方式(Indexed Addressing)(6)基址变址寻址方式()基址变址寻址方式(Based Index Addressing)(7)相对基址变址寻址方式)相对基址变址寻址方式 (Relative Based Index Addressing)掌握寻址方式的要点掌握寻址方式的要点:特点(区别于其他寻址方式)特点(区别于其他寻址方式);使用方法(语法形式);使用方法(语法形式);用途用途(什么情况下使用)。(什么情况下使用)。(1)立即寻址方式立即寻址方式 (Immediate Address
4、ing)特点:特点:操作数包含在指令中。操作数包含在指令中。操作数是指令的组成部分(可以是操作数是指令的组成部分(可以是8 8位或位或1616位)位),取出指令就立即获得取出指令就立即获得操作数操作数立即数立即数例例1:MOV AL,5执行指令后执行指令后:(AL)=05H指令指令05存储器存储器B005AL例例2:MOV AX,3045H执行指令后执行指令后:(AX)=3045H用途:用途:给变量或寄存器赋常量值给变量或寄存器赋常量值限制:限制:只能用于源操作数只能用于源操作数AX低地址低地址高地址高地址指指令令OP45存储器存储器304530(2)寄存器寻址方式()寄存器寻址方式(Regi
5、ster Addressing)特点:特点:操作数存在寄存器中。操作数存在寄存器中。例:例:MOV AX,BX执行指令前执行指令前:(AX)=3045H (BX)=4000H 执行指令后执行指令后:(AX)=4000H (BX)=4000H 用途:用途:用寄存器提供操作数时存取速度快。用寄存器提供操作数时存取速度快。(3)直接寻址方式)直接寻址方式(Direct Addressing)特点:特点:操作数的偏移地址包含在指令中。操作数的偏移地址包含在指令中。例:设例:设 (DS)=3000H MOV AX,2000H要访问的存储单元物理地址为:要访问的存储单元物理地址为:30000H+2000H
6、=32000H设设:(32000H)=3050H执行指令后执行指令后:(AX)=3050H指令指令 MOV AX,2000H 2000H5030存储器存储器代码段代码段op0020数据段数据段30000H32000HAX3050如果如果2000H单元在附加段单元在附加段MOV AX,ES:2000H 段跨越前缀段跨越前缀:“段寄存器名段寄存器名:”用于改变默认使用的段寄存器用于改变默认使用的段寄存器用途用途:用于存取用于存取单变量单变量中的操作数。中的操作数。(4)寄存器间接寻址方式()寄存器间接寻址方式(Register Indirect Addressing)特点特点:(寄存器寄存器)=操
7、作数的偏移地址操作数的偏移地址例:设例:设 (DS)=2000H (BX)=1000H 指令为指令为:MOV AX,BX 20000H+1000H=21000H 计算操作数物理地址的公式:计算操作数物理地址的公式:(BX)(SI)(DI)操作数物理地址操作数物理地址=(DS)16+操作数物理地址操作数物理地址=(SS)16+(BP)要访问的存储单元物理地址为:要访问的存储单元物理地址为:1000HAX50A0 A0 50存储器存储器数据段数据段20000H21000H XX XX21002H 数组起始地址数组起始地址用途用途:可用于处理数组可用于处理数组设设:(21000H)=50A0H执行指
8、令后执行指令后:(AX)=50A0H(5)变址寻址方式)变址寻址方式(Indexed Addressing)(寄存器相对寻址方式)(寄存器相对寻址方式)特点:特点:(变址或基址寄存器变址或基址寄存器)+指令中的位移量指令中的位移量 =操作数的偏移地址操作数的偏移地址+例:设例:设 (DS)=3000H,ARRAY=4000H,(SI)=2000H指令为指令为:MOV AX,ARRAY SI 计算操作数物理地址的公式:计算操作数物理地址的公式:(SI)(DI)+(BX)操作数物理地址操作数物理地址=(DS)16+操作数物理地址操作数物理地址=(SS)16+(BP)+8 8位位移量位位移量1616
9、位位移量位位移量8 8位位移量位位移量1616位位移量位位移量指令指令 MOV AX,ARRAY SI 4000H30000HAX1234 34 12存储器存储器代码段代码段 op 00 40数据段数据段36000H op 2000H 数组起始地址数组起始地址 ARRAY用途用途:30000H+4000H+2000H=36000H 要访问的存储单元要访问的存储单元物理地址为:物理地址为:设设:(36000H)=1234H执行指令后执行指令后:(AX)=1234H可用于处理数组可用于处理数组(6)基址变址寻址方式)基址变址寻址方式(Based Index Addressing)特点:特点:(基址
10、寄存器基址寄存器)+(变址寄存器变址寄存器)=操作数的偏移地址操作数的偏移地址例:设例:设(DS)=2100H,(BX)=0158H,(DI)=1000H 指令为:指令为:MOV AX,BXDI+计算操作数物理地址的公式:计算操作数物理地址的公式:(SI)(DI)(SI)(DI)操作数物理地址操作数物理地址=(DS)16+(BX)+操作数物理地址操作数物理地址=(SS)16+(BP)+21000H+0158H+1000H=22158H 要访问的要访问的存储单元物理地址存储单元物理地址为:为:0158HAX1234 34 12存储器存储器数据段数据段21000H22158H 1000H 数组起始
11、地址数组起始地址设设:(22158H)=1234H执行指令后执行指令后:(AX)=1234H用途用途:可用于处理数组可用于处理数组21000H+0158H+1000H=22158H 指令:指令:MOV AX,BXDI2.MOV AX,BX三种可处理数组的寻址方式的比较三种可处理数组的寻址方式的比较 寄存器间接寻址方式寄存器间接寻址方式特点:适用于要处理的数组需要在程序运行中动态确定,且形式简单。特点:适用于要处理的数组需要在程序运行中动态确定,且形式简单。1.MOV AX,ARRAY SI 变址寻址方式变址寻址方式特点:可读性好,指令明确指出要处理的数组。特点:可读性好,指令明确指出要处理的数
12、组。限制:写程序时必须清楚要处理什么数组。限制:写程序时必须清楚要处理什么数组。3.MOV AX,BXSI 基址变址寻址方式基址变址寻址方式基址变址寻址方式基址变址寻址方式特点:适用于要处理的数组需要在程序运行中动态确定,并且修改特点:适用于要处理的数组需要在程序运行中动态确定,并且修改BXBX就可以处理不同的数组。就可以处理不同的数组。指令指令3 3的的BXBX寄存器是否可被其他寄存器替换?寄存器是否可被其他寄存器替换?指令指令1 的替换寄存器为:的替换寄存器为:DI BX BP(加段跨越前缀加段跨越前缀 DS:或或 ES)指令指令2 2的替换寄存器为:的替换寄存器为:DI SI BP(加段
13、跨越前缀加段跨越前缀 DS:或或 ES)指令指令1 1和指令和指令2 2 的的 寄存器寄存器 还可被哪些寄存器替换?还可被哪些寄存器替换?2.MOV AX,BX1.MOV AX,ARRAY SI3.MOV AX,BXSInext例:设例:设 (SS)=3000H (BP)=2000H ARRAY=0250H (SI)=1000H MOV AX,ARRAYBPSI(7)相对基址变址寻址方式()相对基址变址寻址方式(Relative Based Index Addressing)特点:特点:(基址寄存器基址寄存器)+(变址寄存器变址寄存器)+位移量位移量=操作数的偏移地址操作数的偏移地址要访问的存
14、储单元物理地址为:要访问的存储单元物理地址为:30000H+2000H+0250H+1000H=33250H指令指令 2000HAX1234 1000H30000H33250H 34 12存储器存储器代码段代码段 op 50 02堆栈段堆栈段 op 0250H栈顶栈顶数组首址数组首址用途用途:便于访问堆栈中的数组便于访问堆栈中的数组二维数组二维数组 v1.简单变量寻址v前三种:立即寻址方式,寄存器寻址方式,直接寻址方式v2.数组或表格数据的寻址v后四种:寄存器间接,寄存器相对,基址变址,相对基址变址数据寻址与数据结构的关系2.数组或表格数据的寻址v(1)存取基本数组v数组基本地址:BXv某个元
15、素到数组基本地址的距离:SIDIv则EA=BX+SIDIv或者位移量DISP=数组开始地址v数组元素到数组开始地址的距离:BXSIDIv则EA=DISP+BXSIDI基址变址寻址基址变址寻址寄存器相对寻址寄存器相对寻址2.数组或表格数据的寻址v(2)赋值语句ai=bjv用两个变址寄存器用DI表示ai的偏移地址,DISP表示a0数组的基地址。v则EA=DSIP+DIv相同的,bi的相对地址可以表示为vEA=DSIP+SI寄存器相对寻址寄存器相对寻址2.数组或表格数据的寻址v(3)二维数组A(i,j),aijvEA=BX+SIDIvEA=DISP+BX+SIDI基址变址寻址和相基址变址寻址和相对基
16、址变址寻址对基址变址寻址3.记录型数组的寻址vF=f(M,I,J)有点像结构体vF数据记录项的地址vM数组的基本地址vI数组的元素(记录)vJ元素的数据项v偏移地址=f(基址,变址,位移)vEA=BX+SI+DISP4.堆栈数据结构的寻址v堆栈采用以BP为基址指针的寻址,方便数据结构相同而参数不同的数据存取。v当存取堆栈中简单变量时vEA=BP+DISPv若存取堆栈中的数据和记录v见下图 34 12存储器存储器代码段代码段 op 00 40堆栈段堆栈段 op指令指令 2000HAX1234 1000H30000H33250H 34 12存储器存储器代码段代码段 op 50 02堆栈段堆栈段 o
17、p 0250H栈顶栈顶数组首址数组首址 寻址方式的综合应用关于DEC公司的一条记录(1982年):公司名称:DEC总裁姓名:Ken Olsen 排 名:137收 入:40著名产品:PDP1988年DEC公司的信息有了变化:、Ken Olsen 在富翁榜上的排名已升至38位;、DEC的收入增加了70亿美元;、该公司的著名产品已变为VAX系列计算机。任务:编程修改内存中的过时数据。存储器各种寻址方式的综合性例子 v例:设DS1200H,BX05A6H,SS5000H,BP40A0H,SI2000H,DI3000H,位移量DISP1618H,试判断下列指令的寻址方式,并求出在各种寻址方式下,这些寄存
18、器与位移量所产生的有效地址EA和物理地址(实际地址)PA。说明指令执行的结果。DS1200H,BX05A6H,SS5000H,BP40A0H,SI2000H,DI3000HMOVAX,0618H这是一条直接寻址方式的指令。EA0618HPA12000H+0618H12618H该指令执行的结果是将数据段的实际地址为12618H和12619H两单元中的内容取出送AX。DS1200H,BX05A6H,SS5000H,BP40A0H,SI2000H,DI3000HMOVAX,BX这是一条以数据段基址寄存器BX间接寻址的指令。EA05A6HPA12000H+05A6H125A6H该指令执行的结果是将数据
19、段的125A6H和125A7H两单元的字内容取出送AX。DS1200H,BX05A6H,SS5000H,BP40A0H,SI2000H,DI3000HMOVAX,BP这是一条以堆栈段基址寄存器BP间接寻址的指令。由于寻址时用上了BP寄存器,则操作数所默认的段寄存器就是SS。EA40A0HPA50000H+40A0H540A0H该指令执行的结果是将堆栈段的540A0H和540A1H两单元的字内容取出送AX。DS1200H,BX05A6H,SS5000H,BP40A0H,SI2000H,DI3000HMOVAX,DI这是一条变址寻址的指令。EA3000HPA12000H+3000H15000H该指
20、令执行的结果是将数据段的15000H和15001H两单元的字内容取出送AX。DS1200H,BX05A6H,SS5000H,BP40A0H,SI2000H,DI3000HMOVAX,BX+DI这是一条基址加变址寻址的指令。EA05A6H+3000H35A6HPA12000H+35A6H155A6H该指令执行的结果是将数据段的155A6H和155A7H两单元的字内容取出送AX。DS1200H,BX05A6H,SS5000H,BP40A0H,SI2000H,DI3000HMOVAX,BP+SI+DISP这是一条带位移量的基址加变址寻址的指令,又叫相对基址加变址寻址的指令,且操作数的默认段为SS。E
21、A40A0H+2000H+1618H76B8HPA50000H+76B8H576B8H该指令执行的结果是将堆栈段的576B8H和576B9H两单元的字内容取出送AX。vEA=DISP+BXBP+SIDIvPA=相应的段地址*16+EAvBP寻址,默认用SSvBX,SI,DI寻址默认用DSv越段:DS可被CS,SS,ES越段vSS可被DS,CS,ES越段v不能越段情况:CS:IP,SS:SP,ES总是用来作为目的操作数的段寄存器。v程序存储器寻址方式也就是转移类指令(转移指令JMP和调用指令CALL)的寻址方式。v在8086/8088系统中,由于存储器采用分段结构,所以转移类指令有段内转移和段间
22、转移之分。v所有的条件转移指令只允许实现段内转移,而且是段内短转移。v对于无条件转移和调用指令又可分为段内短转移、段内直接转移、段内间接转移、段间直接转移和段间间接转移等5种不同的寻址方式。程序转移寻址v寻址方式计算出操作数的地址v形成程序转移地址v段内转移:改变IP值,不改变CS值v段间转移:改变IP值,改变CS值v无论段内段间都有直接和间接形式,因此程序转移有四种寻址。v段内直接寻址段内间接寻址v段间直接寻址段间间接寻址段内直接寻址v转移偏移地址EA是指令中8位或16位位移量(DISP)与指令IP当前内容相加之后,然后送入IP。即vEA=IP+DISP8.16IPv当DISP是8位长时,E
23、A形成一个转移范围在-123+127字节之间的短距离转移,则称为短跳转,例如短运算符SHORT的JMP指令、条件转移指令JE等。v注意:DISP是相对IP来计算的。段内直接寻址v当DISP是16位长时,EA形成一个转移范围在64KB之内的近距离转移,称为近跳转,如JMP指令等。近跳转和短跳转DISP是相对IP计算的,又称相对转移寻址。v例如:vJMPNLAB;近跳转JMPSHORTSLAB;短跳转JESLAB;短跳转vv.vNLAB:ADDAX,BXSLAB:MOVDX,CXSLAB:INCSI段内间接寻址v转移偏移地址EA如果指定的是16位的寄存器,则将寄存器的内容IP。例如:vJMPBX;
24、EA=BX,EAIPv如果EA指定的是存储器中的一个字,则将该存储单元的内容IP。即:使用存储器的数据寻址方式获得EA,再将EA单元的内容作为转移偏移地址IP,与CS的内容相加,获得实际的指令转移地址。段内间接寻址v这种寻址方式仅用于JMP指令和CALL指令中。v例如:JMPNLABBX;EA=NLAB+BX,v(EA)IPvJMPWORDPTRNLABBX,(EA)IP,vWORDPTR操作符说明其后的地址单元是一个字。段间直接寻址v用指令只直接提供的转移偏移地址EAIP,指令同时直接提供的转移段地址CS,实现从一个代码转移到另一代码段。v例如:CALLFARPTRNEXTLAB;vFARP
25、TR表示段间转移操作符段间直接寻址v指令指令偏移地址段地址IPCS寻址方式按数据寻址方式计算EAEAEA+2转移偏移地址段地址CSIP存储器中两个连续字单元(a)段间直接寻址(b)段间间接寻址图3.9程序段间的直接或间接转移段间间接寻址v根据存储器的数据寻址方式获得EA,再将EA双字单元第一个字的内容作为转移偏移地址IP,EA双字单元第二个字的内容作为转移段地址CS,然后CS+IP形成指令的实际转移地址。它和段内间接寻址比较,利用第二个16位数修改了CS的内容,实现段间转移。v例如:vJMPFARPTRBX;EA=BX,(EA)IP,(EA+2)CSvCALLDWORDPTRBX;vDWORD
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计
限制150内