gpt4 book ai didi

c - 将无符号字符存储在寄存器中(x86 程序集)

转载 作者:太空宇宙 更新时间:2023-11-03 23:41:43 25 4
gpt4 key购买 nike

我正在编写一个传递了 3 个参数的函数。

void function(unsigned char* one, int two, unsigned char three) {
__asm
{
mov eax, one
mov ebx, two
mov ecx, three //Having issues storing this variable in a register

但是对于“三”,我得到一个编译错误“操作数大小冲突”。其他两个商店就好了。我想弄清楚为什么...如果我使用 lea ecx, three 它会编译。但是存储的值是错误的。

附带问题。我是否正确理解第一个参数向我传递了该变量的内存位置?

谢谢!

最佳答案

大多数 x86 指令要求所有参数的大小相同。在这种情况下,three 是一个 8 位参数,因此使用带有 8 位目标的 mov 来加载它,例如 mov cl, three

有一些类似 mov 的指令,允许从较小的源扩展到较大的目的地。例如,您可以使用 movzx ecx, three(使用零扩展移动)将字节加载到 ecx 并将前三个字节归零。

关于c - 将无符号字符存储在寄存器中(x86 程序集),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43714074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com