2013-03-20 71 views
0

我寫彙編程序計算階乘。我有兩個問題。需要解決有關彙編程序:輸出和整型數最大輸出

  1. 爲什麼最大輸出數可以達到255?我該如何解決它?

  2. 我怎樣才能使自動輸出打印到控制檯,而不是寫「回聲$?」。

這裏是代碼:

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 
+0

你需要做的棧上的局部變量區域,這樣就可以將數字轉換爲字符串。閱讀上堆棧幀。 – 2013-03-20 15:18:36

回答

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中的二進制數轉換爲ASCII字符串(ASCII字符將進入「緩衝區」內部,該緩衝區將被定義爲10字節的數據,初始化爲0x20爲簡單起見(ASCII空格)。

+0

但我沒有任何緩衝.. – 2013-03-20 13:53:47

+0

@sadasfsdafas fgasgasd - 你必須定義一個,或者你可以使用堆棧。 – 2013-03-20 13:59:16