2013-03-20 2 views
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 
+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 байт, AL часть регистра EAX)

Вы должны преобразовать свое двоичное число в EBX в строку ASCII (символы ASCII войдут внутрь «буфера», который будет определяться как 10 байт данных, инициализирован до 0x20 (пространство ASCII) для простоты.

+0

Но у меня нет никакого буфера .. –

+0

@sadasfsdafas fgasgasd - вы должны определить один или использовать стек. –

 Смежные вопросы

  • Нет связанных вопросов^_^