私は数日間頭を悩ませてきましたが、まだ積極的にデバッグしています。いくつかの数値の平均を計算し、結果を切り上げまたは切り捨てようとしています。必要な変数宣言は次のとおりです。
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
値をdecimalで表示しようとすると、eax、decimalを移動して 10 ビットの数値を取得します。プログラムは合計数と合計数を正しく計算し、平均も正しく計算しますが、適切に丸めたり、浮動小数点数を表示したりできません。