sách gpt4 ăn đã đi

Tại sao tôi có thể chuyển sang eax, ax, nhưng không thể chuyển sang al, thậm chí có thể là ah?

In lại 作者:搜寻专家 更新时间:2023-10-31 00:55:42 27 4
mua khóa gpt4 giày nike

如果我 mov, eax 12345 和之后的 mov var, eax (假设 var 是一个 32 位的 int 等..等等)并输出 của chúng tôi 稍后它会正确输出。

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

但是如果我movĐi vàoal甚至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

trả về 0;
}

câu trả lời hay nhất

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

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
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress