注册 登录
编程论坛 汇编论坛

照书上打的,不知道为什么会出现段错误???

xxwpk007 发布于 2010-01-27 20:36, 1087 次点击
程序代码:
#PURPOSE: This program finds the maximunj number of a
# set of data items.
#
#VARIABLES: The registers have the following uses:
#
# %edi - Holds the index of the data item being examined
# %ebx - Largest data item found
# %eax - Current data item
#
# The following memory locations are used:
#
# data_items - contains the item data. A 0 is used
# to terminate the data
#
.section .data
data_items:           #These are the data items
.long 3,67,34,222,45,75,54,34,44,33,22,11,66,0

.section .text
.globl _start
_start:
movl $0, %edi        # move o into the index register
movl data_items(,%edi,4), %eax  # load the first byte of data
movl %eax, %ebx     # since this is the first item,%eax is the biggest

start_loop:           # start loop
cmpl $0,%eax        # check to see if we've hit the end
incl %edi        
je loop_exit
incl %edi          # load next value
movl data_items(,%edi,4), %eax
cmpl %ebx,%eax     # compare values
jle start_loop     # jump to loop beginning if the new
                   # one isn,t bigger
movl %eax,%ebx     #move the value as the largest
jmp start_loop    # jump to loop beginning

loop_exit:
# %ebx is the status code for the _exit system call
# and it already has the maximum number
movl $1,%eax       #1 is the _exit() syscall
int $0x80


[ 本帖最后由 xxwpk007 于 2010-1-27 20:49 编辑 ]
2 回复
#2
xxwpk0072010-01-27 20:50

找到错误了,
cmpl $0,%eax        # check to see if we've hit the end
incl %edi        #这里打错了。
je loop_exit
incl %edi          # load next value
#3
zklhp2010-01-28 00:13
用at&t写代码 俺想都不敢想~
1