我正在编写计算阶乘计算程序。我有两个问题。
为什么最大数量输出最多可达255?我该如何解决?
如何自动输出到控制台,而不是写“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
答案 0 :(得分: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空间)以简化