簡體   English   中英

解決 nasm 示例的問題

[英]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

期待任何幫助,謝謝!

如果 x=2 它給出的答案是 4290776301

  •  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM