我已經花費了幾天的時間,並且仍在積極調試。我正在計算幾個數字的平均值並將結果向上或向下舍入。這裏有必要的變量聲明:MASM大會:浮點計算
totalNum DWORD ?
sum DWORD ? ; sum of numbers
avg DWORD ?
rem DWORD ?
decimal REAL4 0.5
代碼片段:
; ********************
; * calculateAverage *
; ********************
mov eax, sum
mov ebx, totalNum
cdq
div ebx
mov avg, eax ; save average
mov rem, edx ; save remainder
mov eax, rem ; divide divisor (totalNum) by remainder to round up/down
mov ebx, totalNum
cdq
div ebx
cmp eax, decimal ; compare result to .5
jge roundUp ; if >= .5, jump to roundUp
jmp endRoundUp
roundUp: ; round up average
add avg, 1
endRoundUp:
; ******************
; * displayResults *
; ******************
mov edx, OFFSET countText1 ; display total numbers entered
call WriteString
mov eax, totalNum
call WriteDec
mov edx, OFFSET countText2
call WriteString
call Crlf
mov edx, OFFSET sumText ; display sum of numbers entered
call WriteString
mov eax, sum
call WriteDec
call Crlf
mov edx, OFFSET avgText ; display rounded average of numbers entered
call WriteString
mov eax, avg
call WriteDec
當我嘗試在十進制只顯示值,我MOV EAX,小數並得到一個10位數。該程序正確計算總數和總數,甚至正確計算平均值,但無法正確計算或顯示浮點數。
嗯,這超出了我們現在正在做的,但感謝div的澄清。同學提供了一個解決方案,儘管不是一個優雅的解決方案。 – speedracer 2013-05-04 03:25:53
@ stef2dotoh如果你想知道如何在彙編中做些什麼,找出一個好方法是用C++/C實現它,然後看看編譯器的反彙編。只是一個提示:) – Aaron 2013-05-04 13:40:07
非常酷!謝謝! – speedracer 2013-05-05 21:19:03