Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly NASM:添加存储在内存中的两个数字_Assembly_Integer_Sum_Ascii_Nasm - Fatal编程技术网

Assembly NASM:添加存储在内存中的两个数字

Assembly NASM:添加存储在内存中的两个数字,assembly,integer,sum,ascii,nasm,Assembly,Integer,Sum,Ascii,Nasm,所以,我有一个更复杂的问题要解决,但目前我无法添加两个数字。我知道“添加”命令。当您只是向寄存器赋值添加一个整数时,它的效果非常好。当涉及到从内存中添加两个数字时,它们最初是字符串,这需要先转换为整数(这是我的猜测)。有什么帮助吗 SECTION .data msg1 db 'Enter 2 numbers:', 0Ah msg2 db 'You entered:', 0Ah msg3 db 'Sum: ' SECTION .bss one:

所以,我有一个更复杂的问题要解决,但目前我无法添加两个数字。我知道“添加”命令。当您只是向寄存器赋值添加一个整数时,它的效果非常好。当涉及到从内存中添加两个数字时,它们最初是字符串,这需要先转换为整数(这是我的猜测)。有什么帮助吗

SECTION .data
    msg1    db  'Enter 2 numbers:', 0Ah
    msg2    db  'You entered:', 0Ah
    msg3    db  'Sum: '

SECTION .bss
one:    resb    4
two:    resb    4
sum:    resb    4


SECTION .text
global _start

_start:

mov eax, 4
mov ebx, 1
mov ecx, msg1
mov edx, 32
int 80h

mov eax, 3
mov ebx, 0
mov ecx, one
mov edx, 4
int 80h

mov eax, 3  
mov ebx, 0
mov ecx, two
mov edx, 4
int 80h

mov eax, 4
mov ebx, 1
mov ecx, msg2
mov edx, 39
int 80h

mov eax, 4
mov ebx, 1
mov ecx, one
mov edx, 4
int 80h

mov eax, 4
mov ebx, 1
mov ecx, two
mov edx, 4
int 80h

mov eax, 4
mov ebx, 1
mov ecx, sum
mov edx, 4
int 80h

mov eax, 1
mov ebx, 0
int 80h

根据我对你问题的理解,你正在读两个代表数字的字符串,你想把这些数字相加

你说得对,一开始你没有数字,只有字符串。如果要添加字符串表示的数字,应首先找到将字符串转换为常用数字表示的方法

有一些可能性。 您可以使用库函数,例如strtol(您应该使用该库)。您应该使用字符串作为参数调用此函数,它将为您完成这项工作。您将在eax寄存器中获得结果

如果你想获得更大的教育价值,你可能想自己计算这个数字。这并不难,我真的建议你一辈子至少做一次

首先是基本问题。您可能假设您收到的数字以10为基数。您还需要将每个ascii数字转换为其值。在这种情况下,只需减去0x30或“0”

例如,如果得到的数字是a_0、a_1、a_2、a_3(减去0x30后),则必须将其计算为1*a_0+10*a_1+100*a_2+1000*a_3。创建一个这样做的循环。您得到的结果是实际的数字

但是请注意,当您想要将数字打印回控制台时,可能需要进行相反的基本翻译。 对于另一种情况,您应该重复除法并使用模10来获得以10为底的数字。最后,您应该将0x30添加到所有以10为基数的数字中,并打印这些字符


祝你好运:)

是的,没错。你试过解析字符串吗?