关于汇编语言中的立即寻址和直接寻址
在 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,不是正式的规则,不知道大家以为如何 ?
如果把这种要求,当成正式的规则,那么,所有的书(做而论道看过的),就都得改写了 !!!
关于汇编语言中的立即寻址和直接寻址相关推荐
- 简述汇编语言中的标号有什么规定_2020年秋季学期《汇编语言》在线考试 (适用于2020年12月份考试)【答案标准】...
2020年秋季学期<汇编语言>在线考试 (适用于2020年12月份考试) 共29道题 总分:100分 答题中 剩余答题时间:88 : 06 单选题 问答题 论述题 一.单选题 共20题,4 ...
- ARM汇编语言中的程序结构
在 ARM ( Thumb )汇编语言程序中,以程序段为单位组织代码.段是相对独立的指令或数据序列,具有特定的名称.段可以分为代码段和数据段,代码段的内容为执行代码,数据段存放代码运行时需要用到的数据 ...
- 关于汇编语言中的转移指令原理——offset
offset offset是汇编语言中由编译器进行处理的一种符号. 功能: 取得标号的偏移地址 例题: assume cs:code code segmentstart:mov ax, offset ...
- 汇编语言中常用进制数据输出的程序实现
鲁明珠,赵晓华 (河北省沧州师范专科学校南校区,河北 沧州 061001) [摘 要]在用汇编语言编程时,学生认为将结果数据按不同的数制形式显示出来是一个难点.计算机中的机器数是按二进制形式进 ...
- dec在微型计算机中的意思,汇编语言中的DEC是什么意思?
汇编语言中的DEC是什么意思?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! DEC( DECrement ) 减1指令 ...
- 汇编语言中间接寻址(间接操作数)与变址寻址(变址操作数)的区别
间接寻址 间接寻址就是使用寄存器作为指针,控制该寄存器的值来寻到数组中的元素,如: array byte 10h,20h,30h; 定义数组 mov esi, offset array; 取数组首地址 ...
- X86汇编语言中的registers相关
0.写在前面 本文中总结于王爽老师的汇编语言,建议有兴趣的都买一本,以支持王爽老师的辛勤付出.再者,这本书写的确实很nice. 8086CPU共有14个registers:AX, BX, CX, DX ...
- 汇编语言中带点/小数点的是什么
汇编语言第四版中的是[bx+si+idata],表示一个内存单元,偏移地址是(bx)+(si)+idata; 数学化表示:(ax)=((ds)*16+(bx)+(si)+idata). 如下写法也是一 ...
- 汇编语言中可以定义变量吗?怎么定义?有局部变量和全局变量之分吗?作用域是什么?
汇编语言定义变量的格式为 [变量名][变量类型][数值列表] 其中 变量类型有 DB DW DD等,分别表示变量占有的内存空间(依次为1,2,4个字节) 如:A DB 1,2,3,4 就定义了名称为A ...
最新文章
- Spring官方都推荐使用的@Transactional事务,为啥我不建议使用!
- python线程检测网段脚本!
- 新手必看!单片机掉电检测与数据掉电保存方案
- 【manacher】Strings in the Pocket
- 请求之前~HttpHandler实现媒体文件和图像文件的盗链
- python程序员工资-均薪3万?Python程序员就业各岗位薪资一览,你拖后腿了吗?...
- MySQL半同步复制 - 优点、缺点、配置
- atitit.高性能遍历 文本文件行 attilax总结
- 快速格式化从pdf、caj论文中复制的文本格式(正则替换)
- 张国荣的25年演艺生涯
- 【Python】指定【微信】好友自动发送消息
- Windows热键注册原理
- 什么是邮箱域名,企业邮箱域名有什么好处?
- [Unity]Shader利用Geometry处理实现描边效果
- 一文读懂 协方差矩阵
- 程序设计思维月模拟题2-CSP201609-3 炉石传说
- Unity—实现通过按键控制2D游戏物体的移动
- 怎么用迅雷下载百度网盘中的大文件…
- Web追踪——CNAME Cloaking
- 《linux内核设计分析》 第一周作业