Bir Bilgisayar Mühendisi İçin Programlama Dili, Öğrendiklerini Sınadığı, Deneyler Yaptığı Bir Labaratuardır. Ve Mühendisler Deneylerini, Kestiremedikleri Sonuçları Gözlemlemek İçin Değil, Öngördükleri Sonuçları Doğrulamak İçin Yaparlar...
Assembly Dili
 
Üye Girişi
E-mail:

Şifre:



 
Blog Arama Motoru
 
Son Güncellenenler
 
Sosyal Ağlarda Paylaş
 
  Ters Çevir
   Assembly ile yazdığım hatrı sayılır ilk programım. Yazılanı ters çevirip tekrar ekrana yazma kodu. Assembly dilinin mantığını ve bazı komutları anlamak açısından öğretici bir kod oldu bence. (fasm) İçine de bol bol açıklama yazdım...
format mz ; derlenecek dosya exe olsun istiyoruz.
org 100h  ; programın makine kodunu ram üzerinde 0100 offsetinden
          ; (16lık tabanda 0100, 10luktabanda 256) başlayarak yerleştir,
          ; çünkü windows ilk 256 baytlık kısımı programla ilgili bazı
          ; verilere ayırır.

; aşağıdaki kod ekrana yazı yazdırma fonksiyonu için. bu fonksiyon
; dx registerını yazdırılacak yazının başlangıç ofsetini tutacak
; değişken olarak kullanır.
mov dx,basla
mov ah,09
int 21h ; Dos kesmesi

mov bx,0 ; bx registerını sıfırladık.
tekrar:
mov ah,01h ; ekrandan karakter alma fonksiyonu.
int 21h
inc bx     ; bx registerı bizim karakter sayacımız, onu bir arttırıyoruz.
mov [ds:bx],al   ; Data yığınının (data stack)  bx değerli
                 ; offsetine al değerini atıyoruz, fonksiyon karakter
                 ; kodunu ax registerının low kısmına (al) döndürür.
cmp al,13  ; Karşılaştır(compare) bakalım, basılan tuş enter mı?
jnz tekrar ; Eğer basılan tuş enter ise al=13 demektir. Bu durumda
           ; bayrak registerının sıfır biti veya bayrağı 1 olur. jnz
           ; (jump if not zero), bu bit 0 değilse tekrara atlar.
           ; Yani entera basılana kadar karakter alıyoruz.

mov dx,alta_gec ; ekrana yazdırma fonksiyonu
mov ah,09       ; dos için altsatır iki karakterden oluşur : Cr+Lf  (10,13)
int 21h

mov dx,alta_gec ; ekrana yazdırma fonksiyonu
mov ah,09
int 21h

mov dx,yazi ; ekrana yazdırma fonksiyonu
mov ah,09
int 21h

mov dx,alta_gec ; ekrana yazdırma fonksiyonu
mov ah,09
int 21h


; gelelim ters çevirme kodlarına, loop komutu gizlice cx registerını
; kullanır. cx 0 olunca durur. Bu bir döngü komutu. Döngümüz ne
; kadar karakter yazıldıysa o kadar dönmeli. Zaten loop cx'i azaltarak
; ilerler. Böylece harfler tersten yazılır.
mov cx,bx
yaz:
mov bx,cx ;cx'i direkt kullanamıyoruz, o yüzden bx=cx
mov dl,[ds:bx] ; direkt ds:cx diyemiyoruz, işlemci rezervasyon yapmış :D
mov ah,02h ; karakter yazma fonksiyonu, dl içindeki karakteri yazar.
int 21h
loop yaz ; cx registerı 0 oluncaya kadar devam.

mov dx,alta_gec ; ekrana yazdırma fonksiyonu
mov ah,09
int 21h

mov dx,alta_gec ; ekrana yazdırma fonksiyonu
mov ah,09
int 21h

mov dx,bitti ; ekrana yazdırma fonksiyonu
mov ah,09
int 21h

mov ah,00h ; tuş bekle fonksiyonu
int 16h ; klavye kesmesi(interrupt)

int 20h ; programdan çık

; aşağıda da kullandığımız yazılar var. İşlemci hiçbir zaman
; direkt bunlarla karşılaşmamalı!
basla db "Ters cevrilecek yaziyi giriniz : $"
yazi db "Yazdiginiz yazinin tersi : $"
alta_gec db 10,13,"$"
bitti db "Program bitti, cikmak icin herhangi bir tusa basabilirsiniz...$"

 
Okunma Sayısı: 800
Yayınlanma Tarihi: Blogun eski sürümü ile yazılmış, tarih kaydı bulunmuyor...
Anahtar Kelimeler: assembly, tersten, string, yazıyı, yazan, döngü, loop, kullanımı

Onaylı yorum bulunmuyor.
Yorum/Görüş Bildir
Yorumları html kodu veya özel karakter kullanmadan, yazım kurallarına
dikkat ederek ve düzgün bir Türkçe kullanarak yazalım...
 
    Atasoy Blog v3.0 © 2009-2010 Hüseyin Atasoy | Tema Tasarımı: Hüseyin Atasoy
AtasoyWeb 1 yaşında, bu tema benden ona doğum günü hediyesi :)    
Programlama Günlüğü > Assembly Dili > Ters Çevir
Menü