8085 Assembly ile Dizi İçinde Veri Arama İşlemi

Batuhan Düzgün tarafından yayınlanmıştır 9. August 2010 05:31

 
Evet arkadaşlar, C# ile MS Access 2007 veritabanı ile yaptığımız uygulamalardan sonra,artık tekrar 8085 ile ilgili makalelerimize devam edebiliriz. 8085 mikroişlemciye paralel olarak, 8051 mikroişlemciyi de ele alacağız.Onunla ilgili makalelerde yakında başlayacaktır.Şimdi isterseniz bu makalemde 8085 ile nasıl bir uygulama yapacağız ona bakalım.Bu sefer bir dizideki elemanlardan içinde 5 değeri varsa belli bir bellek adresine 01 yazan,yoksa  00 yazan programı yapmaya çalışacağız.Her zamanki gibi bu işin algoritmasını çıkaralım.Programımız belli bir bellek adresinden başlayıp,sırayla diziyi tarayacak,eğer ki 05 değerini bulursak, 01 yazıp programdan direkt çıkacağız.Eğer 05 değerini bulamazsak 00 yazıp programı sonlandıracağız.Algoritmamızın akış diyagramı aşağıdaki gibidir.
 
 
 
 Evet probelmimizi çözüdğümüze göre kodları yazmaya başlayabiliriz.Öncelikle simülatörü açıp aşağıda açıklamalarıyla birlikte verdiğim 8085 assembly kodunu yazınız.
 
LXI H,C060  ;; dizinin bellekte yer alan başlangı. adresini yüklüyoruz.
MVI E,05 ;arayacağımız sayıyı E kaydedicisine saklıyoruz.
MVI D,00 ;D kaydedicisi ise eğer 05 değerini bulursak 1 veya 0 bilgisi tutacak

dongu:
MOV A,M ;sırayla dizideki elemanları kuracağımz döngüyle alıyoruz
CMP E ; Akümülatör ile E kaydedicisini karşılaştırıyoruz.
JNZ sifiryukle ;Eğer karşılaştırma işlemi sonucunda sıfır bayrağı çekilirse veri 05 değildir.o Halde sıfır bilgisini D kaydedicisine yüklemek gerekli.
JZ biryukle ; Sıfır bayrağı çekilmişse 05 verisidir o halde D kaydedicisine 1 bilgisini yüklemek lazım 

sifiryukle: ; bu kısım sıfır yüklemeye yarayan modül
MVI D,00 ;D kaydedicisine sıfır yükledik.
JMP kontrol ; bu aşamadan sonra kontrol sekmesine sıçrayıp,dizi sınırını geçip geçmediğimize bakıyoruz.

biryukle: ; bu modül ise D kaydedicisine 1 yüklemeye yarıyor.
MVI D,01 ;D 'ye 1 yüklüyoruz.
JMP cikis ; Eğer D kaydedicisi 1 bilgisini yüklediyse demekki 05 'i bulduk,döngüden çıkmalıyız.

kontrol: ;bu kısımda ise dizi sınırı geçilip geçilmediğini kontrol ediyoruz.
INX H ;dizinin indisi bir arttırıyoruz.
MOV A,L ;H-L çiftinin düşük kısmını tutan L kaydedisini akümülatöre alıyoruz.
CPI 6A ; dizi sınırını kontrol ediyoruz.
JNZ dongu ;eğer sıfır bayrağı bir değilse döngüye devam etmeliyiz.

MOV A,D ;sıfır bilgisi varsa bu kısım çalışacaktır.
STA C070 ;ve D kaydedicisindeki veriyi C070 adresine yazıyoruz.
JMP son ; bu aşamadan sonra son etiketine gidiyoruz.

cikis: ; bu etiket ise bir bilgisini kaydedip programı sonlandırmaya yarar.
MOV A,D
STA C070

son:
HLT ; programın bittiği yerdir.
 
