2013-03-20 70 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