汇编语言语句和机器指令是一一对应的吗?

mbctb 2010-05-07 08:04:46
书上说,汇编语言的每条语句都和机器指令一一对应。但是也有人说:有时候一条汇编指令对应多条机器指令,比如段间返回指令ret,就需要从堆栈中弹出偏移和段值,这是不是对应了两条机器指令?
...全文
2998 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cklx0401 2010-05-11
  • 打赏
  • 举报
回复
你看的是那种汇编语言啊?8086和系统级的可不太一样
8086的汇编是村崔按照机器码来的了,但windows的汇编就又点往C语言方面过渡的味道了举个例子
(window汇编语法)invok XX a,b,c (调用子函数)对应的汇编代码是
push c
push b
push a
call XX
xyzjanker 2010-05-10
  • 打赏
  • 举报
回复
哎!!!!有的是编译器提供的伪指令!!!!!!!!一条对应多条!!!那本身不是汇编的语句!!!!!!!!
比如说:invoke指令!!!它是MASM编译器提供的,编译时它自动解释这句话,包括进栈,调用,出栈,它都帮你做了!!!!!!!!!
用户 昵称 2010-05-10
  • 打赏
  • 举报
回复
应该不是一一对应的

俺记得mov es:si, xx
在debug中就是
es:
mov si, xx
两个指令,这算一条还是两条俺也不清楚,编译器有时会插入nop之类的指令,这属于什么性质也不清楚。
mbctb 2010-05-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xyzjanker 的回复:]
哎!!!!有的是编译器提供的伪指令!!!!!!!!一条对应多条!!!那本身不是汇编的语句!!!!!!!!
比如说:invoke指令!!!它是MASM编译器提供的,编译时它自动解释这句话,包括进栈,调用,出栈,它都帮你做了!!!!!!!!!
[/Quote]
哦,这个我当然知道。我是指那些基本的指令。
etracer 2010-05-07
  • 打赏
  • 举报
回复
学习了
大熊猫侯佩 2010-05-07
  • 打赏
  • 举报
回复
intel平台上可能多对多,并不是一一对应
duoasisi 2010-05-07
  • 打赏
  • 举报
回复
其实应该是经过编译器后和机器语言对应,可以考虑看看王爽汇编的第102页说debug和masm对语言的不同处理的。。。还有一本讲linux0.01的书开始也说了些对机器码和汇编时候对数据段的处理不同。
其实是一一对应的,只是为了让我们书写从而改变了些顺序。
mbctb 2010-05-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fdisksys 的回复:]
一一对应,ret之类的应该是说他做得事跟多条指令的一样吧,ret依然对应的
[/Quote]
哦,明白了,他说的是ret的机器指令可能有两种,一种是段内返回,一种段间返回。这两个返回机器指令当然是不一样的,而汇编语句相同,都是ret。并不是说一条汇编语句会翻译成两条机器指令。
fdisksys 2010-05-07
  • 打赏
  • 举报
回复
一一对应,ret之类的应该是说他做得事跟多条指令的一样吧,ret依然对应的
wendaosheyu 2010-05-07
  • 打赏
  • 举报
回复
我记得段间返回不是retf么?
2010-05-07
  • 打赏
  • 举报
回复
话说 add eax, 1 至少有三种写法……

21,499

社区成员

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

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