900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > linux 汇编 变址寻址 【计组】偏移地址 段地址和寻址方式

linux 汇编 变址寻址 【计组】偏移地址 段地址和寻址方式

时间:2018-10-08 23:26:06

相关推荐

linux 汇编 变址寻址 【计组】偏移地址 段地址和寻址方式

一、逻辑地址和物理地址

物理地址可以理解成是某个存储单元的真正的地址,然而地址总线有20位,寄存器们只有16位,无法完全访问到呀。所以就想到一个办法,搞出一个逻辑地址,之后编程都使用逻辑地址。

写法为aaaa:bbbb

前者为段地址,后者为偏移地址。

物理地址=段地址左移一位+偏移地址。

16进制左移一位相当于2进制左移4位,于是就是16+4=20位了。

(但是据说逻辑地址不唯一,这个地方现在还不太理解,而且这样的话如何避免呢?以后补。)

二、偏移地址和段地址

其实就是把内存人为地分成了好几个段。每个段都有一堆存储单元。

偏移地址就是在这个段的基础上,具体的存储单元位置。

就比如一栋楼有好几个单元(段地址),一个人具体住在几层几号房间(偏移地址)。这样找一户人家就比把所有住户都排好队一个一个找容易多了。

(现在想到的问题是,一个段有多少存储单元?有没有一堆操作数跨越两个段的可能性?如何避免?以后补)

段地址存储在段寄存器中。4个段寄存器:CS DS SS ES

偏移地址则可以用很多方式来表示,接下来会在寻址方式里介绍。

三、寻址方式

什么是寻址方式?就是我需要把某个值交给某个寄存器(可以不只是通用寄存器吗)。有的值直接给出来,有的值具体是多少不知道但是储存在别的地方。所以汇编语言中就有不同的表示方式表示值的位置。然后CPU根据不同的表示方式去找那个值。就是所谓的“寻址”。【但是为什么要寻“址”呢,叫寻“值”方式才会更方便更容易理解吧→_→

(书上用了“操作数”这个词,不知道当初又是怎么翻译的,原因是啥,反正挺误导人啊,这到底是什么还不太清楚。以后补)

寻址方式主要分为三种:

立即寻址;寄存器寻址;存储器寻址

立即寻址

值直接给出来了。所以就直接把这个值交给寄存器就好了。

e.g. MOV AX,1234H

电脑很聪明的所以如果立即数是8位比如12H,而寄存器是16位,会自动把8位看成16位存成0012H。但是立即数位数比寄存器多就不行了,因为它一定哪个也不想放弃吧【笑】

寄存器寻址

直译就好。值储存在另外一个寄存器了。所以就把值直接丢过去就好了。

E.G. MOV AX,BX

不用访问存储器,因为寄存器在CPU里,存储器是一个跟cpu平行的一个硬件部分,在cpu外面。所以这方法执行速度很快。

另外可以在一个寄存器内部传递

e.g. MOV AH,AL

存储器寻址

这个有点麻烦了就。指令明明需要在cpu内执行,然后需要的值在存储器里。这又要引入一些新的名词。

我们的偏移地址(有效地址)=基址+变址+位移量

基址寄存器只有BX BP;变址寄存器只有SI DI

位移量也可以为负值!

要找的值在存储器里,具体在哪明显是个物理地址,然而cpu没法直接通过物理地址找到目标,只能通过逻辑地址找了。

段地址都在段寄存器里,但是偏移地址又有不同的给出方法。

如果偏移地址直接给出,我们称为

直接寻址

MOV AX,[1234H];之所以用[]我想就是为了和立即寻址做区分。

注意此情况段地址默认储存在DS中。

----------------------------------------------------------

如果偏移地址存储在另外一个寄存器里,称为

寄存器间接寻址

MOV AX,[BX]

注:如果后面的这个寄存器是BP,那么默认的段寄存器是SS;否则仍是DS

----------------------------------------------------------

如果偏移地址一部分储存在寄存器里(基址或变址),另一部分直接表示(位移量),称为

寄存器相对寻址

可以这样理解,一个人知道某人具体住几单元(基址或变址),然后另一人则知道此人具体住哪间房,两人所知道的合起来就可以确定某人的具体地址了。位移量可以取负,所以想象成这栋楼地上地下都能住人吧。

MOV AX,[BX+1000H]==MOV AX,[BX]1000H

注:如果后面的这个寄存器是BP,那么默认的段寄存器是SS;否则仍是DS

----------------------------------------------------------

如果偏移地址储存在两个寄存器里,就是基址和变址的和了。称为

基址变址寻址

MOV AX,[BX][SI];or MOV AX,[BX+SI]

注:如果后面的这个寄存器是BP,那么默认的段寄存器是SS;否则仍是DS

----------------------------------------------------------

相对基址变址寻址

除了基址、变址,又加上位移量,构成我们的偏移地址。

MOV AX,[BX+SI+1000H]== MOV AX,1000H[BX][SI]

以上是8086的几种寻址方式,386以上就是在不同的位置乘上比例因子(1、2、4、8)

还没弄明白的记得之后补呀!!!!!

困死明天还有早课_(:зゝ∠)_

/11/20凌晨2:09

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。