Win32 Assembly ile Kaçış Karakterini Kullanmak

Kategori Assembly, Belgeler, Genel
25.06.2016
4927 Okunma

Esen;
Kaçış karakterleri, programcılıktan da önce donanım üzerinde kullanılan fiziksel yazım hareketlerinin daha sonra yazılım ortamına uyarlanmış durumlarıdır. Boşluk bırakma, sekme yapma, alt satıra geçme gibi yazıcı ya da daktilo gibi donanımlarda ilk olarak kullanılan bu hareketler programcılıkta bazı karakterler ile simgelenmiştir:

Kaçış Karakteri Onaltılık Değer Açıklaması
\a 07 Alert – Alarm, ikaz, bip sesi çıkartır.
\b 08 Backspace – İmleci olduğu yerden bir geriye getirir ve oradaki karakteri silmez*.
\e 1B ESC- Escape –
\f 0C Formfeed – Yazıcıya yazdığı kağıtla işinin bittiğini yazmak istediği şeyi yeni bir kağıdın en başından yazması gerektiğini anlatan kaçış karakteridir.
\n 0A Newline (Line Feed) – İmleci bir alt satıra taşır.
\r 0D Carriage Return –
\t 09 Horizontal Tab – Yatay Sekme
\v 0B Vertical Tab – Dikey Sekme; bu da yazıcıları ilgilendiren bir kaçık karakteri
\\ 5C Backslash – Ters Slaş
` 60 Backquote
\' 27 Single quotation mark – Kesme İmi
\" 22 Double quotation mark – Tırnak İmi, bunu \q ile yapıyoruz
\? 3F Question mark – Soru İmi
\nnn Ters slaştan sonra 3 haneli bir rakan yazarak 8lik tabanda girdi yapabiliriz
\xhh… Ters slaş ve x karakterinden sonra onaltılık bir değer girebiliriz

Arkadaşlar kaçış karakterleri bu kadar değil /0 yaparak NULL değerini /20h ile boşluk döndürebiliriz. Bunun için ASCII tablosunu inceleyelim:

Standard-ASCII-Table

Yukarıda ilk 128 baytını gördüğümüz ASCII tablosunun genişletilmiş hali de:
extended-ascii-table

İsterseniz assemblyde ASCII kodlarını da yazdırabiliriz:(Acele bir kod oldu iyileştirilebilir:)

.386
.model flat,stdcall
option casemap:none

include windows.inc
include masm32.inc
include kernel32.inc
include msvcrt.inc

include \masm32\macros\macros.asm

includelib masm32.lib
includelib kernel32.lib
includelib msvcrt.lib
.stack 4096

.const

.data
    tampon1 dw 0
.data?

.code
start:
	call main
	exit
	
main proc

	print chr$("0-127 Standart ASCII Tablosu")
	print chr$(13,10)
	xor eax,eax
	xor ebx,ebx
	xor ecx,ecx
	xor edx,edx
	
	mov tampon1,0				;ekrana yazılacak değişken
	
	_dongu:
	print str$(ebx)				;sayaç
	print cfm$("\t:")			;sıra numarası+sekme+iki nokta
	invoke StdOut, addr tampon1	;tampondaki tamsayıyı ascii olacak ekrana yaz
	print chr$(13,10)			;bir alt satıra in
	inc ebx						;sayacı artır
	mov tampon1,bx				;sayacı tampona at,böylece bir sonraki ascii değerine atlamış ol
	cmp ebx,128					;128 ile denetle
	jne _dongu					;128 ise donguden çık
	
	inkey
	invoke ExitProcess,0

main endp

end start

BU kadar da değil şimdi de kaçış karakterlerini kullanarak ekrana birşeyler yazdıralım:

print chr$(30h,31h,9,32h,33h)

printten sonraki chr$ içine onaltılık ya da onluk olarak karakterleri girebiliriz. Eğer yeni satır ya da ikaz sesi gibi özel bir anlama gelmeyen normal bir karakter ise A ya da 3 gibi bu ekrana yazılır.

invoke StdOut, chr$(7,"Once ses",9,"Sonra yatay sekme",20h,"20h ile bosluk ve yeni satir:",13,10)

Bir de cfm$ var, C dili tarzında tırnak içine yazılan kaçış karakterlerini kullanabiliriz:

print cfm$("\tYatay Sekme\nAlt Satira Gectik \q deneme \q tirnak yaptik q ile\n")

Ters slaştan sonra karakterleri girerek işinize yarayacak kaçışları kullanabilirsiniz.

Comments of this post

Henüz yorum bulunmuyor!