我做了一个叫程序嵌入为什么我的汇编程序运行无限
源代码如下。
问题:我不知道为什么这个程序无限运行。
我的开发环境是Linux,emacs的,装配,X86,在& T语法
#usage : embed input output message
#this program embed message to input's text and make an output file
#example1:
#input: "abcde"
#message: dc
#output: "abcDe"
#example2:
#input: "abcde"
#message: bcd
#output: "aBCDe"
.section .data
.section .bss
.lcomm buff,1
.section .text
.global _start
_start:
initialize:
movl %esp,%ebp
movl $0,%edi
subl $8,%esp #cleared at the exit_program
open_r:
movl $5,%eax
movl 8(%ebp),%ebx
movl $0,%ecx
movl $0666,%edx
int $0x80
save_rfd: #save to -4(%ebp)
movl %eax,-4(%ebp)
open_w:
movl $5,%eax
movl 12(%ebp),%ebx
movl $03101,%ecx
movl $0666,%edx
int $0x80
save_wfd: #save to -8(%ebp)
movl %eax,-8(%ebp)
loop:
rfd_read:
movl $3,%eax
movl -4(%ebp),%ebx
movl buff,%ecx
movl $1,%edx
int $0x80
check_EOF:
cmpl $0,%eax
je exit_program
call_func:
pushl 16(%ebp) #16(%ebp) is message
call checkNconvert #this will change buffer
wfd_write:
movl $4,%eax
movl -8(%ebp),%ebx
movl buff,%ecx
movl $1,%edx
int $0x80
jump_loop:
jmp loop
exit_program:
addl $8,%esp
movl $1,%eax
movl $0,%ebx
int $0x80
checkNconvert:
pushl %ebp
movl %esp,%ebp
movl 8(%ebp),%ebx #8(%ebp) is message that passed over
movb (%ebx,%edi,1),%bl #message's edi'th character to %bl
cmpb buff,%bl #compare
jne end_checkNconvert
.equ n, 'a' - 'A' #n is just number should be used as $n
subb $n,buff
incl %edi
end_checkNconvert:
movl %ebp,%esp
popl %ebp
ret
您是否尝试过使用调试器? – 2011-03-28 14:36:28
对不起,我没有试过。不幸的是,我不知道如何使用GDB。你有什么想法如何解决这个问题? – 2011-03-28 14:42:52
“无穷无尽”是什么意思?它是否写入任何输出?它消耗CPU时间还是似乎挂起?如果挂起,如果按Ctrl-D会发生什么情况? – 2011-03-28 16:16:39