首页
社区
课程
招聘
[旧帖] [原创]02寻址方式与指令系统 0.00雪花
发表于: 2012-1-15 11:23 1216

[旧帖] [原创]02寻址方式与指令系统 0.00雪花

2012-1-15 11:23
1216
内存储器的地址
物理地址 每个存储单元的20位实际地址,有唯一性,访问主存时必须用物理地址
逻辑地址 每个存储单元的地址用二部分表示:段基址(段首地址的高16位)和偏移量(段内某单元相对段首地址的地址差)
物理地址=段基址*16+偏移量
书写形式:段基址:偏移量
段寄存器中存放的是相应段的段基址值
BX、SP、……IP寄存器中存放的是偏移量
当我们把整个一个内存储分成段以后,那么怎么来表示这个存储器的地址呢,这里边就,实际上就引入了两个地址的概念,第一个地址的概念就是说物理地址,物理地址实际上就是指的,每一个存储单元的20位的实际的地址,每一个存储单元都有一个地址的值,那么这个20位的物理地址的值是唯一。当我们去访问这个存储器的时候,也就是说我们要对它进行读写的时候,实际上我们是通过这个物理地址来进行读写的。相应的另外一个地址我们把它叫做逻辑地址,也就是说我们把每一个存储单元的地址,我们可以用两个部分来表示啦,第一部分就是叫做段基址,段基址的值,实际上就是这个段的第一个存储单元的高16位部分的值,实际上我们把它简称为:段首地址的高16位。那么另外一部分的话呢,我们把它叫做偏移量,那么这个偏移量就是在,这个段内某一个存储单元,它相当于段的首地址这之间的一个地址的差值。也就是说每一个存储单元,我们来表示它地址的时候,我们可以用逻辑地址的方法来表示,也就是说用段基址和偏移量这两部分合起来,来表示。那么我们写成这样的一个形式,段基址写在前面,偏移量写在后面,中间加一个冒号。物理地址跟逻辑地址之间,实际上就存在着这样的一个关系,也就是说,段基址的值乘上16,然后再加上这个偏移量,实际上就是它的物理地址。那么我们前面提到的段寄存器中间,它存放的实际上就是相应的段的段基址的值。比如说代码段,代码段CS寄存器中间,它存放的就是代码段的段基址值。也就是说,系统分配给代码段的段首址的,它的高16位部分。那么我们前面提到的象这些基址寄存器、还有一些变址寄存器、还有指令指针寄存器,这些寄存器中间存放的实际上就是地址的偏移量。实际上就是存放的是,在这个相应的段内,这个单元,某一个单元它相对与段首址的一个地址的差值。这是个相对值,那么我们可以用这个示意图来表示。

比如说这是我们某一个段,它的第一个存储单元的物理地址的值是10000H,这是20位的物理地址,那么因为这个单元是段的第一个存储单元,所以这个地址的高16位部分,高16位部分那也就是1000H,这个值,这个值就是它的段基址值。那么在这个段内,比如说我们有某一个存储单元,这个存储单元的物理地址是1000AH,这是物理地址,是在这个段中间的某一个存储单元,那么这个物理地址我可以,怎么来表示呢,我可以用逻辑地址的形式来表示,也就是说我用两部分,第一部分就是段基址值,段基址值那就是1000H,那么第二部分的话呢就是偏移量,偏移量是指的这个存储单元(1000AH),它相当于段的第一个存储单元(10000H),这两个单元之间的一个地址值的差异,差值相对与,实际上就是说,这个存储单元(1000AH)相对与段首址的(10000H)一个相对的位移量。那么这个偏移量的值,实际上就是000AH,那么我们就可以表示成逻辑地址=1000:000A,前面的1000是段首址,后面的000A就是它的偏移量,这两者之间用冒号把它隔开。这样的话,也就是说段基址的值(1000)是16位的,而偏移量(000A)也是16位的。那么段基址(1000)和偏移量(000A),这两个数据我们都可以放到相应的寄存器中间。段基址值(1000)我们放到相应的段寄存器中间,而这个偏移量(000A)可以放到某一个指定的寄存器中间,那么用这样的一种逻辑地址表示的方法,我们就解决了,就是16位的寄存器用来表示20位的物理地址的这样的一个问题。
物理地址的形成

