Win32 Assembly: Komut Satırına Print ile Çıktı Almak

Kategori Assembly, Belgeler
27.06.2016
2850 Okunma

Esen;
Son iki yazımı incelerseniz, komut satırına takıldığımı göreceksiniz. Aslında yazılarım birbirlerini destekliyor ya da birbirinin devamı şeklinde oluyor. Benim de biraz ayrıntıya girme deliliğim yok değil. Bir konu hakkında yazarken ya da çalışırken o konu ne ise en derin yerine kadar gidip bakmaya bayılırım. Böylece sistemin çalışma mekanizmasını daha iyi öğrenirim ve onu daha iyi kullanırım. Komut satırına bir şerler yazdırdıktan sonra bununla ilgili bir yazı neden olmasın demiştim. Ama konunun derinliğine girince çok fazla ayrıntı olduğunu -her zamanki gibi- gördüm. İnternette de araştırıp bir çok şey bulabilirsiniz. umarım yazı yararlı olur.

Bilgisayardaki veri insan okunabilirliğinden uzaktır. O ikilik veriyi bir metin durumuna çevirmemiz/dönüştürmemiz gerekmektedir. RadASM 2.2.2.1 ve MASM v11 bilgisayarınızda kurulu ise devam edelim. Ayrıca aşağıda eski yazılarım da var; bunların da kaynak kodlarını inceleyebilirsiniz.
SCTZine Assembly Beti
HEX.BIN Converter v1.0
HEX.DEC Converter v1.0
Türkçe Destekli SubClass Örneği
ROT13 Converter ve ROT13 Şifreleme Yöntemi
Rastgele Ondalıklı Sayı Üreteci

MASM bize konsola çıktı almak ve komut satırından girdi yapmak için hazır fonksiyonlar ve makrolar sunar. Şimdi bunları inceleyelim:

Ad Açıklama Tanımlama
ClearScreen Komut satırı ekranını temizler ve imleci sol üst köşeye koyar ClearScreen proc
locate Verilen X-Y koordinatına göre imleci yerleştirir. locate proc x:DWORD,y:DWORD
StdIn Konsoldan girdi yapılmasını sağlar StdIn proc lpszBuffer:DWORD,bLen:DWORD
StdOut Komut satırına çıktı yapılmasını sağlar StdOut proc lpszText:DWORD
StripLF StdIn çıktısında varsayılan olarak yeni satır karakterleri olan CRLF eklidir.Bu komut CRLF’yi çıkartır. StripLF proc strng:DWORD
StdErr Output text to standard out StdErr proc lpszText:DWORD
StrToFloat StrToFloat, kayan noktalı bir diziyi kayan noktalı bir sayıya dönüştürür. StrToFloat PROC stdcall public, szIn: PTR BYTE, fpout: PTR QWORD
FloatToStr FloatToStr,  QWORD boyutunda bir kayan noktalı sayıyı diziye dönüştürür. FloatToStr PROC stdcall public USES esi edi, fpin: QWORD, szDbl: PTR CHAR

Diziler ile işlem yapmak için gerekli fonksiyonlar. Bunlar print ile kullanılabildiği gibi MASM içerisinde C gibi kullanılabilir. Yararlı fonksiyonlardır.

Ad Açıklama Örnek
add$ İki diziyi birleştirir mov pstr, add$(lpBuffer,lpString)
append$ 0 sonlu bir diziyi sona ekler mov location, append$(string,buffer,location)
cat$ Çoklu diziyi birleştirir mov lpbuffer, cat$(lpBuffer,[variable number of strings])
cfm$ C dili tarzı kaçış karakterleri kullanmaya izin verir print cfm$(“\tThis is a test\n\tof the \qfmt$\q macro\n”)
chr$ Tırnak içindeki diziyi ve ASCII kodunu string olarak ekrana yazar mov pstr, chr$(“quoted text”,13,10)
cmd$ Komut satırının adresini döndürür mov pCmd, cmd$(argument_number)
hval Onaltılık diziyi 32 bit tamsayıya döndürür* mov value, hval(lpString)
istring Dizi içinde dizi arar* mov pSubStr, istring(spos, source, sub_string)
lcase$ Diziyi küçük harflere döndürür mov lpString, lcase$(lpString)
left$ Verilen diziyi verilen uzunluk kadar soldan okur mov lpString, left$(lpString,slen)
len 0 sonlu dizinin uzunluğunu döndürür* mov flen, len(lpString)
ltrim$ Dizinin solundaki boşlukları temizler mov lpString, ltrim$(lpString)
ptr$ Tampon değişkeninizi işaretçi yapar. mov lpstring, ptr$(buffer)
remove$ Dizi içerisinden silinmesi istenilen alt diziyi çıkartır. mov lpSource, remove$(lpSource,lpSubString)
rev$ Diziyi tersine çevirir. mov lpString, rev$(lpString)
right$ Verilen diziyi verilen uzunluk kadar sağdan okur mov lpString, right$(lpString,slen)
rtrim$ Dizinin sağındaki boşlukları temizler mov lpString, rtrim$(lpString)
sstr$ İşaretli 32bit tamsayıyı 0 sonlu diziye döndürür. mov lpResult, sstr$(Integer)
sval İşaretli diziyi 32bitlik tamsayıya döndürür* mov value, sval(lpString)
trim$ Dizinin hem sağında hem solunda boşluk varsa temizler. Aradaki boşluklara dokunmaz mov lpString, trim$(lpString)
ucase$ Diziyi büyük harf yapar, arada büyük harf varsa dokunmaz mov lpString, ucase$(lpString)
uhex$ İşaretsiz 32 bit tamsayıyı 0 sonlu onaltılık diziye döndürür. mov lpHex, uhex$(integer)
ustr$ İşaretsiz 32 bitlik tamsayıyı 0 sonlu diziye döndürür. mov lpResult, ustr$(uInteger)
uval İşaretsiz diziyi 32bitlik tamsayıya döndürür.* mov value, uval(lpString)

*Bu fonksiyonların sonunda dölar imi gerçekten yok.

[dm]133[/dm]

Bağlantıdan hazırladığım örnek dosyayı ve kaynak kodları inceleyebilirsiniz.

Comments of this post

Henüz yorum bulunmuyor!