Başlangıç » Programlama » 8086 mimarisi ve assembly dili ile bellekteki karakter dizisinin uzunluğunu bulma

8086 mimarisi ve assembly dili ile bellekteki karakter dizisinin uzunluğunu bulma

Belleğin 0x1300 adresinden başlayan bir karakter dizisi olsun. Dizinin bittiğini sonundaki  00 değerleri belirtiyor olsun. Biz de bu bilgiden yaralanarak dizinin uzunluğunu bulalım ve bunu belleğe kaydedelim.

—————

org 1000

;heksadecimal 42h sayısı B harfini ifade eder. 43h C harfini ve bu şekilde devam etmektedir. örneğin: 4243h BC olarak düşünülebilir.

;Aşağıdaki komutlarla belleğe bir karakter dizisi yazdırdık.

mov cx,4243h                 ;
mov [0x1300],cx             ;

mov cx,4445h                 ;
mov [0x1302],cx             ;

mov cx,4647h                 ;
mov [0x1304],cx             ;

mov cx,4849h                 ;
mov [0x1306],cx             ;

Mov [0x1308], 0x00h     ; string sonu belleğe kopyalandı

;Uzunluğu bulma
mov bx, 0000h       ; karakter dizisinin uzunluğunu tutacağımız bx ‘i sıfırladık.

mov si, 0x1300       ;bellek adreslerini si ‘da tutacağız.

dongu:                    ; buraya dongu adlı etiket(label) kondu

mov dh, [si]    ;si ‘ın gösterdiği adresteki 2 karakter dh içerisine taşındı.

inc si               ;si ‘ın tuttuğu bellek adresi 1 artırıldı

inc bx              ;bx 1 artırıldı.

cmp dh,00h     ;dh içerisindeki karakterler ile 00 (hekzadesimal) karşılaştırıldı

jnz dongu         ;eğer bir önceki komutta eşleşme olmazsa dongunun başına, olursa aşağı geçilecek

dec bx              ;bx ‘teki 1 fazla değer atıldı.

mov [0x1002],bx   ;bx te tutulan dizi uzunluğu 0x1002 adresine kopyalandı

hlt   ;program sonlandırıldı

——————–

Aşağıdaki resimde örnek bir çalışma anını görebilirsiniz.

assembly123

Yorum bırakın