我正在解决一些简单的练习问题,其中一个问题是读取一个数字,然后输出该数字加1。
例如:
Please enter a number: 4
5
现在,通过输入和输出,它应该很容易。但我想让我的程序能够处理多个数字。这就是我难倒的地方。因为如果给我999的输入,我的程序如何知道将最后的9设为0,并将数字列加1?然后,怎么知道通过添加另一个数字将数字变成1000?
到目前为止,这是我的代码:
SECTION .data
msg db "Please enter a number: ",0
msglen EQU $-msg
sz EQU 32
NUL EQU 0
len EQU 32
SECTION .bss
num resb len
SECTION .text
GLOBAL _start
_start:
Msg: ; display the message
mov eax, 4
mov ebx, 1
mov ecx, msg
mov edx, msglen
int 80h
Read: ; read in the number
mov eax, 3
mov ebx, 1
mov ecx, num
mov edx, len
int 80h
Length: ; Find length of string
mov eax, num
mov ebx, 0
loop:
cmp BYTE[eax], NUL
je Set
inc eax
inc ebx
jmp loop
Set: ; set up the registers and variables
mov ecx, num
Print: ; main section - prints out the number plus 1
cmp BYTE[ecx], NUL
je Exit
mov eax, 4
mov ebx, 1
mov edx, 1 ; NOTE- does not yet add 1 to the number
int 80h
inc ecx
jmp Print
Exit: ; exits safely
mov eax, 1
mov ebx, 0
int 80h
有人可以告诉我如何解决这个问题吗?我只是无法弄清楚添加部分。我可以打印多个数字,最多32位,但添加只是一个谜。
提前致谢,
Rileyh
答案 0 :(得分:2)
如何使用atoi()将其转换为整数然后printf()来输出结果?有一些示例代码:
http://cs.lmu.edu/~ray/notes/nasmexamples/
至于你的整数添加问题,如果我是你,我首先将问题撕成“添加一个”。你会注意到你在那里遵循这个算法:
从这一点来说,如果你想添加多个输入数字,你只需要弄清楚会有什么变化。