0

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

  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 中的二进制数转换为 ASCII 字符串(ASCII 字符将进入“缓冲区”内,该缓冲区将被定义为 10 字节的数据,为简单起见初始化为 0x20(ASCII 空间)。

于 2013-03-20T13:22:58.347 回答