那么实际上,也就是说当我们计算物理地址的时候,我们可以用这样一个示意图来表示,我们前面提到了,也就是说,段基址乘上16然后加上这个相应的偏移量,那么就得物理地址。其实做这个乘法,乘16,其实是,如果说我们把这个数据,都用16进制来表示的话,那么这样的一个运算是,非常方便的。因为我们知道,乘2相当于是左移一位,所以乘16的话,相当于就是说,把这个段基址的值左移4位,那么后面就是添上4个二进制的的0,或者说添上一个16进制的0,然后把这个段基址值再加上这个偏移量,我们就可以得到了20位的物理地址。那么这个物理地址的计算的话呢,也是要求大家能够学会的。因为实际上当我们执行指令的时候,如果说操作数在存储器中间,那么实际上我们要通过物理地址,才能够去访问到这个操作数,那么这里面就涉及到一个物理地址怎么计算的问题。
堆栈
堆栈是内存中“先入后出”最大空间为64KB的存储区域,栈底地址大于栈顶地址
栈区最高地址单元的前一个单元为栈底,最后进栈数据所对应的地址单元为栈顶
SS指向栈的起始单元
SP寄存器动态跟踪栈顶位置,初始化时SP的值为堆栈的长度,即指向栈底+2单元
将数据送入堆栈叫压栈,从栈中取出数据叫弹出,均以字为单位
那么前面我们介绍了存储器的结构,下面的话呢我们再来介绍栈的结构。栈的话呢我们刚才提到了,实际上它也是在存储器中间的一块区域,那么栈段的话呢,同样的在我们这儿最大的长度应该是不超过64KB,栈是一种“先入后出”的这样的一种数据结构,也就是说先放到栈中间去的数据,那么从栈中间取出来的时候,那么应该是最后才能够取出来,当然使用栈的时候,它有两种定义的方法,在我们这儿使用的时候,我们采用的是一种栈底的地址大于栈顶的地址的这样的一种方法。也就是说,在我们这个栈区中间,栈底的话是在,最高地址单元的前一个单元的,也就是说栈底的地址是最高的,那么在初始的时候的话呢,那应该是初始化的时候,实际上就是说,我们把SP的值,设成为栈的长度,实际上也就是说,指向栈底加2这个单元,那么栈顶的话呢,栈顶就是指的,就是说指,指放到栈中间去的数据,就是最后放到栈中间去的那个数据,所对应的那个单元的地址,在一开始的时候,我们定义了一个栈,那么段寄存器SS中间放的内容,它就应该是栈的这个起始单元的高16位的值,因为这是个段寄存器SS,实际上就是放的栈段的,段基址的值。对于栈来说,我们常用的操作就是两种,一种的话呢就是,把数据放到栈中间去,那么这样的一种操作,我们把它叫做压栈,或者叫入栈。另外一种操作就是从栈顶把数据取出来,这个地方我们说从栈顶取出数据,那实际上指的就是从栈顶取出数据,那么这样的一种操作我们把它叫做弹出,或者我们有的时候把它叫做出栈操作。不管是压栈也好还是弹出也好,这两种操作它都是以字为单位来进行的,也就是说涉及到栈的操作,你把数据放到栈中间去,或者从栈中间取出数据,那么都一定是以16位为单位来进行的,那么这一点的话呢希望大家一定要能够注意。
那么这是一个栈的示意图

当初始化的时候,也就是说我们一开始的时候,定义一个栈的时候,假如说这是个栈段,那么这是栈的
第一个存储单元,它的物理地址值是20000H,实际上这个时候,段寄存器SS中间的内容它就应该是,这个储单元地址的高16位部分,那实际上就是20000H。那么假如说这是栈底,这是栈底,也就是说这是栈的最后一个单元,因为它是以16位的形式来访问的,所以它的最后一个单元地址,假如说是2FFFFH的话,那么栈底的话应该指的是前面一个,那么初始化的时候,栈指针SP,也就是说寄存器SP,它中间的内容是什么呢,它应该是指的是栈底加2这个单元,也就是指向的应该是这个单元即2FFFFH下面一个单元。那么右边这个图的话是表示,假如说我现在的话,在栈中间已经压入了两个数据,压入的第一个数据是4020H,第二个数据是1000H,那么这个时候栈指针,也就是说SP,SP它就指向了栈顶,也就是说指向的是当前,就是说你最后一个放进去的这个数据1000H,它指向的应该是这个存储单元。SP指针它始终指向的是栈顶,也就是说这个寄存器中间存放的内容,那么它始终是栈顶的这个存储单元的物理地址,实际上就是它存放的应该是栈顶的这个存储单元的一个偏移量,那么这就是对栈进行的这个操作,那么如果说大家对这个栈的概念不是很清楚的话,那么可以去看数据结构的有关的书,我们这儿的话呢就是对栈仅仅是一个使用的这么一个问题,就学会,只要会怎么来定义一个栈,我们会把数据放到一个栈中间去,从栈中间取出数据就行了。那么第二章的最后一部分我们简单的介绍一下输入输出结构。
                                       I/O结构
