linux - 解决 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中加载x
mov eax, x
的地址,并加载存储在x的值。mov eax, [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
推荐阅读
- antd - Antd Menu.Item 中的副标题或子元素
- powershell - 当我调用 New-AzureADuser @param 时,userPrincipalName 属性的域部分无效
- python - Django - 无法构建 API
- python - Python - 根据整个代码中的用户输入分配和计算最终成本?
- r - ggplot注释grob位置不一致
- python - TensorFlow 对象检测使用 CPU 进行训练,但它在脚本开头检测并使用 GPU
- amazon-web-services - aws 技术是否可以足够智能地查询来理解上下文,而不仅仅是字面意思?
- c# - dotnet ef 强制我在 appsettings.Development.json 中有 connectionString
- html - Swift - 本地/服务器图像未在 pdf 的 HTML 字符串中加载
- html - error TS2571: Object is of type 'unknown' when try pipe slice in *ngFor