需要关于汇编程序的解决方案:输出和整数最大数字输出

时间:2013-03-20 12:59:29

标签: assembly integer output factorial

我正在编写计算阶乘计算程序。我有两个问题。

  1. 为什么最大数量输出最多可达255?我该如何解决?

  2. 如何自动输出到控制台,而不是写“echo $?”。

  3. 这是代码:

    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 
    

1 个答案:

答案 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空间)以简化