gpt4 book ai didi

C++/ASM—— "Operand size conflict", "Improper operand type"

转载 作者:搜寻专家 更新时间:2023-10-31 01:35:45 27 4
gpt4 key购买 nike

我正在尝试在 ASM 中编写一个简单的 for 循环。我需要访问两个数组,它们是在 C++ 代码片段之外编写的(即 OrigChars 和 EncrChars)

    char temporary_char;                    

__asm {
xor ebx, ebx
jmp checkend

loopfor: inc ebx

checkend: cmp ebx, len
jge endfor1

mov bx, word ptr[ebx + OrigChars]
mov temporary_char, bx //error - "operand size conflict"

push eax
push ecx

movzx ecx, temporary_char
lea eax, EKey

push eax
push ecx

call encrypt1
add esp, 8

mov temporary_char, al

pop ecx
pop eax

mov EncrChars[ebx], temporary_char //error - "improper operand type"

jmp loopfor
}

上面已经注释了错误的行。

简而言之,为什么这些对我不起作用:

  • mov temporary_char, bx//temp_char = OChars [i];
  • mov EncrChars[ebx], temporary_char//EncrChars[ebx] = temporary_char;

最佳答案

mov bx, word ptr[ebx + OrigChars]
mov temporary_char, bx //error - "operand size conflict"

由于 temporary_charchar 类型,您只需将 BX 替换为 BL。
最好还是使用 AL,因为您正在使用 EBX 作为寻址索引!

mov al, byte ptr [OrigChars + ebx]
mov temporary_char, al

mov EncrChars[ebx], temporary_char  //error - "improper operand type"

同一指令中不能有 2 个内存引用。使用间歇寄存器:

mov al, temporary_char
mov byte ptr [EncrChars + ebx], al

关于C++/ASM—— "Operand size conflict", "Improper operand type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36824134/

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