如果我mov, eax 12345
及更高版本mov var, eax
(假設var是一個32位int等..等等),並輸出var
它會輸出正確。爲什麼我可以mov進入eax,進入ax,但不進入al,甚至可能進入ah?
與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;
}
8位無符號字節的最大值爲255(基於零)。 –
請注意256對於8位變量來說太大了。 – fuz
「AX」有相同的範圍錯誤。一個'WORD'的範圍是0..65535和_not_ 65536. – zx485