gpt4 book ai didi

c++ - 为什么我可以 mov 进入 eax,进入 ax,但不能进入 al,甚至可能进入 ah?

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

如果我 mov, eax 12345 和之后的 mov var, eax (假设 var 是一个 32 位的 int 等..等等)并输出 var 稍后它会正确输出。

ax 相同。 mov ax, 65535 -> mov var16, ax 将正确输出。

但是如果我mov进入al甚至ah,它不会输出任何东西。

也许进入ah 不工作是有道理的。但为什么两者都如此?

typedef int int32;
typedef unsigned char int8;
typedef short int16;

int _tmain(int argc, _TCHAR* argv[])
{
int8 c1 = 0;
int8 c2 = 0;
__asm
{
mov al, 255
mov c1, al
}

cout << c1 << endl; //outputs nothing, same if I used ah

//whereas

int32 n = 0;
__asm
{
mov eax, 10000
mov n, eax
}

cout << n << endl; // works fine, well, you get the picture

return 0;
}

最佳答案

问题不(仅)在于您的汇编代码,而是您打印值的方式:

cout << c1 << endl;

即使 c1 是 unsigned char(又名 uint8),C++ iostream 对待它的方式与对待普通 char 的方式相同。换句话说,该代码大致等同于:

printf("%c\n", c1);

只需将其转换为 unsigned int,它应该可以正常工作。

顺便说一句,在某些平台(例如 Linux PowerPC)上,普通字符实际上是无符号的。

关于c++ - 为什么我可以 mov 进入 eax,进入 ax,但不能进入 al,甚至可能进入 ah?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41419425/

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