Kodlarımızın açıklaması mevcuttur.Biraz daha kabaca ne yaptığından bahsetmekte fayda var diye düşünüyorum.İlk kısımdaki kod parçasında LXI ile dizinin başlangıç adresi verilir.Daha sonra eğer dizi içerisinde 05 değeri var ise  C070 adresine 01 değeri,yoksa 00 yazacaktır.MOV A,M ile dizinin H-L çiftinin gösterdiği bellek gözündeki değeri akümülatöre alıyoruz.Ardından E kaydedicisindeki 05 değeriyle karşılaştırıyoruz.Eğer bu işlem sonucunda sıfır bayrağı çekilirse demekki akümülatördeki değer ile E kaydedicisi içindeki değer eşit.Çünkü bilgisayar iki değeri karşılaştırmak için çıkarma işlemi yapar.Sıfır bayrağı bir olmuşsa,"biryukle" adlı etikete sıçrayacağız.Burada D kaydedicisine 01 değerini yazıp "cikis" adlı etikete dallanma yapacağız."cikis" etiketinde ise MOV A,D  ile D kaydedicisindeki değeri akümülatöre yüklüyoruz.Ardından STA komutu ile C070 adresine yazıyoruz.Eğer,sıfır bayrağı bir değilse "sifiryukle" etiketine dallanıyoruz.Bu modülde ise D kaydedicisine 00 değerini yüklüyoruz.Ardından "kontrol" adlı etikete dallanıyoruz.Bu kısımda ise dizi sınırını geçip geçmediğimizi kontrol ediyoruz.
 
Sonuçlar aşağıdaki gibidir.
 
 
 
Yukarıdaki resimde belleğin durumu gözükmektedir.C000 adresinden başlayıp,C02B adresine kadar süren alanda 8085 ile yazdığımız kodların opcode hali saklıdır.
C060 adresinden C06A adresine kadar olan bölgede elle girdiğimiz dizinin elemanları yer almaktadır.
 
Yazdığımız kodların opcodeları aşağıdaki gibidir.
 
 

C000

 

LXI H,C060

21

3

3

10

 

C001

   

60

     
 

C002

   

C0

     

C003

 

MVI E,05

1E

2

2

7

 

C004

   

05

     

C005

 

MVI D,00

16

2

2

7

 

C006

   

00

     

C007

DONGU

MOV A,M

7E

1

2

7

C008

 

CMP E

BB

1

1

4

C009

 

JNZ SİFİRYUKLE

C2

3

3

10

 

C00A

   

0F

     
 

C00B

   

C0

     

C00C

 

JZ BİRYUKLE

CA

3

3

10

 

C00D

   

14

     
 

C00E

   

C0

     

C00F

SİFİRYUKLE

MVI D,00

16

2

2

7

 

C010

   

00

     

C011

 

JMP KONTROL

C3

3

3

10

 

C012

   

19

     
 

C013

   

C0

     

C014

BİRYUKLE

MVI D,01

16

2

2

7

 

C015

   

01

     

C016

 

JMP CİKİS

C3

3

3

10

 

C017

   

27

     
 

C018

   

C0

     

C019

KONTROL

INX H

23

1

1

6

C01A

 

MOV A,L

7D

1

1

4

C01B

 

CPI 0A

FE

2

2

7

 

C01C

   

0A

     

C01D

 

JNZ DONGU

C2

3

3

10

 

C01E

   

07

     
 

C01F

   

C0

     

C020

 

MOV A,D

7A

1

1

4

C021

 

STA C070

32

3

4

13

 

C022

   

70

     
 

C023

   

C0

     

C024

 

JMP SON

C3

3

3

10

 

C025

   

2B

     
 

C026

   

C0

     

C027

CİKİS

MOV A,D

7A

1

1

4

C028

 

STA C070

32

3

4

13

 

C029

   

70

     
 

C02A

   

C0

     

C02B

SON

HLT

76

1

2

7


Evet bir makalemin daha sonuna gelmiş bulunmaktayım.Umarım zevk alarak okuyacağınız bir makale olmuştur.Bir sonraki makalemde görüşmek dileğiyle ...
 
Batuhan Düzgün
 
Sakarya Üniversitesi
 
Bilgisayar Mühendisliği 
 

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler:

8085 Assembly Dili

Comments

Add comment


(Will show your Gravatar icon)  

  Country flag

biuquote
  • Comment
  • Preview
Loading





Bu site BlogEngine.NET 1.4.5.0 ile oluşturulmuştur. Türkçe çevirisi BlogEngine TR ekibi tarafından yapılmıştır.

Batuhan Düzgün

Sakarya Üniversitesi 

Bilgisayar Mühendisi

Endüstri Mühendisi

Yeditepe Üniversitesi

Bilgisayar Mühendisliği Yüksek Lisans 

 sahibinden.com

   Kıdemli Uzman Yazılım Mühendisi  

E-Mail 

   batuhan.duzgun@sahibinden.com

   batuhan.duzgun@windowslive.com

  github.com/batux

 

Sayfalar

Calendar

<<  July 2018  >>
MoTuWeThFrSaSu
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

Yazıları geniş takvimde göster