我想編寫一個while循環來計算2個數字的最大公約數。Nasm/Assembly如何寫這個僞代碼
這是僞代碼
Euclid(a, b)
while (b != 0)
{
r = a mod b
a = b
b = r
}
return a
我想編寫一個while循環來計算2個數字的最大公約數。Nasm/Assembly如何寫這個僞代碼
這是僞代碼
Euclid(a, b)
while (b != 0)
{
r = a mod b
a = b
b = r
}
return a
div
不帶兩個參數。如果它是一個32位的值,它將參數除以edx:eax
。例如,請參閱http://www.posix.nl/linuxassembly/nasmdochtml/nasmdoca.html。
速戰速決將是(可以改進,但是這是一個開始)
_while:
xor edx,edx
mov eax,ebx
div ecx
mov ebx,ecx
mov ecx, edx
cmp ecx,0
; etc
DIV僅接收單個操作數。它將edx:eax除以操作數,餘數爲edx。
對於那些誰是「進去」,還有的GCD代碼一些討論在這裏:HTTP://www.azillionmonkeys。 com/qed/asmexample.html - 不使用'div' :) –
謝謝你解決了while循環的問題,但是現在我在輸入數字後出現了分段錯誤(core dump)。我會給你的主程序的代碼,也許你會發現錯誤:( – l2iisk
主程序現在在問題 – l2iisk
@ l2iisk你缺少2''流行'在你的asm_main – Guillaume