0
다음 프로그램에 무엇이 잘못 되었나요? "Programming from the Ground Up"을 읽고 예제를 x86-64 어셈블리로 변환하려고합니다. 다음 프로그램은 일련의 데이터에서 가장 큰 숫자를 찾습니다. 하지만 조립하고 링크하고 실행할 때 나는 0이됩니다. 분명히 가장 큰 숫자는 아닙니다. 64 비트가 아니라 32 비트 레지스터/명령어로 잘 실행됩니다.조립 프로그램에서 잘못된 결과가 발생했습니다
# PURPOSE: This program finds the largest value in a set of data.
#
#
# VARIABLES: %rax holds the current value. %rdi holds the largest
# value. %rbx holds the current index. data_items is the
# actual set of data. The data is terminated with a 0.
#
.section .data
data_items:
.long 76, 38, 10, 93, 156, 19, 73, 84, 109, 12, 21, 0
.section .text
.globl _start
_start:
movq $0, %rbx
movq data_items(, %rbx, 4), %rax
movq %rax, %rdi
loop_start:
cmpq $0, %rax # Have we reached the end?
je loop_end
incq %rbx # Increment the index.
movq data_items(, %rbx, 4), %rax # Load the next value.
cmpq %rdi, %rax # Is new value larger?
jle loop_start
movq %rax, %rdi # New val is larger, store
# it.
jmp loop_start
loop_end:
# The largest value is already in %rdi and will be returned as
# exit status code.
movq $60, %rax
syscall
알겠습니다. 감사합니다. 그게 문제라고 생각했는데 64 비트 값에 대한 지시어가 뭔지 몰랐습니다. 이 상황에서 .long 값을 가진 movl 대신 movq를 사용하면 어떤 이점이 있습니까? –