首页 汇编语言入门 七

汇编语言入门 七

举报
开通vip

汇编语言入门 七汇编语言入门 七 刚刚学习了8086/8088汇编语言,发现寻址方式非常重要,于是做了一个小总结,请各位笑纳。 概念: 1.指令集:cpu能够执行的指令的集合。 2.指令:cpu所能够执行的操作。 3.操作数:参加指令运算的数据。 4.寻址方式:在指令中得到操作数的方式。 现在就重点讨论寻址方式,说白了也就是cpu怎么样从指令中得到操作数的问题。另外再强调一点操作数还分种类: 1)数据操作数:全都是在指令当中参加操作的数据。 1.立即操作数:它在指令中直接给出。 2.寄存器操作数:它被放到寄存器中...

汇编语言入门 七
汇编语言入门 七 刚刚学习了8086/8088汇编语言,发现寻址方式非常重要,于是做了一个小总结,请各位笑纳。 概念: 1.指令集:cpu能够执行的指令的集合。 2.指令:cpu所能够执行的操作。 3.操作数:参加指令运算的数据。 4.寻址方式:在指令中得到操作数的方式。 现在就重点讨论寻址方式,说白了也就是cpu怎么样从指令中得到操作数的问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 。另外再强调一点操作数还分种类: 1)数据操作数:全都是在指令当中参加操作的数据。 1.立即操作数:它在指令中直接给出。 2.寄存器操作数:它被放到寄存器中。 3.存储器操作数:当然在存储器也就是内存中。 4.i/o操作数:它在你给出的i/o端口中。 2)转移地址操作数:在指令当中不是参加运算或被处理的数据了,而是转移地址。 还可以按照下面分类方式: 1)源操作数src 2)目的操作数dst 源操作数都是指令当中的第2个操作数,在执行完指令后操作数不变。而目的操作数是指令当中的第1个操作数,在执行完操作指令后被新的数据替代。 我们就围绕这几种操作数,也就是操作数所在的位置展开讨论。 先说数据操作数,它分3大类共7种。 1)立即数寻址方式:是针对立即操作数的寻址方式。在指令当中直接给出,它根本就不用寻址。 例1:movax,1234h mov[bx],5678h 在这里1234h和5678h都是立即操作数,在指令当中直接给出。 2)寄存器寻址方式:是针对寄存器操作数的寻址方式,它在寄存器中我们就用这中方式来找到它。 例2:movbx,ax movbp,[si] 在这里ax,bx,ds都算是寄存器寻址,例1中的ax也是寄存器寻址方式。 3)存储器寻址方式:针对在内存中的数据(存储器操作数)都用这种方式来寻找,一共有5种(这是我自己的说法,便于记忆)。 不得不提及以下的概念:由于8086/8088的字长是16bit,能够直接寻址2的16次方也就是64kb,而地址总线是20bit,能够直接寻址2的20次方也就是1M空间,所以把内存分为若干个段,每个段最小16byte(被称为小节),最大64kb,它们之间可以相互重叠,这样一来内存就被分成以16byte为单元的64k小节,cpu就以1小节为单位寻址:在段寄存器中给出段地址(16bit),在指令当中给出段内偏移地址(16bit),然后把段地址左移4bit再与偏移地址求和就得到数据在内存当中的实际物理地址了,因而可以找到数据。 1.存储器直接寻址方式:在指令当中以[地址]的方式直接给出数据所在内存段的偏移地址。 例3:movax,es:[1234h] movdx,VALUE movdx,[VALUE] 在这里[1234h]和VALUE就是在指令中直接给出的数据所在内存段的偏移地址(16bit)。 VALUE是符号地址,是用伪指令来定义的,它代表一个在内存中的数据(也就是它的名字)。es:是段前缀符,用来指出段地址,在这之前应该将段地址添入段中,本例中是es,默认是ds,也就是不需给出。应该注意 [地址]与立即寻址的区别,在直接给出的数据两边加表示存储器直接寻址,以区别立即寻址。另外VALUE=[VALUE]。 2.寄存器间接寻址:不是在指令中直接给出数据在内存中的偏移地址,而是把偏移地址放到了寄存器中。 例4:movax,[bx] 这里[bx]就是寄存器间接寻址,bx中应方入段内偏移地址。其中:若使用bx,si,di默认段地址为ds,若使用bp则默认段地址为ss,并且允许段跨越,也就是加段前缀符。注意:在寄存器两边加 以与寄存器寻址区别。 3.寄存器间接相对寻址:偏移地址是bx,bp,si,di中的内容再与一个8bit或16bit的位移量之和。 例5:movax,[bx]+12h movax,[si]+5678h movax,[bp]+1234h 在这里[bx]+12h,[si]+5678h,[bp]+1234h都是寄存器间接相对寻址。12h是8bit位移量,1234h和5678h是16bit位移量。若使用bx,si,di则默认段寄存器是ds,若使用bp则默认段寄存器是ss,并且允许段跨越。 4.基址变址寻址:偏移地址是一个基址寄存器和一个变址寄存器内容的和,既:bx或bp中的一个与si或di中的一个求和而得到。 例6:movax,[bx+si] movax,[bp+di] 上面[bx+si]和[bp+di]都是基址变址寻址。若使用bx做基址寄存器则默认段地址为ds,若使用bp为基址寄存器则默认段为ss,允许段跨越。 5.基址变址相对寻址:偏移量是一个基址寄存器一个变址寄存器只和再与一个8bit或一个16bit位移量只和得到。 例7:movax,[bx+si]+12h movax,[bp+di]+1234h [bx+si]+12h和[bp+di]+1234h就是基址变址相对寻址。若使用bx做基址寄存器则默认段是ds,若使用bp做基址寄存器则默认段为ss。允许段跨越。 下面是转移地址操作数的寻址方式: 1)段内直接转移 1.段内直接短转移:cs(代码段)内容不变,而ip(指令指针寄存器)内容由当前ip内容+(-127~127),在指令中直接给出。 例8:jmpshortSHORT_NEW_ADDR 其中,short是段内短转移的操作符,用以指出是转移到当前位置前后不超过?127字节的地方。而NEW_ADDR是要转移到的符号地址,它的位置应该在当前ip指针所在偏移地址不超过 ?127的地方。否则语法出错。 2.段内直接近转移:cs内容不变,而ip内容由当前ip内容+(-32767~32767),在指令中直接给出。 例9:jmpnearptrNEAR_NEW_ADDR 其中nearptr是段内近转移的操作符,用以指出转移到当前位置前后不超过?32767的地方。NEAR_NEW_ADDR是要转移到的符号地址。 2)段内间接转移:cs的内容不变,而ip的内容放在寄存器中或者存储器中给出。 例10:jmpbx jmpwordptr[bx]+1234h 这种寻址方式是在寄存器或存储器中找到要转移到的地址,而地址是16bit的,因而寄存器必须为16bit,如:bx,我们用word ptr来指定存储器单元也是16bit的。注意:它是间接的给出,只能使用类似于数据操作数中的 就在上面)。 除立即寻址以外的6种寻址方式( 3)段间直接寻址:cs和ip的内容全都变化,由指令当中直接给出要转移到的某一个段内的某一个偏移地址处。 例11:jmp1234h:5678h jmpfarptrNEW_ADDR 1234h送入cs中作为新的段地址,5678h送入ip中作为新的偏移地址。far ptr是段间直接转移操作符,NEW_ADDR是另外一个段内的偏移地址,在这个指令中把NEW_ADDR的段地址送入cs(不用你给出),把它的段内偏移地址送入ip中作为新的偏移地址。 4)段间间接寻址:cs和ip的内容全变化,由指令当中给出的一个4字节连续存储单元,其中低2字节送入ip作为偏移地址,高2字节送入cs作为段地址。 例12:jmpdwordptr[bx][si]+1234h jmpdwordptr[1234h] jmpdwordptr[si] dword ptr是双字(4个字节连续存储单元)操作符,用来指出下面的存储单元是4个字节的。由于它是4个字节的,所以只能使用类似于数据操作数中的存储器寻址方式(共5种,还记得吗?)。 另外作为特殊的寻址方式还有三种:I/O寻址,串寻址,隐含寻址。它们都分别针对I/O指令,串操作指令以及无操作数的指令,而且都比较简单,读者自行总结。 到此为止 说明 关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书 了8086/8088cpu中的所有寻址方式,我这里只是个总结,具 体的细节还要大家自己钻研课本,才能理解。
本文档为【汇编语言入门 七】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_995397
暂无简介~
格式:doc
大小:18KB
软件:Word
页数:5
分类:生活休闲
上传时间:2017-10-19
浏览量:22