Assembler fasm 1.73.22 problem ze zmiennymi

Assembler fasm 1.73.22 problem ze zmiennymi
Paweł Olkiewicz
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

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

Kopiuj
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
Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
4

W instrukcji mov przynajmniej jeden operand musi być rejestrem.

vpiotr
  • Rejestracja: dni
  • Ostatnio: dni
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

Paweł Olkiewicz
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

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

stivens
  • Rejestracja: dni
  • Ostatnio: dni
0

Mozna z pamieci do rejestru a potem z rejestru do pamieci

Paweł Olkiewicz
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

Ok. Dziękuję

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
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

Kopiuj
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.