关于汇编语言中的立即寻址和直接寻址
2016-01-25 11:59
288 查看
在 80x86 汇编语言中,立即寻址和直接寻址的格式有些相似,区别就在于 [ ] 的有无。
看看下面两行:
MOV AX, 1000
MOV AX, [1000]
前一行,是立即寻址,是把 1000 这个数,送到 AX 中去;
后一行,是直接寻址,是把存储器中 1000 单元中的数,送到 AX 中,(默认使用 DS 为段寄存器)。
上面这些说法,在各种《微机原理》、《汇编语言》的教材、参考书中,都是这样介绍的。
在实践中,使用 DEBUG 软件调试程序时,上述说法也是成立的。
----
但是,(呵呵,就怕出现这个“但是”)
有位网友发现了问题,在使用编译软件(如 MASM 5.0)时:上面写的两行,效果是相同的,都是立即寻址。
开始,做而论道并不相信,怎么可能这样呢 ?
一个没有括号,一个有括号,结果怎么可能相同呢?怎么可能都是立即寻址呢 ?
在网友的催促下,做而论道进行了实验,结果证明,这位网友说的是正确的。
实验的结果如下:
MOV AX, 1000H ;是把 1000H 这个数,送到 AX 中去
MOV AX, [1000H] ;也是把 1000H 这个数,送到 AX 中去
MOV [1000H], AX ;软件提示:这是错误的指令,立即数不能当做目的地
结果,真是不可想像。
----
解决方法:网友指出,在括号外边,写上 DS,即加上段超越的标记,才行。
MOV AX, 1000H ;是把 1000H 这个数,送到 AX 中去
MOV AX, DS: [1000H] ;加上段超越标记,才是把 1000H 单元中的数,送到 AX
MOV DS: [1000H], AX ;加上段超越的标记,才能把 [1000H] 当成存储单元的地址
经过实验,确实是这样,加上了段超越的标记,才能被编译软件认定为直接寻址。
----
呵呵,即使有了括号,还必须加上段超越的标记,才是直接寻址,否则就是立即寻址。
做而论道翻遍了能找到的书,有老的,也有新出版的,都没有这样的说法,
做而论道认定,这种特殊的要求,是编译软件的 BUG,不是正式的规则,不知道大家以为如何 ?
如果把这种要求,当成正式的规则,那么,所有的书(做而论道看过的),就都得改写了 !!!
看看下面两行:
MOV AX, 1000
MOV AX, [1000]
前一行,是立即寻址,是把 1000 这个数,送到 AX 中去;
后一行,是直接寻址,是把存储器中 1000 单元中的数,送到 AX 中,(默认使用 DS 为段寄存器)。
上面这些说法,在各种《微机原理》、《汇编语言》的教材、参考书中,都是这样介绍的。
在实践中,使用 DEBUG 软件调试程序时,上述说法也是成立的。
----
但是,(呵呵,就怕出现这个“但是”)
有位网友发现了问题,在使用编译软件(如 MASM 5.0)时:上面写的两行,效果是相同的,都是立即寻址。
开始,做而论道并不相信,怎么可能这样呢 ?
一个没有括号,一个有括号,结果怎么可能相同呢?怎么可能都是立即寻址呢 ?
在网友的催促下,做而论道进行了实验,结果证明,这位网友说的是正确的。
实验的结果如下:
MOV AX, 1000H ;是把 1000H 这个数,送到 AX 中去
MOV AX, [1000H] ;也是把 1000H 这个数,送到 AX 中去
MOV [1000H], AX ;软件提示:这是错误的指令,立即数不能当做目的地
结果,真是不可想像。
----
解决方法:网友指出,在括号外边,写上 DS,即加上段超越的标记,才行。
MOV AX, 1000H ;是把 1000H 这个数,送到 AX 中去
MOV AX, DS: [1000H] ;加上段超越标记,才是把 1000H 单元中的数,送到 AX
MOV DS: [1000H], AX ;加上段超越的标记,才能把 [1000H] 当成存储单元的地址
经过实验,确实是这样,加上了段超越的标记,才能被编译软件认定为直接寻址。
----
呵呵,即使有了括号,还必须加上段超越的标记,才是直接寻址,否则就是立即寻址。
做而论道翻遍了能找到的书,有老的,也有新出版的,都没有这样的说法,
做而论道认定,这种特殊的要求,是编译软件的 BUG,不是正式的规则,不知道大家以为如何 ?
如果把这种要求,当成正式的规则,那么,所有的书(做而论道看过的),就都得改写了 !!!
相关文章推荐
- UVA 12096 The SetStack Computer
- 从布局中快速高效地提取Style
- 如何监控 Tomcat?Zabbix 与 Cloud Insight 对比
- 今天又消失了两个回答
- 万里长城永不倒
- 一个 51 单片机的编程题
- 利用移位寄存器 165 为 51 单片机扩充并行输入接口
- 51单片机闪烁流水灯
- 80x86 汇编语言:编程一题
- 用 74HC595 把 LCD1602 改成串行数据接口
- 如何统计Redis中各种数据的大小
- PWM --真正的流水灯
- PWM --呼吸灯
- PWM --用按键控制 LED 的亮度
- “升级”
- 安卓开源框架universal-image-loader 的使用及一个实例(转载)
- 而立之年说离别
- POJ 1062(Dijsktra)
- 而立之年说离别
- 类的初始化