将寄存器用作 DB (MASM) 的参数
Posted
技术标签:
【中文标题】将寄存器用作 DB (MASM) 的参数【英文标题】:Use a Register as a Parameter to DB (MASM) 【发布时间】:2018-04-02 07:22:05 【问题描述】:我有一个整数存储在寄存器edx
中,其中包含一个从 0 到 255(0x00 到 0xFF)的随机值,我想将它的值用作db
的参数。
db edx
但是,当我尝试这样做时,我收到错误 A2138 说“无效的数据初始化程序”。
要清楚,像
这样的命令db 57
确实有效,只是不是之前显示的那个。
所以我想我要问的问题是如何将寄存器用作db
命令的参数?
感谢您的宝贵时间。
【问题讨论】:
db 由汇编器解释。如果您想在运行时将mov
一个值从寄存器写入内存,则需要使用mov
指令。另外,请注意 db 指的是字节,而 edx 是 32 位值。
【参考方案1】:
你不能。 db
告诉编译器将在 db
之后定义的值放在编译期间。
使用寄存器,您不能这样做,因为值是未知的(它是已知的并且等于零),这就是您收到错误的原因。如果要从寄存器中输入值,则需要使用 mov 操作码。
loc db ?
....
mov [loc], dl
由于 edx
是 32 位的,我们无法将其存储在 db
中,因此我们要么存储最低的 8 位,要么需要将 loc
更改为 dd
。
【讨论】:
以上是关于将寄存器用作 DB (MASM) 的参数的主要内容,如果未能解决你的问题,请参考以下文章
带 masm 的寄存器 edx::eax 中的 mul 和内存分配