Я пытаюсь научиться писать код сборки, и я делаю это с помощью http://gnu.mirrors.pair.com/savannah/savannah//pgubook/ProgrammingGroundUp-0-8.pdf. Это отличный ресурс, и я пытаюсь написать код как 64-битный для моего Mac в формате Macho64.
У меня возникли проблемы с абсолютной и относительной адресацией.
Это мой код:
    DEFAULT REL
;PURPOSE:   This program finds the maximum number of a set of data items
;
;VARIABLES: The registers have the following uses
;
;   rbx - Holds the index of the data item being examined
;   rdi - Largest data item found
;   rax - Current data item
;
;   The following memory locations are used:
;
;   data_items - contains the item data. A 0 is used to terminate the data
;
global _main
section .data
    data_items: dw  3,67,34,222,45,75,54,34,44,33,22,11,66,0
    ;These are the data items
section .text
_main:              
    mov rdi, 0          ;move 0 into index register
    mov rax, [data_items+rbx*4] ;load the first data byte
    mov rdi, rax        ;since this is the first item, eax is biggest
start_loop:         ;start loop
    cmp 0, rax          ;check to see if we've hit the end
    je loop_exit
    inc rdi
    mov rax, [data_items+rbx*4]
    cmp rdi, rax
    jle start_loop
    mov rdi,rax
    jmp start_loop    
loop_exit:
    mov rax, 0x2000001          ;1 is the exit() syscall
    syscall
и это сообщения об ошибках, которые я получаю:
Samuels-MBP:Starting sam$ make
src/maximum.s:26: error: Mach-O 64-bit format does not support 32-bit absolute addresses
src/maximum.s:30: error: invalid combination of opcode and operands
src/maximum.s:33: error: Mach-O 64-bit format does not support 32-bit absolute addresses
Так что мне было интересно, может ли кто-нибудь помочь мне. Я искал Relative Addressing, но я не могу найти ничего, что объясняет на простом языке, что я делаю неправильно.
Я действительно знаю, что инструкция cmp неверна, но я думаю, что я могу это исправить.