端口――――――系统与外部环境连接的装置
8086可访问256个8位的端口,每个端口由一个地址(又称端口号)确定
两个地址相邻的8位端口可作为16位端口使用
I/O端口类似存储器,但不分段,地址用16位的二进制数表示
当我们进行编程的时候,那么也就是说我们总归是要对外部环境的话呢,要有一个跟它进行信息的交换,所以在8086中间,我们把系统跟外部环境连接的这样一个装置的话呢,我们称它为端口。这是一个名词。那么8086的话呢,我们可以访问256个8位的端口,也就是它一共可以访问256个端口,每个端口的话呢是8位的,同样的某一个端口,它也有一个地址来确定,那么这个地址呢,我们通常把它称为端口号,实际上就是我们通过端口号来访问这个端口。当然我们也可以,以16位的形式来访问这个端口,那么在这个时候,实际上就是把两个地址相邻的这样一个8位端口,我们就作为一个16位端口来使用。那么这样的一种使用方法的话呢,跟我们对存储器的使用,也就是使用相邻的,两个地址相邻的存储单元,这样的一种使用方法是一样的,所以实际上也就是说,在8086中间输入输出的端口,其实是跟存储器的话呢是很类似的,它的区别就是说它不分段,也就是说它用不着分段,因为它端口的大小范围是有限的,那么对于端口的地址的话呢,我们同样的用二进制数来表示,那么用16位的二进制数来表示,书写的时候,同样的常常用16进制来书写,那么后面我们会介绍,就8086有专门的指令,来实现这样的一个输入输出,也就是说使用端口来跟外部环境实现输入输出这样的一个问题。那么这部分的内容的话呢,第二章的全部内容的话呢我们就讲完了。下面的话呢我们给大家一个思考题,这个思考题的话呢,实际上就是把我们在这一章中间涉及到的一些基本的概念或者说一些基本的名词,给大家的话呢,能够的话呢,作一个回忆。
思考题:
请将下列左边的项于右边的解释联系起来:
(1)状态标志           A.唯一代表存储空间中每个字节单元的地址
(2)段寄存器           B.指示下一条要执行的指令的地址
(3)IP                 C.以后进先出方式工作的存储空间
(4)物理地址           D.保存当前栈顶地址的寄存器
(5)栈                 E.记录指令操作结果的状态信息
(6)SP                 F.保存各逻辑段的起始地址的寄存器
第三章
                   寻址方式与指令系统
有效地址――――――操作数所在单元的地址
寻址方式――――――产生有效地址的方法
8086的寻址方式有
1、立即寻址
2、直接寻址
3、寄存器寻址
4、寄存器间接寻址
5、基址寻址
6、变址寻址
7、基址变址寻址
8、相对基址变址寻址
这一章是我们整个这门课程的一个重点,我们要化很多时间,来给大家详细的介绍,尤其是指令系统,因为我们用汇编语言编程,那么首先我们要对8086提供给我们的所有的指令,要能够有个了解。这是一个基础,所以我们在这部分学习的时候,希望大家能够多化点时间,把每一条指令的功能,都能够搞清楚。在介绍指令系统之前,我们首先要给大家介绍寻址方式的概念,那么什么叫做寻址方式呢。我们先来介绍有效地址的概念,有效地址是指的,操作数所在单元的地址。在一般情况下操作数都是存放在存储器中间的,当然也有些特殊情况,我们讲一般情况,操作数都存放在存储器中间,那么如果说,我们执行指令的时候,我们要取这个操作数,这时候我们就要访问这个存储器,那么我们知道,对存储器访问的时候,我们是通过存储器的地址来访问的,所以我们把操作数,它所在的存储单元的那个地址,我们把它叫做有效地址。那么产生有效地址的方法,我们就把它叫做寻址方式。所以我们这儿说的寻址方式,实际上就是怎么来得到有效地址的这样的一种方式,如果说我们得到了有效地址,那实际上,也就是说我们知道了这个操作数所在单元的地址,操作数就很容易就得到了,所以我们在这儿首先给大家介绍8086的各种寻址方式,那么8086到底有那些寻址方式呢?
8086提供的寻址方式有下面8种。第一种叫做立即寻址,第二种叫直接寻址,第三种叫寄存器寻址,第四种叫寄存器间接寻址,第五种叫基址寻址,第六种叫变址寻址,第七种叫基址变址寻址,第八种叫相对基址变址寻址。这个寻址方式的名称,可能在不同的教材上,会有一些不同的提法,有的教材上面不是按照这样的8种方式来分的。那么因为我们这本上面是按照这8种形式来介绍的,所以我们的话呢还是跟教材一致,不过希望大家在看其它教科书的时候,参考其它教材能够注意到,其实你只要搞清楚,每一种寻址方式,它是怎么来得到有效地址的方法的话,其实名称到底叫什么,也就不是重要的了,那么下面我们就按照这样的顺序,逐个逐个的给大家介绍。
1、        立即寻址
操作数直接放在指令中,紧跟在操作码之后
机器码存放形式如下:

