這裏是我的全碼:彙編代碼,在輸入代碼錯誤值,階乘
SYSCALL = 0X80
STDIN = 0
STDOUT = 1
SYSREAD = 3
SYSWRITE = 4
SYSEXIT = 1
.section .data
WYBOR_MAXLEN = 2
WYBOR: .space WYBOR_MAXLEN
WYBOR_LEN: .byte
.section .text
.globl _start
_start:
mov $WYBOR_MAXLEN, %edx
mov $WYBOR, %ecx
mov $STDIN, %ebx
mov $SYSREAD, %eax
int $SYSCALL
movl $0, %edi
mov WYBOR(, %edi, 1), %al
pushl %eax
call silnia
addl $4, %esp
movl %eax, %ebx
movl $1, %eax
int $0x80
#To jest rzeczywista definicja funkcji
.type silnia, @function
silnia:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
cmpl $1, %eax
je end_silnia
decl %eax
pushl %eax
call silnia
movl 8(%ebp), %ebx
imull %ebx, %eax
end_silnia:
movl %ebp, %esp
popl %ebp
ret
我想這個程序運行,並輸入值,以便從階乘數。我可以寫出價值,但它會「分段錯誤」。如果我將pushl $ LOl更改爲ecample pushl $ 4,它將計算正常因子。我可以更改代碼以從我的鍵盤輸入值來編程嗎?
@edit 我改變了這個片段:
movl $0, %edi
mov WYBOR(, %edi, 1), %al
pushl %eax
如果我在鍵盤上輸入任何內容,將返回我「0」每次值。
STDIN不需要是1來使用鍵盤嗎?對不起,這是一段時間。 – 2013-03-19 17:39:44
那麼,我可以從鍵盤到程序的價值。然後是分段錯誤。 – 2013-03-19 17:44:06