Assembler fasm 1.73.22 problem ze zmiennymi

0

Chciałbym przypisać wartość jednej zmiennej drugiej, ale pojawia się błąd: error: invalid operand. Oto kod programu:

format ELF64 executable
entry _start

segment readable executable

_start:
	mov rax, 1
	mov rdi, 1
	mov rsi, xxx
	mov [xxx],[yzx]
	mov rdx,1 
	syscall
	mov rax, 60
	mov rdi, 0
	syscall

segment readable writeable

yzx db 49
xxx	db 48
4

W instrukcji mov przynajmniej jeden operand musi być rejestrem.

0

W uzupełnieniu do powyższego:

mov transfers a byte, word or double word from the source operand to the destination operand. It can transfer data between general registers, from the general register to memory, or from memory to general register, but it cannot move from memory to memory.

https://flatassembler.net/docs.php?article=manual#2.1.1

0

Jak wobec tego przenieś dane z pamięci do pamięci?

0

Mozna z pamieci do rejestru a potem z rejestru do pamieci

0

Ok. Dziękuję

0

Można też zrobić push + pop, ale w sumie rzadko kiedy się to opłaca (z punktu widzenia wydajności).

PS:
Jak już używamy fasma to push + pop można opakować w makro i mieć krótszy kod źródłowy. Przykład:
https://board.flatassembler.net/topic.php?t=4253

macro   m2m     dest,src 
{ 
        push    src 
        pop     dest 
} 
...
    m2m [eax+IMAGE_SECTION_HEADER.Misc.VirtualSize], [nthdr.OptionalHeader.SectionAlignment]
    m2m [eax+IMAGE_SECTION_HEADER.SizeOfRawData], [nthdr.OptionalHeader.FileAlignment]
    m2m [eax+IMAGE_SECTION_HEADER.PointerToRawData], [fsize]
    m2m [eax+IMAGE_SECTION_HEADER.VirtualAddress], [nthdr.OptionalHeader.SizeOfImage]
    mov [eax+IMAGE_SECTION_HEADER.Characteristics], 20000060h ;<-- code/read/execute

1 użytkowników online, w tym zalogowanych: 0, gości: 1