Assembly Giriş ve Çıkış İşlemleri

Pentester

Özel Üye
8 Eyl 2016
1,646
996
Merhabalar. Bu konumuzda Assembly ile giriş ve çıkış işlemlerine değineceğim. Giriş ve çıkış komutlarını inceleyeceğiz.
Input ve Output yani kısaca I/O komutları verilerin mikroişlemci-port arasındaki aktarım ilişkisini sağlamaktadır.

Veriler giriş portundan alınırsa verinin boyutuna göre işlemci mimarisine uygun registerlardan alınır. Yani 8 bitlik veri Al, 16 bit AX, 32 bit EAX registerlarına alınır. Veriler çıkış portuna gönderilecekse yine uygun registerlara alındıktan sonra çıkış portuna gönderilir.

Burada bahsi geçen port kavramını açıklamak gerekirse sistemin dış dünyayla ilişkisini kuran kapı numaraları gibi düşünebiliriz. Mikroişlemcilerimiz giriş çıkış işlemlerinde bellek haritalı ve yalıtılmış giriş çıkış işlemlerini kullanırlar. Giriş çıkış işlemlerindeki port adresleri statik ve dinamik formatlarda tanımlanabilir. Statik adreslemede A7 ve A0 hatlarına yerleşilir 0-255 arası değer alınır. Dinamik adreslemede adresler DX kaydedicisine alınır 0 ile 65535 arasında toplamda 65536 port tanımlanabilir. Bu da adres yolunda A0 ile A15 hatlarının tamamını kapsar.
Temel teorik bilgilerden sonra birkaç Assembly kodu inceleyelim.


OUT instruction

OUT, bir bağlantı noktasına byte yani 8bit veya Word yani 16bitlik verileri çıktılar. AL ve AX kaydedicilerini kullanır.

Kod:
OUT 3BH, AL

AL kaydedicisinin içeriğini 3BH bağlantı noktası adresine kopyalar.

Kod:
OUT 2CH,AX

Bu da AX kaydedicisi içeriğini 2CH bağlantı noktasına kopyalar.

Kod:
MOV DX, 0FFF8H
OUT DX, AL
OUT DX, AX

İlgili satırları incelersek MOV komutu ile 0FFF8H port adresi DX kaydedicisine kopyalanıyor. Yani DX adres olarak 0FFF8H adresini tutuyor. Sonraki iki satırda ise AL ve AX kaydedicilerine de bu adresler yükleniyor. Burada aslında bir dinamik adresleme yapılıyor. 0000H – FFFFH arasında bir değer tanımlanıyor.

IN instruction

Bu talimatımız verileri kopyalanacak bir bağlantı noktasından AL veya AX yazmaçlarına yazar.

Kod:
IN AL,0C8H

0C8H port adresinden AL kaydedicisine 1 bayt giriliyor.

Kod:
IN AX, 34H

Burada ise AX kaydedicisinden dolayı 2 baytlık değer 34H adresinden giriliyor.

String Giriş ve Çıkış Komutları

INS ve OUTS komutları aynı IN ve OUT komutlarının işlevini gerçekleştirir. Bu komutlarla giriş çıkış işlemleri yapılırken bellekten porta veya porttan belleğe veri aktarımı dizin şeklinde yapılır. String aktarımında da veriler byte, word, dword şeklinde aktarılabilir. Yani bu komutların sonuna ilgili tanımlar eklenir.

INSB: Byte(1 byte) değerinde giriş işlemi gerçekleştirir.
INSW: Word(2 byte) değerinde giriş işlemi gerçekleştirir.
INSD: Dword(4 byte) değerinde giriş işlemi gerçekleştirir.

Kod:
INS hedefdizi, DX
OUTS DX, kaynakdizi

Hedefdizi adresi ES: DI kaydedicisinin adresinden başlar. Kaynakdizi adresi DS:SI kaydedicisinin adresinden başlar.

Bu konuda temel olarak bahsedeceklerim bu kadar. Okuduğunuz için teşekkür ederim. Diğer konularımıza assembly bölümünden erişebilirsiniz.
 

Napcaz

Anka Team Senior
28 Nis 2019
767
764
Cudi
Selam hocam bir sorum olacak bu bahsi geçen assembly dili oyun yapmak için falan hiç kullanıldı mı yani demek istediğim bu dille insanlar hiç oturup program falan yazdı mı çok komplike bir dil demek istediğim hiç kimsenin oturup bunla program falan kodladığını sanmıyorum bunu kullanarak daha basit bir dil mesela C çıkmıştır hemen arifesinde sonra ordan ciddi yazılım geliştirmeleri başlamıştır, bence yani... Bu konuda sizin düşünceniz nedir?
 

Pentester

Özel Üye
8 Eyl 2016
1,646
996
Selam hocam bir sorum olacak bu bahsi geçen assembly dili oyun yapmak için falan hiç kullanıldı mı yani demek istediğim bu dille insanlar hiç oturup program falan yazdı mı çok komplike bir dil demek istediğim hiç kimsenin oturup bunla program falan kodladığını sanmıyorum bunu kullanarak daha basit bir dil mesela C çıkmıştır hemen arifesinde sonra ordan ciddi yazılım geliştirmeleri başlamıştır, bence yani... Bu konuda sizin düşünceniz nedir?

Assembly ile yazılımlar geliştirildi tabii. Assembly'nin de işlevi gereği kullanıldığı alanlar var. Ancak tabii oturup da Assembly ile bir stok takip sistemi yazayım demem. Yüksek seviye bir dilin getirdiği kolaylığı, hızlı geliştirme sürecini sağlamaz sana.
 

ZeHna

Yeni üye
12 May 2020
28
1
bu asembly ne kadarda zormuş güzel konu olmuş ama teşekür ederim
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.