读CSAPP第三章有个看不懂的地方...

tlidft 2018-02-07 08:49:06
在第三章练习3.3里有题是这样的
movl %eax,%rdx
这个代码是错 答案上写是因为 “destination operand incorrect size” 目的操作数大小错误 (图片上倒数第二行)
但是按照我理解 movl不只是把一个32位寄存器的数据移动到64位寄存器上吗 然后高4位全变成0 这对一个64位的寄存器有什么影响?
然后之前还有个填空题 题目是mov_ %eax,(%rax)
正确答案是movl 这让我很迷惑....
就是这样 谢谢各位大佬









...全文
1224 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
%eax与%rax是同一个寄存器,高位用0扩展当然没有问题;而%eax与%rdx不同。
zara 2018-02-08
  • 打赏
  • 举报
回复
写错了,上面的 movcx 应该是 movsx
zara 2018-02-08
  • 打赏
  • 举报
回复
32位寄存器数据到 64位寄存器,要用 movzx 或 movcx 指令吧,mov 是不行的。
那个填空题,后面的不是有括号吗,应该是作为地址来的吧,即为寄存器到内存的 mov,不是寄存器到寄存器。
tlidft 2018-02-08
  • 打赏
  • 举报
回复
谢谢各位 已经知道怎么回事了
  • 打赏
  • 举报
回复
movl %eax,%rdx intel语法是 mov rdx,eax 不同宽度的寄存器之间直接传输是不允许的,就是这么设计的,唯一的例外是通用寄存器和段寄存器之间的传输,允许mov eax,ds之类的指令,该指令和mov ax,ds功能一样,但是副作用不一样,在32位、64位模式下会将eax、rax的高16位、高48位清0。 mov_ %eax,(%rax) intel语法是 mov dword ptr [rax],eax ; dword ptr在很多汇编器中可以不写,rax是寻址用的,也可以mov qword ptr [eax],rdx这样。
hitCSAPP大作业。 我是Hello,我是每一个程序猿¤的初恋(羞羞……) 却在短短几分钟后惨遭每个菜鸟的无情抛弃(呜呜……),他们很快喜欢上sum、sort、matrix、PR、AI、IOT、BD、MIS……,从不回头。 只有我自己知道,我的出身有多么高贵,我的一生多么坎坷! 多年后,那些真懂我的大佬(也是曾经的菜鸟一枚),才恍然感悟我的伟大! 想当年: 俺才是第一个玩 P2P的: From Program to Process 懵懵懂懂的你笨笨磕磕的将我一字一键敲进电脑存成hello.c(Program),无意识中将我预处理、编译、汇编、链接,历经艰辛,我-Hello一个完美的生命诞生了。 你知道吗?在壳(Bash)里,伟大的OS(进程管理)为我fork(Process),为我execve,为我mmap,分我时间片,让我得以在Hardware(CPU/RAM/IO)上驰骋(取指译码执行/流水线等); 你知道吗?OS(存储管理)与MMU为VA到PA操碎了心;TLB、4级页表、3级Cache,Pagefile等等各显神通为我加速;IO管理与信号处理使尽了浑身解数,软硬结合,才使我能在键盘、主板、显卡、屏幕间游刃有余, 虽然我在台上的表演只是一瞬间、演技看起来还很Low、效果很惨白。 感谢 OS!感谢 Bash!在我完美谢幕后回收了我。 我赤条条来去无牵挂! 我朝 CS(计算机系统-Editor+Cpp+Compiler+AS+LD + OS + CPU/RAM/IO等)挥一挥手,不带走一片云彩! 俺也是 O2O: From Zero-0 to Zero-0。 历史长河中一个个菜鸟与我擦肩而过,只有CS知道我的生、我的死,我的坎坷,“只有 CS 知道……我曾经……来…………过……”————未来一首关于Hello的歌曲绕梁千日不绝 !!

21,458

社区成员

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

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