2015-10-17 100 views
0

我正在使用assebmly IA32,由於沒有經驗,我對此有些懷疑。 我想做這樣的事情: A + B(均爲32位)。 該函數可以返回64位的值。 請不要讓我很難理解這一點。 謝謝!!!!32位變量返回64位變量

+0

'MOVL一個, %eax中; addl b,%eax; subb%edx,%edx; negl%edx; ret;'應該爲'unsigned'做。簽名留給你作爲練習。 – EOF

+1

先顯示你的嘗試。我們會幫助您修復它,以防萬一它無法正常工作。 – Downvoter

+0

完成,對不起:D –

回答

0

我這樣做(我真的不認爲這是正確的),很抱歉的評論是在葡萄牙 .section僞。數據

.global op1 
.global op2 

.section僞的.text

.global soma 

soma: 

    movl op1, %eax # move op1 para o registo %eax 

    movl op2, %ebx # move op2 para o registo %ebx 

    addl %ebx, %eax # adiciona %ebx a %eax e guarda em %eax 

    movl $0, %edx; 

    # jump if carry 
    jc output_com_carry 

    jmp fim 

output_com_carry: 

    movl $1, %edx 

    jmp fim 

fim: 


ret 
+0

你的解決方案是正確的,但你可以簡化代碼的清晰度。如果在指令「movl $ 1,%edx」上有**沒有進位,則跳轉。跳轉到緊隨其後的標籤也是多餘的。而且您也不必將* op2 *放入EBX寄存器。您可以直接將* op2 *添加到EAX寄存器。 –