0

私は練習のためにいくつかの簡単な問題に取り組んでいます。問題の 1 つは、数値を読み取り、その数値に 1 を加えたものを出力することです。

例えば:

Please enter a number: 4
5

さて、その入力と出力があれば、それは簡単なはずです。しかし、プログラムで複数の数字を処理できるようにしたいと考えています。そして、それが私が困惑しているところです。999 の入力が与えられた場合、プログラムはどのようにして最後の 9 を 0 にし、10 の列に 1 を追加することを知ることができるのでしょうか? では、数字をもう 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ビットまでの複数の数字を出力できますが、追加は謎です。

前もって感謝します、

ライリー

4

1 に答える 1

2

atoi()を使用して整数に変換し、printf()を使用して結果を出力するのはどうですか?それについていくつかのサンプルコードがあります:

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

あなたの整数加算問題については、私があなたなら、問題を「1つ加算」することから始めます。そこで、このアルゴリズムに従っていることに気付くでしょう。

  1. 文字列の最後の文字へのポインタを設定します。
  2. キャラクターを1つ増やします。文字がASCII「9」より下にある場合は、を返します。
  3. それ以外の場合は、ポインタを前の文字に設定します。その数が-1でない場合は、2にジャンプします。
  4. 文字番号-1を上書きしようとしている場合は、新しい文字列にn + 1バイトを割り当て、古い文字列の内容を新しい文字列にコピーして、最初の文字として「1」を追加します。

この時点から、入力の複数の桁を追加する場合に何が変わるかを理解するだけで済みます。

于 2012-11-03T11:17:20.207 に答える