MOV指令中立即数能否被传送至存储器?

jefferyxxx 2014-06-02 01:30:30
如题,一些教材中说可以的,但我用debug发现不行,如:
mov bx, 1000
mov [bx], 1234
或:
mov [1000], 1234
都被提示错误,求解答,谢谢!
...全文
2118 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
会思考的草 2014-06-05
  • 打赏
  • 举报
回复 4
错误信息是Access Violation? mov [1000], 1234 这个是语法错误,至于为什么不能两个操作数都是存储器地址,因为内存只支持Read和Write两种状态,如果支持从内存到内存的mov的话,在微码层还是要翻译成[mem1]->reg->[mem2],这样增加了处理器的设计的复杂性。 mov bx, 1000 mov [bx], 1234 这个语法正确,但是1000=0x000003E8在windows系统中是一个不可以访问的地址。每个进程的虚拟地址空间中的0x00000000 - 0x0000FFFF这最前面64K叫空指针赋值保护区是不能访问的,一旦程序试图访问者64K会立即引起Access Violation错误,用于帮助程序员发现空指针引用。
曹大夯 2014-06-02
  • 打赏
  • 举报
回复
提示错误是什么?是Intel X86的汇编指令么?
好像Intel X86的MOV指令有一个Oprand必须是Register。如果两个Oprand都是立即数,那么生成的指令长度会很长,超出系统能够表达的范围,所以不允许。

21,620

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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