У меня проблема с определением «ячейка памяти». В соответствии с «Руководством разработчика программного обеспечения Intel 64 и IA-32» многие инструкции могут использовать расположение памяти в качестве операнда. Например MOVBE (перемещение данных после замены байт):
Инструкция: MOVBE m32, r32asm использование операндов местоположения памяти
Теперь вопрос, как определяется область памяти; Я пытался использовать переменные, определенные в разделе .bss:
section .bss
memory: resb 4 ;reserve 4 byte
memorylen: equ $-memory
section .text
global _start
_start:
MOV R9D, 0x6162630A
MOV [memory], R9D
SHR [memory], 1
MOVBE [memory], R9D
EDIT: ->
MOV EAX, 0x01
MOV EBX, 0x00
int 0x80
< -Edit
Если SHR закомментирована Yasm (Yasm -f elf64 .asm) компилируется без проблем, но при выполнении stdio показывает: Нелегальная инструкция
И если MOVBE закомментирован, возникает ошибка при компиляции: Ошибка : недопустимый размер для операнда 1
Как мне выделить память для использования опции «m», указанной ссылкой на набор инструкций?
[CPU = x64, Compiler = yasm]
@CraigAnderson низких 32 бит 'R9'. – Jester
Спасибо @Jester. FYI для всех остальных - я спросил, что такое R9D, но потом удалил. –