2014-12-05 64 views
1

我嘗試寫一些簡單的彙編代碼,但我得到這個錯誤: 錯誤C2443:操作數大小衝突彙編代碼,錯誤C2443:操作數大小衝突

我要乘2號,然後移動結果另一個變量...

我的老師寫了這個代碼:

int main() 
{unsigned char x,y; 

_asm{ 
    mov ax,3 
    mov bx,5 
    mul bx 
    mov y,ax 

} 
cout<<y<<"\n"; 
} 

從我的理解,斧頭只使用16位... 但無符號的字符是8位的大小?如果我使用ah或al(8bit),它根本不會執行3 * 5,但是我沒有錯誤。我很困惑......我如何使用ax和bx並將結果移到y而不會出錯?

+2

所以,呃,怎麼樣?問你的老師*?如果你從老師那裏得到的代碼不起作用,這不是你最好指出的東西嗎? – unwind 2014-12-05 08:57:03

+0

類似問題http://stackoverflow.com/a/2626384/612920 – Mansuro 2014-12-05 08:59:57

回答

1

你說得對。聲明應該是:

unsigned short x,y; 

coutunsigned short轉換爲十進制數(ASCII),而unsigned char將被解釋爲ASCII字符和未轉化(至少在我的系統)。

+0

非常感謝! – Tea 2014-12-05 10:14:40

0

您可以在8位MUL如果子「0」的ASCII碼,你必須在你的寄存器3(同樣以「5」)寄存器以及 mov al, '3' sub al, '0' mov bl, '5' sub bl, '0' mul bl

「3」是ASCII碼3。 否則,您可以使用short變量。

+0

謝謝你的回答! – Tea 2014-12-05 10:15:27