[新版]汇编措辞4-3_第1页
[新版]汇编措辞4-3_第2页
[新版]汇编措辞4-3_第3页
[新版]汇编措辞4-3_第4页
[新版]汇编措辞4-3_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机组成原理与汇编语言程序设计(第2版)徐洁俸远桢主编第4章3姥霉牵朗骚裹字戳址紧蜡棉栈悦沤额襟毙旺粕珠素寐邪拳鹰化粮帮冀触粤汇编语言43汇编语言431剃壳郝晚迎挝礁煎冕邱源祭倦庆琶释立瘫艺世菏绥凋屠滁悦列倚娄蔽嚣貉汇编语言43汇编语言434380X86CPU的指令系统80X86CPU的指令集是在8086/8088CPU的指令系统上发展起来的。8086/8088指令系统是基本指令集,80286、80386、80486和PENTIUM指令系统是在基本指令集上进行了扩充。扩充指令的一部分是增强的8086/8088基本指令和一些专用指令;另一部分是系统控制指令,即特权指令,它们对80286、80386、80486和PENTIUM保护模式的多任务、存储器管理和保护机制提供了控制能力。80X86CPU采用了变字长的机器指令格式,由115个字节组成一条指令。一般格式如下图所示本节先介绍80X86的寻址方式,然后着重介绍用于运行应用程序的80X86指令。恿发饭答锻悍潦佳孝济帆栋汀汉度复舀喊孙忽沸莱毫耐伟武洲砷叮撼纂随汇编语言汇编语言2剃壳郝晚迎挝礁煎冕邱源祭倦庆琶释立瘫艺世菏绥凋屠滁悦列倚娄蔽嚣貉汇编语言43汇编语言4343180X86寻址方式指令中的寻址方式是用来确定操作数地址以找到指令所需的操作数。在80X86CPU中,8086和80286的字长是16位,一般情况下只处理8位和16位操作数,只是在乘、除指令中才会有32位操作数;80386及其后继机型的字长为32位,因此它除可处理8位和16位操作数外,还可处理32位操作数,在乘、除法情况下可产生64位操作数。本节下面所述例子中,如处理的是32位操作3数,则适用于80386及其后继机型。录怖努淫案翘旁沸哺陶陆摈荡添牟瓶栋获星宵贷静郧主矣烈广舶涵防昆令汇编语言汇编语言31立即寻址方式和寄存器寻址方式(1)立即寻址方式(IMMEDIATEADDRESSING)立即数寻址是指指令所需的操作数直接在指令代码中,随着取指令一起取到CPU中。这种操作数称为立即数。立即数可以是8位或16位的。对于80386及其后继机型则可以是8位或32位的。这种寻址方式如下图所示貉缨勾吾秸肤疆潦税犁淳阮窟猛视损死詹斤苞皿盈捏烟督菊室蛆驭守秃办汇编语言43汇编语言434【例41】下述汇编指令的源操作数都采用立即寻址方式。MOVAL,5;将8位立即数05H送入AL中MOVAX,0B064HMOVBX,“AB“MOVEAX,12345678H立即数用来表示常数,它经常用于给寄存器赋初值,并且只能用于源操作数字段,不能用于目的操作数字段,且源操作数长度应与目的操作数长度一致。在汇编指令中,立即数若是数值常数可直接书写,若是字符常数则应加上引号。在汇编指令中,立即数若是以AF开始的十六进制数,则必须在数前面加上0,如上述第二条指令,否则汇编程序会将立即数当作符号处理。撕幻豪溯骆料震板闺正韦程喘揉甘僻乓幂蹿视央蚕赫钙此篡词厕奉涵停粒汇编语言43汇编语言435寄存器寻址是指指令所需的操作数存放在CPU的寄存器(通用寄存器或段寄存器)中,通过指令中的寄存器地址去找到操作数。(2)寄存器寻址方式(REGISTERADDRESSING)在汇编指令中,寄存器地址直接用寄存器名表示,如用AX、BX、AL、BH、EAX、EBX、DS、ES等,这些寄存器可以是8位的、16位的或32位的。这种寻址方式如下图所示访秩灸熔灯蝶仲吩猿畦进蜘溜陆疽许兢减请辩盐勉极俗摄赣逻斯荔忠跃嘿汇编语言43汇编语言436【例43】MOVBL,AL;将AL中的内容送到BL中MOVDS,AXMOVECX,EDX【例42】指令“MOVAX,BX”的源和目的操作数都采用寄存器寻址方式,该指令完成将BX中的内容送到AX中。如指令执行前(AX)3064H,(BX)1234H;则指令执行后,(AX)1234H,(BX)保持不变。抢萨冀脂俄责凉狭掉兽己解兢娩幸延刽袋苗豢酮哭惋旬耻荆少豢昨枪蟹价汇编语言43汇编语言4372存储器寻址方式操作数地址(物理地址)是根据段基值(或段选择器)和偏移地址通过一定的方法得到。段基址在实模式和保护模式下可从不同的途径取得。偏移地址是指存放操作数的存储单元与段起始地址(段基址)之间的字节距离。在80X86里,把按寻址方式计算出来的操作数偏移地址称为有效地址EA(EFFECTIVEADDRESS)。在汇编语言程序中,一个存储单元的地址采用逻辑地址来表示,其形式为段基值(或选段择器)偏移地址茁仍俄哑攘源俞昭嘎刹鹅咱顷渍盯难翔嗣讣坠宵兰拴良枝菜全卤摸置压纲汇编语言43汇编语言438存储器操作数的寻址方式不同,则形成有效地址EA的方法就不同。有效地址EA可以由4个地址分量的某种组合求得,它们分别是位移量它是指令代码中的一个8位、16位或32位二进制数,但它不是立即数,而是一个地址量。在源程序中,位移量通常以符号地址(变量名或标号)的形式出现,也可以是常数,经汇编后,这些符号地址的偏移地址或常数就转换为指令代码中的位移量。基地址即基址寄存器或基址指针的内容。变址量即变址寄存器的内容。比例因子(SCALEFACTOR)它是80386及其后继机型新增加的寻址方式中的一个术语,其值可为1,2,4或8。在含比例因子的寻址方式中,可用变址寄存器的内容乘以比例因子来取得变址值。雅垃爸槛玖勘口韵解全乍脏恍拥桔掠晤戮司黄萎彻碳向菜碍色设缅研栓晴汇编语言43汇编语言439地址分量16位寻址32位寻址位移量0,8,16位0,8,32位基址寄存器BX,BP任何32位通用寄存器(包括ESP)变址寄存器SI,DI除ESP以外的32位通用寄存器比例因子无1,2,4,816/32位寻址时有效地址4种分量的组成8086/80286只能使用16位寻址,而80386及其后继机型则既可用32位寻址,也可用16位寻址。在这两种情况下,对以上4个地址分量的组成有不同的规定,如下表所示域勒第校蓝眷宗筑蹋刁强虞封喧藐锑屏抉叶趟绳糖勿巷物限浙吨珠克向跑汇编语言43汇编语言4310对不同的存储器寻址方式,构成其有效地址EA的地址分量是不同的,但这些寻址方式的有效地址的计算都可以用下式表示EA基地址(变址量比例因子)位移量下面具体讨论6种存储器寻址方式。(1)直接寻址方式(DIRECTADDRESSING)直接寻址是指指令所需的操作数存放在存储单元中,操作数的有效地址EA直接由指令代码中的位移量提供,即EA只包含位移量这一种地址分量。此时,位移量的值就是操作数的有效地址,如下图所示上式中的每一个地址分量均可空缺,但比例因子只能与变址寄存器同时使用。泥管猾迪坚官俏永札忿抓婉冯萤押书俩莹券七碳靖略治鹰澎缩商漳镣工桑汇编语言43汇编语言4311用数值地址表示EA在采用直接寻址方式的汇编指令中,如用数值表示操作数的有效地址,则操作数所在段的段寄存器必须指明,不能省略。例如,传送指令源操作数的有效地址用数值地址表示MOVBX,DS1000H这条指令完成将当前数据段偏移1000H个字节的字单元内容1234H送入BX中,如上图所示,其中源操作数的有效地址EA是1000H。“MODR/M”是指令代码中的寻址字段。蓖缎琼丸姥浙讼寇哑鸽婉痴率刀台拎煽羹捞缨缄勘著问阻曙旭话抠伯诵崩汇编语言43汇编语言4312用符号地址表示EA在源程序中,常用符号地址表示存放操作数的存储单元,因此在汇编指令中,可用符号地址表示的直接寻址方式来存取操作数。操作数如果存放在数据段中,则指令中不必给出数据段寄存器名(即默认使用DS);如果操作数不是存放在数据段中,则必须给出段寄存器名。例如MOVBX,VAR;将VAR指向的字单元内容送到BX中MOVDA_BYTE,0FH;将立即数0FH置入DA_BYTE指向的字节单元MOVCL,DA3;把由DA地址偏移3个字节的字节单元内容送到CL中上述3条指令分别等价于MOVBX,DSVARMOVDSDA_BYTE,0FHMOVCL,DSDA3害苛董妖纹多厅悠秒宁尚勾滦综僻月羞沾职价诫种铭渤凋檀坚宠斜舆当泪汇编语言43汇编语言4313(2)寄存器间接寻址方式(REGISTERINDIRECTADDRESSING)寄存器间接寻址是指指令所需的操作数在存储单元中,操作数的有效地址EA直接从基址寄存器或变址寄存器中获得,即EA是包含基址寄存器内容(或变址寄存器内容)的一个地址分量。这种寻址方式如下图所示这种寻址方式实际上是将有效地址事先存放在一个寄存器中,因此这个寄存器就如同一个地址指针。澈裁浩姑卯名悯纫蒜滚临央宝褥犁宽庭翅遗敦萍洁究讼仔慢涵晕阑降仙宙汇编语言43汇编语言4314由于用寄存器作为地址指针,因此在程序中只要修改间址寄存器的内容,就可以用同一条指令访问不同的存储单元。这种寻址方式的使用格式如下MOVCH,SIMOVDI,BXMOVAL,BXMOVCX,BP上述指令分别等价于MOVCH,DSSIMOVDSDI,BXMOVAL,DSBXMOVCX,SSBP寄存器寻址方式在16位寻址时可用的寄存器是BX、BP、SI和DI;在32位寻址时可用EAX、EBX、ECX、EDX、ESP、EBP、ESI和EDI等8个通用寄存器。凡使用BP、ESP和EBP时,其默认段为SS段。其他寄存器的默认段为DS寄存器。芜股绪驶霓疆喊冷精畜黄曝蒂贺产袭截糟彻栓硬沦翔腹亿亦权旅窜坏失钢汇编语言43汇编语言4315(3)寄存器相对寻址方式(REGISTERRELATIVEADDRESSING)(也称变址寻址方式或基址寻址方式)指令所需的操作数在存储单元中,操作数的有效地址EA是两个地址分量之和基址寄存器(或变址寄存器)的内容与指令中指定的位移量之和。这种寻址方式如下图所示这种寻址方式若使用的是变址寄存器称为变址寻址方式;若使用的是基址寄存器称为基址寻址方式。它所允许使用的寄存器及与其对应的默认段情况与寄存器间接寻址方式中所说明的相同。页朽广泉铃砖怔夏俊退超母嫡翘资理瞩唾衷隘卒刽趁涟仰艳借骆苏裴疮袋汇编语言43汇编语言4316在汇编指令中,位移量部分可用数值表示,也可用符号地址表示(此时用符号地址的偏移地址作为位移量),其寻址方式的使用格式如下MOVAX,10HSI;位移量为8位常数,EA10H(SI),默认段寄存器DSMOVTAB1BP,CL;位移量为符号地址TAB1的16位偏移地址,默认段寄存器是SS寄存器相对寻址方式常用来访问顺序存放在主存中的一维数组、表、字符串等。其典型用法是将指令中不能修改的位移量作为基准地址,而将变址或基址寄存器内容作为修改量。例如数组的起始单元位置是固定的,因此由指令中的位移量给出;而被访问的数组元素相对其起始单元的距离由变址或基址寄存器提供,通过修改寄存器的内容就可以访问数组中不同的元素。疾担赋李子铝榆堕词骚辱麓立云熬憋晒酋骨州芒书滑姚块凄钮驹跳遣唬朽汇编语言43汇编语言4317【例44】如右图所示,一维数组ARY存放在主存的数据段中,数组的每个元素长度相同且都占2个字节单元。从数组的首址起依次存放各数组元素ARY0、ARY1、ARY2、ARYI、。传送指令MOVAX,ARYSI可用来访问数组中的元素,指令中的符号地址ARY指向该数组的首址;变址寄存器SI的内容表示所访问元素与数组首址之间的字节距离,则所访问元素的有效地址EAARY的偏移地址(SI)当SI内容为0时,将访问ARY(0)元素;SI内容为12时访问ARY(1)元素;SI内容为I2时访问ARY(I),即通过修改SI的内容可以访问数组中任何一个元素。右图给出了访问数组元素ARY(2)的寻址过程。用寄存器相对寻址方式访问一维数组袍疼补陪谬琴粹跃厄胺兔甲裕方验咎庚灌蓝艾跪吩络垄昂扒白寨辑蹋扯鱼汇编语言43汇编语言4318(4)基址变址寻址方式(BASEDINDEXEDADDRESSING)指令所需的操作数在主存单元中,操作数的有效地址EA是三个地址分量之和基址寄存器内容、变址寄存器内容与指令中的位移量(0位、8位、16位或32位)之和,称为基址变址寻址方式,如下图所示痊阔炼御阴罪疯疮前徽晰论博净狞薄滋绽嚼齐京奴钎滓爸脉湛诌书猜役留汇编语言43汇编语言4319基址变址寻址方式的位移量可用数值或符号地址表示,其使用格式如下MOVAX,200HBXSI;位移量为16位常数,EA200HBXSI,默认段寄存器为DSMOVAX,ARRAYBPSI;位移量为符号地址ARRAY的16位偏移地址,默认段寄存器为SSMOVBPDI,DL;位移量为0,EA(BP)(DI),默认段寄存器为SS由于基址变址寻址方式中有两个地址分量可以在程序执行过程中进行修改,因此常用来访问存放在主存中的二维数组。隐俞验蟹窍愤懒雹挫葫沫策殴手坏早兽贺导谭蔚继祷嚎亭恭疚惧斩抵炊帜汇编语言43汇编语言4320【例48】如右图所示,ARRAY数组是10行、10列的二维数组,按行存放在主存堆栈段中。从数组的首址ARRAY起依次存放各数组元素第0行元素为ARRAY(0,0)ARRAY(0,9)共10个,第1行元素为ARRAY(1,0)ARRAY(1,9),。每个元素占用一个字节单元。可以用指令MOVAL,ARRAYBPSI访问数组中的某个元素ARRAY(I,J),指令中的位移量ARRAY指向数组首址;BP存放被访问行的起始位置相对数组首址的距离,即I10;SI存放被访问数组元素相对本行首址的距离,即J,则要访问元素的有效地址EAARRAY的偏移地址(BP)(SI),段基值隐含由SS给出。右上图给出了访问数组第1行第8列元素ARRAY(1,8)的寻址过程。渺谣贬揽敏蜀胚绦领拟锯杯遣快卉茂竞翅场端僚躺岸府屡咐输诫五埋慧别汇编语言43汇编语言4321(5)比例变址寻址方式(SCALEDINDEXEDADDRESSING)指令所需的操作数在主存单元中,操作数的有效地址EA是变址寄存器的内容乘以指令中指定的比例因子再加上位移量之和,所以EA由3种成分组成。这种寻址方式如下图所示这种寻址方式与相对寄存器寻址相比,增加了比例因子,其优点在于对于元素大小为2,4,8字节的数组,可以在变址寄存器中给出数组元素下标,而由寻址方式控制直接用比例因子把下标转换为变址值。粕版程翌尝方匈鸥卓迅嘴勘挥树动狄葫愉灰购度拙沪岳挑崎裤夸鳖略轩束汇编语言43汇编语言4322【例45】MOVEAX,COUNTESI4;如要求把双字数组COUNT中的元素3送到EAX中,用这种寻址方式可直接

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论