首先第一种方式叫做立即寻址,立即寻址方式,它是这样的,就是把这个操作数直接的放到指令中间去了,那么放到指令中间去的话,是怎么放的呢,它是放在这个操作码的后面,比如说我们上面给出了这样的一种存放的形式,这是代码段中间的一部分,这个字节(OP)中间存放的是操作码,好紧挨着这个操作码的下一个字节中间(D8)存放的就是操作数,当然这种情况下操作数是8位的,它占一个字节。那么如果说操作数是16位的,它可以占两个字节,在存放的时候就是采用这样的一种方式了,同样的这个字节(OP)中间存放的是操作码,那么紧挨着操作码的下面的两个字节,它存放的就是操作数,这个操作数是16位的,所以它的高位部分,也就是说高8位部分,和低8位部分,就分别的占这两个字节。那么换句话说,也就是说,在这种寻址方式中间,当我把这条指令取出来,或者是这种情况,当我把这条指令取出来以后,那么实际上操作数也已经得到了。也就是说,我不再需要去做其它的什么操作,我马上就得到了操作数。那么就可以来执行指定的操作了。那么下面我们来举个例子说明一下。
【例3-1-1】立即寻址示例
MOV AH,-40  ;-40-->AH
MOV AH,0D8H
MOV AX,-40  ;0FFD8H-->AX
这是一条指令MOV AH,-40  ;-40-->AH  因为我们指令系统还没介绍,但是我们要介绍寻址方式,那么我们只能通过某一个指令来介绍,我们这儿的话,下面我们都通过MOV指令来介绍,MOV指令是一条数据传输指令,那么数据传输指令,顾名思义的话,也就是说它完成的操作,是把数据进行传送。比如说我们看这条指令MOV AH,-40 ,这条指令MOV,实际上就是操作码部分,就是这个指令(OP)操作码部分,它表明的是这条指令它执行的到底是一个什么样的操作。那么MOV指令它的格式的话呢,它是有两个操作数,这个操作数AH,我们把它叫做目的操作数。这个操作数-40,我们把它叫做源操作数。那么MOV指令实现的功能,就是把源操作数传输到目的操作数中间去。在这儿的话,我们看源操作数这个位置,源操作数位置上面我们给出的是一个-40,这样的一个数据。那么在这条指令中间MOV AH,-40,源操作数-40这种寻址方式,就是我们这儿说的立即寻址方式。其实说的更加透彻一点的话,实际上也就是说,在源操作数这个位置上面我们给出的就是一个常量。或者说给出的是一个立即数。那么它执行的功能的话,就是把-40这个数送到寄存器AH中间。AH是个寄存器,就是累加器AX的高8位部分。大家还记得不记得,我们前面介绍寄存器的时候,曾经给大家介绍过。在这儿-40,指的是十进制数-40。啊十进制数的-40,我们来看下面一条MOV指令,在下面这条MOV指令中间MOV AH,0D8H,跟刚才的MOV AH,-40这条指令有什么区别呢,区别就是这个源操作数我们用了一个0D8H来表示,也就是说在这儿我们用的是16进制数来表示的。后面加了一个H,就表明这个数是用16进制来表示的。那么前面这个0,啊那么前面这个0,是为了区分16进制的常量还是一个标识符。因为我们知道16进制数表示的时候,我们可以用的符号是0-9,还有A-F这样的一些字母。那么如果说16进制数的第一个字是A-F的话,比如说在这个例子中间,它是用的是D8H,那么为了区分就是说,不让大家混摇D8H,你可能用来表示的是一个16进制的数就是D8H,也可能是标识符D8H,因为标识符是字母开头的一串字母数字。所以为了明确期间,在16进制数表示的时候,如果说是A-F打头的,那么我们前面加一个0。以示区别,表明这个数是个16进制的数。好那么这条MOV AH,0D8H指令的话呢,其实还是一样的是吧,也就是它把这个0D8H,这个16进制的D8H传送到寄存器AH中间。其实-40,十进制的-40假如说我们用二进制来表示的话,那么书写成16进制的话其实就是D8H,所以这条指令MOV AH,-40跟这条指令MOV AH,0D8H完全是一样的。
下面我们再来看第三条指令MOV AX,-40, 第三条指令我们刚才跟这条指令MOV AH,-40有什么区别呢?我们把目的操作数AH改成了AX,那也就是说前面两条指令我们传送时候,我们传送的是8位数据,而在这条指令MOV AX,-40中间,我们传送的应该是16位数据。也就是说我们把-40,我们把它看成是一个16位的数据,把它传送到累加器AX中间去,AX是16位的。那么当然-40这个十进制的-40,我用二进制表示的时候,8位就已经可以表示了,那么如果我要用16位来表示,应该怎么表示呢,因为这个数是负的,所以我应该高位部分按照符号位把它扩展,那么用16进制表示的话,就应该是FFD8H,所以这条指令执行的结果应该是16进制的FFD8H传送到累加器AX中间去。那么在这个例子中间,源操作数我们给出的都是立即寻址方式,实际上,也就是说我们直接的把操作数本身就放到了指令中间,这是第一种寻址方式。
2、        寄存器寻址
操作数存放在某个寄存器中,指令指定寄存器号

