8086直接寻址和立即数寻址

qq_26613239 2016-12-05 10:24:36
求大神指点如何区分8086的立即寻址和直接寻址?
MOV AX,2345H
这个2345H 怎么判断它是立即数还是一个16位地址呢?


8086汇编指令里没有#这个区分
...全文
2628 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2016-12-29
  • 打赏
  • 举报
回复
如果,你把这几行生成了汇编代码来看,结果会很是意外,完全不是你想的样子。
楼主的问题,不是概念问题,而是汇编源程序的语法上的要求规定而已。
wshcdr 2016-12-29
  • 打赏
  • 举报
回复
如果有C语言的基础,那就很好区分,汇编书上很多讲得不到位 int i = 8;//对应的汇编就是立即数寻址 int j = 6; int m = j; // 对应的汇编就是直接寻址
linux_hsylar 2016-12-29
  • 打赏
  • 举报
回复
8086访问RAM中的数据时,如果直接是move ax,[xxxx],默认的段是DS(数据段),也有可能出现段超越,如mov ax,es:[xxxx],如果[xxxx]前面加了除了DS以为的段寄存器,就说明是段超越,如果没有加,就是DS,加了DS就是多此一举吧。至于立即寻址,后面直接是xxxx,而如果是直接寻址,则是加上[xxxx],数字加方括号的。
  • 打赏
  • 举报
回复
#9说的不一定,要看编译器。 也可能是 mov dword ptr [i],8 也可能是 mov eax,8 //使用哪个寄存器看上下文的情况了,不一定是eax mov [i],eax 后面的 int j = 6; int m = j; 类似 也可能是 mov dword ptr [j],6 mov dword ptr [m],6 也可能是 mov eax,6 mov [j],eax mov [m],eax 也可能不优化成这样 mov eax,6 mov [j],eax mov eax,[j] mov [m],eax
baidu_23107797 2016-12-17
  • 打赏
  • 举报
回复
直接地址....ds:[xxxxx] ;必须ds:加方括号,否则仍作立即数
qq_26613239 2016-12-16
  • 打赏
  • 举报
回复
好像懂了 , 意思就是直接地址的话 要接这个DS: ‘DS:’这三个符号 ?
zara 2016-12-09
  • 打赏
  • 举报
回复
对 masm 来说,源程序里加了方括号也没用,一样地会被当作立即数,只有再加上 DS: 才会被认为是直接的内存地址
谁学逆向工程 2016-12-09
  • 打赏
  • 举报
回复
你这个没有方括号,那就是立即数
zara 2016-12-08
  • 打赏
  • 举报
回复
在其它地方,如果不是其它原因会使用非 DS: 的话,DS: 是可以省略的;而这里,DS: 的作用其实不是指明段的意思,其作用,就只是告诉编译程序,后面的数据是内存地址,而非立即数,在最后的程序执行代码里,是没有这个 DS: 段前缀指令的。这,只是个标记数值类型的个规定吧。
qq_26613239 2016-12-07
  • 打赏
  • 举报
回复
首先,谢谢你回复
qq_26613239 2016-12-07
  • 打赏
  • 举报
回复
不是这样吧 8086 是有默认的段地址的 就是这个DS:可以省略的,访问数据默认的段地址是数据段 也可以指定
zara 2016-12-05
  • 打赏
  • 举报
回复
按照 masm 的语法约定,如果是地址,应该写成 mov ax, ds:[2345h] ;其它形式的,将被视为立即数。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