serimc
14/01/2005, 22:46
Benim şöyle bir sorum olacak:
şimdi 8086 mikroişlemcisi kod yazmak istediğimiz zaman bunun komut setlerine bakarız programı yazarız:
örn:
.model small
.code
org 100h
başla: JMP ANA
yazı db 'eren$' ;ekranın ortasına yazılacak isim
ana proc
call ekrsil ;ekranı sil
call kurkon ;imleci konumlandır
call ekryaz ;ekrana yaz
mov ah,7 ;tuşa,
int 21h ;basılırsa
mov ah,4ch ;programdan
int 21h ;çık.
ana endp
ekrsil proc
mov ah,6 ;fonksiyon 6
mov al,0 ;geçerli sayfa (0. sayfa)
mov bh,04h ;renk (siyah zemin, kırmızı text)
mov cx,0 ;00,00 dan,
mov dx,184fh ;24,79 ‘a kadar,
int 10h ;sil
ret
ekrsil endp
kurkon proc
mov ah,2 ;fonksiyon 2
mov bh,0 ;geçerli sayfa (0. sayfa)
mov dx,0C24h ;imleç koordinatları
int 10h ;imleci konumlandır
ret
kurkon endp
ekryaz proc
mov ah,9 ;fonksiyon 9
mov dx,offset yazı ;yazılacak yazının ofset adresi
int 21h ;ekrana diziyi yaz
ret
ekryaz endp
end başla
bu programı debug ile derlerseniz çok rahatlıkla çalıştırırsınız fakat bu komutlar win32asm denilen derleyicilerde çalışmıyor hata veriyor.
O derleyiciler için yazılmış kodlara baktığımda ise :
.386
.model flat, stdcall
include user32.inc
include kernel32.inc
.data
MsgBoxCaption db "Win32 Application",0
MsgBoxText db "Hello World!",0
.const
NULL equ 0
MB_OK equ 0
.code
Main:
invoke MessageBoxA, NULL, ADDR MsgBoxText, ADDR MsgBoxCaption, MB_OK
invoke ExitProcess, NULL
end Main
bu tip kodlarla karşılaşıyorum.
Şimdi 8086 assembly ile windowsun kullandığı assembly farklı mı?
Farklıysa farkları neler?yani microsoft kendisi için özel bir assembly mi geliştirmiş oluyor?Eğer öyleyse win asm derlenirken önce 8086 asm'ye daha sonra makine diline mi dönüşüyor.VE yine öyleyse bunun normal programlama dilinden ne farkı var?Niye böyle bi şeye ihtiyaç duymuş?
Bunları ortak bir platformda derleyebileceğimiz yani ilk yazdığım kodu yazıp derleyebileceğim bir editör program mevcut mu?
Bilen arkadaşlar beni bu kavram karmaşasından kurtaracak cevap verirlerse çok sevinirim.
Saygılar,
şimdi 8086 mikroişlemcisi kod yazmak istediğimiz zaman bunun komut setlerine bakarız programı yazarız:
örn:
.model small
.code
org 100h
başla: JMP ANA
yazı db 'eren$' ;ekranın ortasına yazılacak isim
ana proc
call ekrsil ;ekranı sil
call kurkon ;imleci konumlandır
call ekryaz ;ekrana yaz
mov ah,7 ;tuşa,
int 21h ;basılırsa
mov ah,4ch ;programdan
int 21h ;çık.
ana endp
ekrsil proc
mov ah,6 ;fonksiyon 6
mov al,0 ;geçerli sayfa (0. sayfa)
mov bh,04h ;renk (siyah zemin, kırmızı text)
mov cx,0 ;00,00 dan,
mov dx,184fh ;24,79 ‘a kadar,
int 10h ;sil
ret
ekrsil endp
kurkon proc
mov ah,2 ;fonksiyon 2
mov bh,0 ;geçerli sayfa (0. sayfa)
mov dx,0C24h ;imleç koordinatları
int 10h ;imleci konumlandır
ret
kurkon endp
ekryaz proc
mov ah,9 ;fonksiyon 9
mov dx,offset yazı ;yazılacak yazının ofset adresi
int 21h ;ekrana diziyi yaz
ret
ekryaz endp
end başla
bu programı debug ile derlerseniz çok rahatlıkla çalıştırırsınız fakat bu komutlar win32asm denilen derleyicilerde çalışmıyor hata veriyor.
O derleyiciler için yazılmış kodlara baktığımda ise :
.386
.model flat, stdcall
include user32.inc
include kernel32.inc
.data
MsgBoxCaption db "Win32 Application",0
MsgBoxText db "Hello World!",0
.const
NULL equ 0
MB_OK equ 0
.code
Main:
invoke MessageBoxA, NULL, ADDR MsgBoxText, ADDR MsgBoxCaption, MB_OK
invoke ExitProcess, NULL
end Main
bu tip kodlarla karşılaşıyorum.
Şimdi 8086 assembly ile windowsun kullandığı assembly farklı mı?
Farklıysa farkları neler?yani microsoft kendisi için özel bir assembly mi geliştirmiş oluyor?Eğer öyleyse win asm derlenirken önce 8086 asm'ye daha sonra makine diline mi dönüşüyor.VE yine öyleyse bunun normal programlama dilinden ne farkı var?Niye böyle bi şeye ihtiyaç duymuş?
Bunları ortak bir platformda derleyebileceğimiz yani ilk yazdığım kodu yazıp derleyebileceğim bir editör program mevcut mu?
Bilen arkadaşlar beni bu kavram karmaşasından kurtaracak cevap verirlerse çok sevinirim.
Saygılar,