将寄存器用作 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 中的数组索引中?

访问段寄存器 MASM

带 masm 的寄存器 edx::eax 中的 mul 和内存分配

带 masm 的寄存器 edx::eax 中的 mul 和内存分配

在MASM中使用32位寄存器而不更改默认段定义大小

MASM 程序集将 8 位寄存器移动到 16 位寄存器(即 mov cx,ch)[重复]