[英]a problem with solving an example on nasm
x^3/2+1 如果 x=2,它給出的答案是 4290776301。我嘗試盡我所能,我認為問題可能出在 ascii 解碼或 smth 中,但我不知道我還能在這里做什么。
%include "in_out.asm"
SECTION .data
msg: DB 'Вариант 6. Мой пример: f(x) = x*x*x/2 + 1.Введи, какой x я бы поставил: ', 0
pink: DB 'Ответ на пример: ', 0
SECTION .bss
x: resb 80
SECTION .text
GLOBAL _start
_start:
mov eax, msg
call sprintLF
mov ecx, x
mov edx, 80
call sread
mov eax, x
call atoi
mov ebx, [x]
mov eax, x
mul ebx
mul ebx
mov ebx, 2
xor ebx, edx
div ebx
add eax, 1
mov [x],eax
mov eax, pink
call sprint
mov eax, [x]
call iprintLF
call quit
期待任何幫助,謝謝!
mov eax, x mul ebx
結果會變得如此之大,因為您不是從輸入的數字開始乘法,而是從緩沖區x的地址開始。 在 NASM mov eax, x
加載x的地址,而mov eax, [x]
加載存儲在x的值。
call atoi mov ebx, [x] mov eax, x
atoi已經將其結果保存在EAX
寄存器中。 您只需要將其復制到EBX
寄存器即可。 call atoi
mov ebx, eax
。
mov ebx, 2 xor ebx, edx div ebx
對於除以 2,您需要清除EDX
寄存器。 您不小心(打字錯誤)對除法器進行了異或運算,當然,除以 2 最好使用右移shr eax, 1
來完成。
mov eax, msg
call sprintLF
mov eax, x
call scanf
mov eax, x
call atoi ; -> EAX
mov ebx, eax ; ((X^3)/2)+1
imul ebx, eax
imul ebx, eax
shr ebx, 1
inc ebx
mov eax, pink
call sprint
mov eax, ebx
call iprintLF
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.