2012-11-03 5 views
0

I가 연습 간단한 문제를 통해 작동하고, 그리고 하나의 문제는 출력을 다음 번호를 읽도록하고, 그 수 플러스 예 1.리눅스 NASM 어셈블리 표시 입력 더하기 1

:

Please enter a number: 4 
5 

이제 입력과 출력이 쉬워야합니다. 하지만 내 프로그램이 여러 자리 숫자를 처리 할 수있게 만들고 싶습니다. 그리고 그것은 내가 곤란한 곳입니다. 왜냐하면 999의 입력이 주어지면 내 프로그램에서 마지막 9를 0으로 만들고 10을 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

답변

1

어떻게 printf와 다음 정수로 변환 atoi 함수()를 사용하여 약() 출력 결과? 몇 가지 예제 코드는 그것에 대해이 있습니다 내가 당신이라면

당신의 정수 추가하는 문제에 관해서는

http://cs.lmu.edu/~ray/notes/nasmexamples/

, 나는 "하나를 추가"아래로 문제를 찢어 시작 했죠. 이 알고리즘을 따르고있는 것을 알 수 있습니다 :

  1. 포인터를 문자열의 마지막 문자로 설정하십시오.
  2. 문자를 하나 늘립니다. 캐릭터가 ASCII '9'아래에 있으면 리턴하십시오.
  3. 그렇지 않으면 포인터를 이전 문자로 설정하십시오. 숫자가 -1이 아닌 경우 2로 건너 뜁니다.
  4. 문자 -1을 덮어 쓰려고하면 새 문자열에 n + 1 바이트를 할당하고 이전 문자열의 내용을 새 문자열에 복사 한 다음 ' 1 '을 첫 번째 문자로 사용합니다.

입력 시점을 두 자릿수 이상 추가하려는 경우 변경 사항을 알아야합니다.

+0

알고리즘을 지적 해 주셔서 감사합니다. – Progrmr

관련 문제