好下面我们来看第二种寻址方式,第二种寻址方式叫做寄存器寻址方式。寄存器寻址方式,它是把操作数存放在某个寄存器中间,那么指令中间的话呢,我就给出的是指定这个寄存器的号。也就是说采用这样的一种格式,指令中间我指定某一个寄存器号,那么根据这个寄存器号,实际上它就表示在某一个寄存器中间,指定的某个寄存器中间存放的是操作数。那么我们知道寄存器的话,它都是在CPU中间的。所以实际上当把这条指令取出来以后。那么操作数的话呢,我只要到相应的指定的寄存器中间去取,就可以了。同样的跟立即寻址方式一样,它用不着去访问存储器。所以寄存器寻址方式和立即寻址方式,这两种寻址方式应该说运算速度都是最快的。那么下面我们同样的来看例子。
【例3-1-2】寄存器寻址示例
     MOV AH,BL          ;(BL)-->AH
     MOV SI,AX           ;(AX)-->SI
     MOV VALUE,AX      ;(AX)--> VALUE单元
     说明:立即和寄存器寻址方式不需要访问存储器即可得到操作数,速度快
我们还是以MOV指令为例。我们还是来看源操作数。在这三条MOV指令中间,这个源操作数的部分,那么我们使用的都是某一个寄存器。比如说第一条指令中间,MOV AH,BL我们使用的是BL。BL寄存器它是BX这个寄存器的低8位部分,我们用BL来表示。那么这条MOV指令MOV AH,BL,如果执行的话,它就是把寄存器BL中间存放的数据,传送到AH寄存器中间。因为目的操作数是AH。那么这条MOV指令MOV AH,BL实现的是一个8位数据的传送。那么第二条指令MOV SI,AX源操作数是AX。所以它执行的话就是把AX中间,也就是说累加器中间的16位的数据传送到寄存器SI中间去。那么它传送的应该是16位的数据。好同样的下面的这条指令MOV VALUE,AX,那么它传送的也是16位的数据。它是把寄存器AX中间的内容传送到了某一个存储单元VALUE中间去。
那么立即寻址方式和寄存器寻址方式,我们刚才讲到了它不需要访问存储器就可以得到操作数了。所以这两种寻址方式速度是比较快的。当然因为我们寄存器的数目是有限的,所以我们不可能把操作数都存放在寄存器中间。在大多数的情况下操作数还是在存储器中间。所以下面我们来介绍其它的寻址方式。那么下面介绍其它的寻址方式,那都是操作数在存储器中间。
3、        直接寻址方式
   操作数地址的偏移量(有效地址)在指令中
   机器码表示如下:

