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为基数的数字中,并打印这些字符
祝你好运:)是的,没错。你试过解析字符串吗?