8086/8088 寻址方式
寻址方式是最常考的内容,考察的形式有选择、填空、计算等多种方式,不管考察方式如何,步骤是一定的:
- 判断寻址类型
- 若涉及存储器,计算地址 要清楚地了解寻址方式,需要从CPU的一些结构来看。同样还是将CPU比作一个工厂,之前说过寄存器就是储物间。 储物间是设在工厂中的,是为了有需要的工件可以直接拿到,提高效率。寄存器也是如此。那么地址,顾名思义,是要去一个远点的地方才需要地址的。在工厂中的储物间里拿东西你难道还需要问上司“劳驾,储物间在南北东西哪个地方您嘞?”所以寄存器寻址不需要计算地址,要处理的工件就在工厂里。
那么有的时候,上司会从办公室里下基层,到工厂来,不是带水果补品直接带来一批工件说“老刘啊,把这些玩意处理了吧!”上司亲手把东西给你了你还不得累死累活地立即干?这叫做立即寻址,鬼知道这孙子从哪弄来这些玩意,自然也不需要计算地址。他又不是在工厂里呆着的,领导干事慢慢悠悠的,自然速度是不及上面从储物间里拿东西最快的了。因此,直接寻址的寻址速度次于寄存器寻址。
接下来就是最容易考的,也是比较复杂的涉及存储器的寻址。存储器,可以理解为工厂的仓库,不常用的或是数量众多的工件自然要放在仓库中排列好。存储器也是,数据放在存储器里,但是存储器辣么大,我不能把所有的工件都搬过来吧。所以只需有个地址,去哪个仓库哪个抽屉里拿工件。那么现在直接告诉你,去2010H号抽屉拿工件,这叫做直接寻址。需要注意的是,涉及存储器的寻址一定有方括号[],方括号括住的是地址,表示的是这个地址的数据。不能说“老刘啊,去250号抽屉把工件拿过来”结果你把抽屉拿过来了。这是一个充要条件,即出现方括号就是涉及存储器的寻址,没有出现方括号就是立即寻址或寄存器寻址等等。
有的时候还未必知道哪个工件在哪里,那么时候就要通过别人问出地址来,再去仓库里拿工件,这叫做寄存器间接寻址。找谁呢?前面介绍寄存器的时候有3个“址”字辈的寄存器,分别是“SI, DI, BX(潜伏在数据寄存器中家伙)”,他们在DS仓库中干过,所以你问他们的时候得留神。他们说在第2010H号抽屉里指的是DS这个仓库。因为他们在那里干过所以习惯上不会把仓库的编号告诉你,DS仓库的编号是3000H,所以要根据仓库的编号和抽屉的编号共同确定位置才能找到要的工件。那么有不同的仓库编号就会重合,我要想让所有的工件有一个唯一的编号怎么办呢?那就给仓库的编号乘以16(切记,是乘以十进制的16向左移位,或者是乘以十六进制的10H)再加上抽屉编号就可以了。那么在物理世界中确定了这唯一的地址,这就叫做物理地址,而抽屉号可能会重复叫做逻辑地址(也叫偏移地址)。
别忘了,除了“址”字辈的老师傅还有“指手画脚”的“指”字辈老师傅,他们是“BP、SP”,因为毛病不少,对别人指手画脚的他们自己在管理仓库时乱堆放,故而他们工作的仓库被叫做SS(堆栈段)。接下来问地址和上面是相同的,只不过算的时候要算SS仓库的编号。
有的时候老师傅就是有意思,他该告诉的都告诉你了,还要画蛇添足。比如说到2010H号再加300H的抽屉去拿工件吧。那么这个时候耍了个聪明出个算术题叫做寄存器相对寻址。
注意,下面的这种形式也叫做相对寻址。VAL的值题目中会给出的,直接相加即可。
还有的时候一个老师傅记住不,需要两个人相互印证。这里时候出现了两个方括号(单纯靠括号数判断是不行的),这叫做基址+变址寻址、也叫基变寻址(满满的基情啊)。这两个寄存器也要有讲究,像台上说相声一样,一个胖(Big),一个瘦(Slim),所以是[BX][SI]、[BP][SI]等形式的。
还有的时候老师傅记不住,需要两个人一起印证,还要逗逗你画蛇添足,比如[BX+SI+300H],这叫做基变相对寻址。当然,也是选择或填空题最爱考的一种情况。
最后,老师傅什么的都滚犊咋!(Orz...实在编不下去)