物理地址=指定段的段基址*16+偏移量
系统默认,操作数在数据段
下面我们来看直接寻址方式,直接寻址方式它是把操作数地址的偏移量,实际上,也就是说我们刚才讲的有效地址,放在了指令中间。换句话说在指令中间它存放的实际上就是这个操作数的地址。那么我们这儿给的地址那肯定是偏移量。那么这个偏移量的话呢一定是16位。所以在计算机中间存放的时候,一定是这样存放的。也就是说这个字节OP中间存放的是操作码。操作码是8位的。紧挨着下面这两个字节中间存放的就是有效地址。因为有效地址是16位的。所以有效地址的高8位部分和有效地址的低8位部分,那么分别占有了紧挨着的下面的这两个字节。那么物理地址我们怎么来计算呢。物理地址计算那就是按照指定的段的段基址的值乘上16然后加上偏移量。那么在指令中间我们给出的是偏移量。所以一般情况下,也就是说,如果说我们不加特别说明的话。我们假定操作数应该是存放在数据段中间的。所以在这种情况下我们计算物理地址的时候。那么就应该用数据段的段基址的值。也就是说用段寄存器DS中间的内容来乘上16然后加上指令中间给出的这个偏移量,我们就得到物理地址了。好根据这个物理地址我们就可以取得这个操作数。那么下面我们来举一个例子。
【例3-1-3】直接寻址示例1

这个例子的话呢我们来看一下。这条MOV指令MOV AX,[1000H]中间。这个源操作数的地方我们是这样来表示的[1000H]。1000H加了一个方括号。那么这个地方加了一个方括号的含义就表明这个1000H指的是操作数的一个偏移量。在指令中间我们给出了这个操作数的偏移量。那么这样的一种寻址方式我们叫做直接寻址方式。操作数在什么地方呢,操作数在存储器中间。那么实际上也就是说在代码段中间,这个字节OP中间存放的是操作码那实际上就是MOV指令它所对应的那个操作码。紧挨着这个字节下面存放的那就是这个1000,1000其实上就是它的一个偏移地址。那么按照我们刚才讲的,如果我们在这个指令中间我们没有加以特别说明,这个操作数应该在这个数据段中间。所以我们计算物理地址的话我们要知道数据段寄存器DS中间存放的内容到底是什么。那么假定我现在告诉你了。DS中间存放的数据是10A0H。那么实际上,也就是说指的在我们这个数据段的段首地址的高16位部分,也就是它的段基址值应该是10A0H。有了这些信息我们就可以来计算物理地址了。好那么物理地址我们是采用这样的一个方法来计算的。DS的内容乘上16,乘上16的话很方便,我们只要在10A0后面添上一个0就行了。因为用16进制来表示的话,实际上就是后面添上个0就行了。好加上偏移量,偏移量是1000H,加上1000H,那么加的结果的话加上11A00H。也就是说数据在什么地方呢,数据存放的物理地址应该是11A00H。那么我们来查找,假定现在11A00H,地址为11A00H的这个字中间,我们现在存放的数据的话呢是30H和50H。这样的话我们执行这条MOV指令MOV AX,[1000H]的时候实际上,也就是说应该把存储器,我们计算得到物理地址了,操作数在存储器中间,把这个存储器中间的数据取出来。传送到AX中间。那么高位部分,地址高的那个字节里面取出来的数据50H应该放到AX的高字节中间去。地址低的那个字节中间取出来的数据30H应该是作为AX的低8位部分。所以执行这条指令MOV AX,[1000H]我们应该得到的结果。也就是说在AX中间得到的数据应该是5030H。那么这个例子的话实际上,就是说明了,就是直接寻址方式它到底怎么执行的。首先根据给出的这个,指令中间给出的这个偏移量1000H。来计算物理地址。根据物理地址到相应的存储单元中间去取出操作数。那么因为我们这是条MOV指令,所以它操作的时候直接就把这数据传送到目的操作数中间去。这样的话这条指令就执行完了。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 11
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不错,内容很实在
2012-1-15 12:22
0
游客
登录 | 注册 方可回帖
返回
//