Mikroişlemciler x86 Assembly Giriş — Bölüm 2 ( MOV, ADD Komutlarına Giriş )

Bellek Adresleri ve Offset Adresleri :

Emreefedogan
2 min readJan 28, 2023

Tüm gerçek bellek adresleri, bir segment adresi ve artı olarak bir offset adresinden oluşmalıdır. Segment adresi, herhangi bir 64K-byte bellek segmentinin başlangıç ​​adresini tanımlar. Offset adresi, 64K-byte bellek segmenti içindeki herhangi bir konumu seçer.

Code Segment, Instruction Pointer Nedir ?

Code Segment, kod bölümünün başlangıcını tanımlar.
Instruction Pointer, kod segmenti içindeki bir sonraki komutun adresini bulur ve tutar.
Gelelim x86 genel olarak kod bölümlerine nerede kod yazıyoruz nerede bellek alanı erişimleri var aşağıdaki kod parçacığını inceleyerek görebilirsiniz.


data segment
; BURASI BELLEK ALANINA ULASMAK ICIN KULLANILAN VERI SEGMENTIDIR.

ends

stack segment
; STACK SEGMENTIDIR.
ends

code segment
start:
; KOD BOLUMUNUN BASLADIGI KISIMDIR. ORNEGIN ;
MOV AX,0 ; AX registerını sıfırladık, initialize ettik.
ends

end start

Gelelim x86 Assembly Komutlarını anlatmaya :

Öncelikle temel mantığı anlamak için en basit olan atama komutunu inceleyelim.

MOV AX , BX

; AX -> Hedef (Destination) BX->Kaynak (Source), Bu komuttaki temel hedef BX registerı içindeki değeri AX registeri içindeki değerin içine yazmaktır.
MOV ingilizce MOVE den gelmektedir taşınma anlamına gelmektedir.

Örnek kod parçası ;

data segment
; BURASI BELLEK ALANINA ULASMAK ICIN KULLANILAN VERI SEGMENTIDIR.

ends

stack segment
; STACK SEGMENTIDIR.
ends

code segment
start:

MOV AX,22H ; AX içine 0022 değerini taşıdık.
MOV BX,AX ; BX registeri içine AX registeri içindeki değeri taşıdık.
MOV CX,BX ; CX içine BX taşıdık.
MOV CX,5549H ; CX değeri değiştir ve (CH=55 CL=49) oldu.

ends

end start

ILLEGAL VE LEGAL KOMUTLAR :

MOV AX,BX -> LEGAL
MOV BX,55H -> LEGAL
MOV DS,2341H -> ILLEGAL | Segment Registerlarına doğrudan bir yükleme yapılamaz.
ADD DS,2341H -> ILLEGAL | Segment registerları ile aritmetiksel işlemler yapılamaz.

ADD Destination,Source

Destination = Destination + Source anlamına gelen bir komuttur.

data segment
; BURASI BELLEK ALANINA ULASMAK ICIN KULLANILAN VERI SEGMENTIDIR.

ends

stack segment
; STACK SEGMENTIDIR.
ends

code segment
start:

MOV AL,22H ;
MOV BL,25H ;
ADD AL,BL; AL=AL+BL AL=22H+25H;

; TOPLAMAYI BINARY OLARAK YAPMAYA ALISMALISINIZ ORNEGIN ;
; 0010 0010
; 0010 0101
;+---------
; 0100 0111


ends

end start

--

--