3
在CSAPP鍛鍊3.4彙編語言IA32 - 移動字符爲int
src_t v;
dest_t *p;
*p = (dest_t) v;
當src_t
是char
和dest_t
被int
,答案是
movsbl %al, (%edx)
(v
存儲在%eax
或%ax
或%al
,p
存儲在%edx
)。當src_t
是char
而dest_t
是unsigned
,答案是
movsbl %al, (%edx)
了。
爲什麼我們不得不使用movsbl
而不是movzl
當char
類型是非負數?
這是因爲C語言標準使'char'實現的簽名性被指定和記錄。因此,類型'char'可以被簽名(並且需要符號擴展)或無符號的(並且要求零擴展)。看起來前者就是這種情況。 –
char類型可以是有符號或無符號的,它取決於實現。 – didierc