sfl-examples/slide-examples/assembly/ex18.asm

29 lines
886 B
NASM

;; LEA examples
bits 64
SECTION .data
;; array of 5 elements, each 2B wide (stored in little-endian)
arr1: dw 0x5501, 0x1102, 0x2203, 0x6604, 0x7705
arr2: db 0x01, 0x02, 0x03, 0x04, 0x05
SECTION .text
global _start
_start:
%include "header.asm.inc"
mov rdx, 3 ; element offset (offset 3 --> 4th element)
;mov rax, arr1 + rdx*2 + 1 ; compute pointer (invalid!)
;mov rax, [arr1 + rdx*2 + 1] ; valid, but *deferences* (we don't want this)
lea rax, [arr1]
lea rax, [rax + rdx*2 + 1] ; compute pointer
mov r9b, byte [rax] ; ---> r9b = 0x55
mov r9b, byte [arr1 + 3*2 + 1] ; (as above, but direct assignment)
lea rax, [arr2]
lea rax, [rax + 1*2 + 2] ; compute pointer
mov r9b, byte [rax] ; ---> r9b = 0x05
%include "sysexit.asm.inc"