abc Asembler - elektronski priručnik
VII dio Načini adresiranja

Instrukcija MOV

Već smo koristili MOV instrukciju za premještanje podataka iz jednog spremišnog prostora u drugi. MOV instrukcija uzima 2 operanda.

Sintaksa
Sintaksa MOV instrukcije je:

MOV  destination, source

MOV instrukcija može imati jednu od sljedećih 5 formi:

MOV  register, register
MOV  register, immediate
MOV  memory, immediate
MOV  register, memory
MOV  memory, register

Primijetimo da:

  • Oba operanda u MOV operaciji moraju biti iste veličine
  • Vrijednost izvorišnog operanda ostaje neizmijenjena

MOV instrukcija povremeno uzrokuje dvosmislenost. Na primjer, pogledajmo naredbe:

MOV   EBX, [MY_TABLE] 	; Effective Address of MY_TABLE in EBX
MOV   [EBX], 110 		; MY_TABLE[0] = 110

Nije jasno da li želimo da premjestimo byte ekvivalent ili word ekvivalent broja 110. U ovakvim slučajevima, dobro je koristiti specifikator tipa.
Sljedeća tabela prikazuje neke od uobičajenih specifikatora tipa:

Specifikator tipa

Adresirani bajtovi

BYTE

1

WORD

2

DWORD

4

QWORD

8

TBYTE

10

Primjer
Sljedeći program ilustruje neke od gore navedenih koncepata. On sprema ime 'Pero Ćuk' u data sekciji memorije, zatim programski mijenja njegovu vrijednost u drugo ime 'Jovo Ćuk' i prikazuje oba imena.

section .text
      global _start 	;must be declared for linker (ld)
_start: 				;tell linker entry point

;writing the name 'Pero Cuk'
     mov   edx,9 		;message length
     mov   ecx, name 	;message to write
     mov   ebx,1 		;file descriptor (stdout)
     mov   eax,4 		;system call number (sys_write)
     int   0x80 		;call kernel

     mov   [name], dword 'Jovo' 	; Changed the name to Jovo Cuk
;writing the name 'Jovo Cuk'
     mov   edx,8 		;message length
     mov   ecx,name 	;message to write
     mov   ebx,1 		;file descriptor (stdout)
     mov   eax,4 		;system call number (sys_write)
     int   0x80 		;call kernel
     mov   eax,1 		;system call number (sys_exit)
     int   0x80 		;call kernel

section .data
name     db   'Pero Cuk '

Kada se gore navedeni kod kompajlira i izvrši, on će proizvesti sljedeći rezultat:

Pero Cuk Jovo Cuk

Indirektno memorijsko adresiranje    <    Index    >    Varijable