0

私は階乗を数えるアセンブリプログラムを書いています。そして、私は2つの質問を受けました。

  1. 最大出力数が最大 255 になるのはなぜですか? どうすれば修正できますか?

  2. 「echo $?」と書く代わりに、コンソールに自動出力するにはどうすればよいですか。

コードは次のとおりです。

SYSCALL = 0X80
STDIN = 0
STDOUT = 1
SYSREAD = 3
SYSWRITE = 4
SYSEXIT = 1

.section .data

NUMBER = 5

.section .text
.globl _start

_start:

pushl $NUMBER
call factorial
addl $4, %esp
movl %eax, %ebx


mov $SYSEXIT, %eax
int $SYSCALL


.type factorial, @function

factorial:

pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
cmpl $1, %eax
jle end_factorial

decl %eax
pushl %eax
call silnia
movl 8(%ebp), %ebx
imull %ebx, %eax

end_factorial:
movl %ebp, %esp
popl %ebp
ret 
4

1 に答える 1

1

次の方法で STDOUT に書き込みます。

movl    4, %eax          ;sys_write
movl    1, ebx           ;stdout
movl    $buffer, %ecx     ;pointer to buffer to write
mov     10, %edx         ;length of buffer to write
int     0x80 

終了コードの最大範囲は 0 ~ 255、255 == 11111111b です。(8 ビット、1 バイト、EAX レジスタの AL 部分)

EBX の 2 進数を ASCII 文字列に変換する必要があります (ASCII 文字は、簡単にするために 0x20 (ASCII スペース) に初期化された 10 バイトのデータとして定義される「バッファ」内に入ります。

于 2013-03-20T13:22:58.347 に答える