求问一个错误(应该不难,是书上给的例子的答案,但是我看不懂)

qq_15891801 2014-11-14 09:07:23
RT,最近看《深入理解计算机系统》里面讲到了机器级编程,看到一个例题的答案我谷歌翻译了还是看不懂。上图第二行和第七行,错误是Mismatch between instruction suffix and register ID.这是啥意思啊?
还有一个别的问题就是书上写“mov (%eax),%dx”写完整应该是"movw (%eax),%dx"为什么是movw不是movb呢?
新手看这本书有很多地方不理解,也不知道这是不是汇编语言,总感觉想象中的汇编语言就是这样子的,要是帖子发错位置了先说声不好意思。。。
...全文
2249 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
shangyifei 2015-07-10
  • 打赏
  • 举报
回复
指令后缀与寄存器标识不匹配 第一个应该是movw %ax ,(%esp),因为%ax是十六位寄存器,而movl的l后缀是32位寄存器使用的 第7行1同样si是16位的,而movb的b后缀却是8位寄存器使用的 l :32位 w:16位 b:8位 你可以百度查看各个寄存器的位数。 至于mov (%eax),%dx”写完整应该是"movw (%eax),%dx"为什么是movw不是movb呢? 这个和以上讲的一样,dx是16位只能储存16位的数。
ll18628620302 2015-07-08
  • 打赏
  • 举报
回复
那个发错了 是32位往16位的,不好意思
ll18628620302 2015-07-08
  • 打赏
  • 举报
回复
你看书上的112页,可以看出答案的 movl %ax,(%esp) %ax表示的是一个16位的寄存器 将一个8位的往16位的传送字节当然会告诉你不匹配的错误啦,呵呵 movl %eax,%dx 也是一个意思的16位-->8位应是 movw %eax,%dx 呵呵,我也是新手,最近刚看的 多多交流呵呵
zmszsh 2014-11-16
  • 打赏
  • 举报
回复
帮顶一下看不懂英文,应当是寄存器不能直接赋值之类的错误 第二个就是movb是操作字节 movw是操作字

21,497

社区成员

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

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