移动字符数组的值以注册 x86 内联程序集
Move the value of an array of character to register x86 inline assembly
我正在使用Visual C++ 2010 Express进行内联汇编编码Microsoft。
我有这种代码。重点是我需要访问字符数组的每个字符。下面只是一个不相关的示例,当它到达字符串的末尾(终止空字符)时,它将跳转到完成,否则它将用新行分隔字符串的每个字符。
line[10] = "I am Kevin";
format[] = "%cn";
_asm {
mov ebx,0
loop:
cmp line[ebx],0
jz finish
mov eax, line[ebx]
push eax
lea eax, format
push eax
call printf
jmp loop
finish:
....
}
不知何故,我总是有这一行的错误:
mov eax, line[ebx]
它一直在说error C2443: operand size conflict
"eax
" 描述了 32 位寄存器a
。
寄存器a
的低8位为al
。 这将移动 8 位:
mov al, line[ebx]
使用零扩展字节加载 insn movzx
:
movzx eax, line[ebx]
相关文章:
- 内联程序集printf将整数解释为地址
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- 具有外部"c"和程序集的未定义函数
- 用于将C++代码转换为 Web 程序集的脚本未终止
- 为什么我的C++程序的程序集输出充满了 .ascii,没有汇编代码?
- CoreCLR 中的检测探查器 - 将帮助程序程序集加载到 dotnet 进程的方法
- 不同于按值传递和常量引用传递的程序集
- 为什么在堆栈和堆上创建变量会产生相同的程序集代码?
- 如何将C++子例程链接到 x86 程序集程序?
- 将内联程序集尾调用函数尾声替换为用于x86/x64 msvc的Intrinsics
- 参数传递和返回值如何在程序集级别的 x86 上的 C/C++ 中工作?
- x86-64 程序集:为什么偏移 25 字节
- 如何使用 x86 程序集在 c 中访问 main 函数中的变量
- 移动字符数组的值以注册 x86 内联程序集
- 程序集asm x86加密/解密程序
- 从我的 C/C++ 代码 - x86 和 ARM 获取程序集等效代码
- 使用x86程序集的信号量实现
- x86英特尔程序集和C++-数组周围的堆栈已损坏
- 按照每个通用寄存器的用途对 x86 程序集进行编码是必要还是更容易
- x86 程序集比较参数