Konu: Çizgiromanlarda Teknik Temalar Üzerine

  1. #31
    Ç. R. Düzenleme
    Üyelik Tarihi
    Nov 2015
    Mesajlar
    503

    Seviye: 40 
    Tecrübe: 1,794,875
    Sonraki Seviye: 2,111,327

    Beğenmiş
    2,397
    Beğenilmiş
    2,050
    Adı Geçen
    0 Konu
    Etiketlendiği
    0 Konu



    Atlantis BA23: Dorian Gray Operasyonu' nda bay Jinx ne diyordu_?

    Yaptığım son derece basit hatta saçma bir program...

    Bir kez daha ne diyordu_?

    Dediğim gibi bu çocukça bir program. Bunu yapmak için birkaç saniye yetti...

    OPDRNGRY.BAS:


    Kod:
    The IBM Personal Computer Basic 
    Version A2.00 Copyright IBM Corp. 1981, 1982, 1983
    60429 Bytes free 
    
    Ok 
    LOAD "OPDRNGRY.BAS"
    Ok
    LIST
    10 FOR X=1 TO 100
    20 PRINT "OPERATION DORIAN GRAY";X
    30 NEXT X
    Ok 
    RUN
    OPERATION DORIAN GRAY 1
    OPERATION DORIAN GRAY 2
    OPERATION DORIAN GRAY 3
    OPERATION DORIAN GRAY 4
    
    . . . . . . . . . . . . . . . . . . . . .
    . . . . . . . . . . . . . . . . . . . . .
    
    OPERATION DORIAN GRAY 97
    OPERATION DORIAN GRAY 98
    OPERATION DORIAN GRAY 99
    OPERATION DORIAN GRAY 100
    Ok 
    
    1LIST   2RUN<-   3LOAD"  4SAVE"  5CONT<-  6,"LPT1 7TRON<-  8TROFF<- 9KEY    0SCREEN




    Bay Jinx birkaç on yıl önce buna benzer bir program yapmak isteseydi, böyle düşünemeyecekti. Neden_? Çünkü o zamanlar, bu program, şu şekilde yazılırdı.

    OPDRNGRY.ASM:


    Kod:
    _TEXT	segment para public 'CODE'
    
    assume	CS:_TEXT, DS:_TEXT, SS:_TEXT
    
    org	100h
    
    main	proc near
    
    DB 11101011B
    DW 1001000000010111B
    
    DW 0101000001001111B
    DW 0101001001000101B
    DW 0101010001000001B
    DW 0100111101001001B
    DW 0010000001001110B
    DW 0100111101000100B
    DW 0100100101010010B
    DW 0100111001000001B
    DW 0100011100100000B
    DW 0100000101010010B
    DW 0010000001011001B
    
    
    DB 10111001B
    DW 0000000001100100B
    DB 10111011B
    DW 0000000000001010B
    
    DB 01010001B
    
    DB 10111001B
    DW 0000000000010110B
    
    DB 10111110B
    DW 0000000100000011B
    
    DW 0001010010001010B
    DW 0000001010110100B
    DW 0010000111001101B
    
    DB 01000110B
    DW 1111011111100010B
    
    DW 1100011111111110B
    DW 1110010000110010B
    DW 1100011110001010B
    DW 1111001111110110B
    
    DW 1100001100111010B
    DW 0001000001110101B
    
    DB 01010000B
    DW 0010011100000100B
    DW 1101000010001010B
    DW 0000001010110100B
    DW 0010000111001101B
    DB 01011000B
    
    DW 1111001111110110B
    DW 1100100011111110B
    DW 0000011001110100B
    
    DW 1111101100111010B
    DW 0000001001111101B
    DW 0000101001111100B
    
    DB 01010000B
    DW 0011000000000100B
    DW 1101000010001010B
    DW 0000001010110100B
    DW 0010000111001101B
    DB 01011000B
    
    DB 10000000B
    DW 0011000011000100B
    DW 1101010010001010B
    DW 0000001010110100B
    DW 0010000111001101B
    
    DW 0000110110110010B
    DW 0000001010110100B
    DW 0010000111001101B
    
    
    DW 0000101010110010B
    DW 0000001010110100B
    DW 0010000111001101B
    
    DB 01011001B
    
    DW 1010110011100010B
    
    DW 0010000011001101B
    
    main	endp
    
    _TEXT	ends
    
    end	main

    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\>ASM.EXE OPDRNGRY.ASM,,;
    The IBM Personal Computer Assembler
    Version 1.00 (C)Copyright IBM Corp 1981
    
    
    Warning Severe
    Errors  Errors
    0       0
    
    C:\>LINK.EXE
    IBM Personal Computer Linker
    Version 1.00 (C) Copyright IBM Corp 1981
    Object Modules: OPDRNGRY.OBJ
    Run File: OPDRNGRY.EXE
    List File [OPDRNGRY.MAP] :
    Libraries [ ] :
    Publics [No]: Y
    Line Numbers [No]: Y
    Stack size [Object file stack]:
    Load Low [Yes]: Y
    DSAllocation [No]: Y
    
    There were    1 errors detected
    
    C:\>EXE2BIN.EXE OPDRNGRY.EXE OPDRNGRY.COM
    
    C:\>OPDRNGRY.COM
    Program belleğe sığmayacak kadar büyük
    
    C:\>DEBUG.EXE OPDRNGRY.EXE
    -
    -R
    AX=0000  BX=0000  CX=0180  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
    DS=0DD2  ES=0DD2  SS=0DE2  CS=0DE2  IP=0100   NV UP EI PL NZ NA PO NC
    0DE2:0100 EB17          JMP     0119
    -
    -S CS:0100 017F CD 20
    0DE2:0173
    -
    -NOPDRNGRY.COM
    -RCX
    CX 0180
    :0075
    -
    -W CS:0100
    00075 bayt yazılıyor
    -
    -Q
    
    C:\>OPDRNGRY.COM
    OPERATION DORIAN GRAY 1
    OPERATION DORIAN GRAY 2
    OPERATION DORIAN GRAY 3
    OPERATION DORIAN GRAY 4
    
    . . . . . . . . . . . . . . . . . . . . .
    . . . . . . . . . . . . . . . . . . . . .
    
    OPERATION DORIAN GRAY 97
    OPERATION DORIAN GRAY 98
    OPERATION DORIAN GRAY 99
    OPERATION DORIAN GRAY 100
    
    C:\>
    N.B.: Antika Linker' in " There were 1 errors detected " uyarısı geçersizdir.





    Teknik yazılardan bunalan dostlarımız ve eski dostumuz Fındıkfındık için:





    Ne de olsa Mandrake bir başka. : )





    İ ç t e n l i k l e...

    Sevgiyle...

  2. #32
    Ç. R. Düzenleme
    Üyelik Tarihi
    Nov 2015
    Mesajlar
    503

    Seviye: 40 
    Tecrübe: 1,794,875
    Sonraki Seviye: 2,111,327

    Beğenmiş
    2,397
    Beğenilmiş
    2,050
    Adı Geçen
    0 Konu
    Etiketlendiği
    0 Konu
    UNDOCUMENTED DOS IV:





    Atlantis BA30: Santa Claus 9000' de, Martin Mystère' in PC ekranındaki ' virüs tarafından gönderilen ' mesaj ne idi_?

    Şu andan itibaren verilerinizin yüzde beşi silinmiş bulunuyor.

    Martin Mystère ne diyordu_?

    11400 KB... Az öncesine kadar 12000 idi. Kayıtların yüzde beşini silmiş...

    12000 (1 - (5 /100)) KB = 11400 KB

    Bir zamanlar, Rus bir yazılımcının yazdığı ve hem Martin Mystère zamanına ' 80' ler ' hem de sonraki devirlere ' 90' lar ' ait buna benzer antika bir MS-DOS virüsünü analiz etmiştik, ki bu virüs, önce orijinal MBR' u ' Master Boot Record ' okuyacak, sonra bu orijinali diske kaydedecek, ardından da pseudo MBR' u ' virüs bomba kodlarını ' orijinal MBR' a yazacak ' i.e., bulaşacak ' ve klavyeden girilen tarihe erişildiğinde de orijinal MBR' u havaya uçuracaktı.

    Ne var ki antik bilgisayarımızdaki ' Windows XP Professional, SP3 ' meşhur MS-DEBUG ile, virüs yazılımını çalıştırıp, klavyeden tarih girmemize ' i.e., birebir tatbik etmemize ' rağmen, nerede kaldı ki klavyeden girilen tarihe erişilince MBR' u havaya uçurmak, MBR' u okumayı bile beceremedi. : )

    Her nedense aklımıza bay Dawkins' in bazı sözleri geldi. Peki ne diyordu_? ' Kör Saatçi /The Blind Watchmaker /Horologiarius Caecus '

    Bu, aslında II. Bölüm'de karşılaştığımız, oldukça dokunaklı "Kişisel Kuşkuculuk Yaklaşımı"nın bir başka biçimidir. Örneğin, Zürafanın Boynunda ' The Neck of the Giraffe ', göz konusundaki bölümden hemen sonra bombacıböceğe geçiliyor.

    (Bu böcek) düşmanının suratına öldürücü bir hidrokinon ve hidrojen peroksit karışımı fışkırtıyor. Bu iki kimyasal maddde karıştıklarında kelimenin tam anlamıyla patlıyorlar. . . .

    Biyokimyacı bir arkadaşım bana bir şişe hidrojen peroksit ve 50 bombacıböceğe yetecek kadar hidrokinon verdi. Şu anda, bu iki kimyasalı karıştırmak üzereyim. Yukarıda yazılanlara göre benim suratımda patlayacaklar. İşte, karıştırıyorum ve... Görüyorsunuz ya, hâlâ buradayım. Hidrojen peroksiti hidrokinonun içine döktüm ve hiçbir şey olmadı; ısınmadı bile. Böyle olacağını elbette biliyordum: o kadar da çılgın değilim!


    Bu arada, neme lazım, olmaz olmaz deme olmaz olmaz derler ya, işte o misal, yazıyı okuyan herhangi bir END USER heyecana kapılıp denemeye kalkar, daha da fenası antik bilgisayarımızdakinden bile daha eski bir işletim sistemi kullanır, ki bir şey olur falan filan, işte bu ve benzeri nedenlerden dolayı, bu virüs ve analizini kamuya açık bir şekilde maalesef sunamıyoruz. : )

    Fakat bir fikir vermek için, MBR' a yazmak haricinde benzer kodlamaları içeren bir kitabın içeriği inceleyeceğiz.*

    * Daha önceden de denildiği gibi sembolik makina dili komutlarındaki [Flavor Anglice] READ kelimesi hemen her zaman güvenilirdir, lakin [Flavor Anglice] WRITE öyle d e ğ i l.

    Y. Elektronik Mühendisi Ferdâ M. Tanyeri, MS-DOS için ASSEMBLY adlı kitabında ne diyordu_?


    INT 13h : DİSK SERVİSLERİ

    DOS işletim sistemini tüm anlamıyla 'by-pass' eden 13h interrupt'ı sistemin en güçlü interrupt'larından biridir. Doğrudan doğruya BIOS ile iletişim sağladığından, bazı BIOS versiyonlarında problemler doğurabilir. Virüs üreticilerinin en fazla kullandıkları tekniklerden birisidir. DOS sistemi hard diskin her tarafına ulaşamadığından bu interrupt genelde 21h'nın yetersiz kaldığı alanlarda kullanılır. Geçen sayfalarda bir örneğini sunduğum 13h interrupt'ını kullanırken oldukça dikkatli olmak gerekir. Yapılan en ufak bir yanlış hard disk'in silinmesine, bozulmasına veya hiç kullanılamaz hale gelmesine neden olabilir.


    Y. Elektronik Mühendisi Ferdâ M. Tanyeri, MS-DOS için ASSEMBLY adlı kitabında ne diyordu_?

    Şimdi DEBUG ile bir hard disk üzerindeki bir partition'ın boot record'una göz atalım. Hard disk üzerindeki boot record sıfırıncı logical sector'da bulunmakta:

    Kod:
    C:\>DEBUG
    
    -L 100 2 0 1
    
    2393:0100 EB 3C 90 4D 53 44 4F 53-35 2E 30 00 02 08 01 00 .<.MSDOS5.0.....
    2393:0110 02 00 02 00 00 F8 AF 00-32 00 0A 00 32 00 00 00 ........2...2...
    2393:0120 56 72 05 00 80 00 29 DD-07 3E 2C 49 4E 54 45 52 Vr....)..>,INTER
    2393:0130 53 4F 46 54 5F 37 46 41-54 31 36 20 20 20 FA 33 SOFT_7FAT16 .3
    2393:0140 C0 8E D0 BC 00 7C 16 07-BB 78 00 36 C5 37 1E 56 .....|...x.6.7.V
    2393:0150 16 53 BF 3E 7C B9 0B 00-FC F3 A4 06 1F C6 45 FE .S.>|.........E.
    2393:0160 0F 8B 0E 18 7C 88 4D F9-89 47 02 C7 07 3E 7C FB ....|.M..G...>|.
    2393:0170 CD 13 72 79 33 C0 39 06-13 7C 74 08 8B 0E 13 7C ..ry3.9..|t....|
    -Q
    Yukarıdaki örnekte hard diskin MSDOS 5.0 ile formatlandığı görülüyor. Fiziksel sürücü numarasının (physical drive number) ise 80h olduğu ofset 0124h da bulunan byte'tan anlaşılmakta. (Bu aynı zamanda incelenen hard diskten sistemin açılabileceği anlamına da gelmekte.

    Bazı zamanlarda hard diskin gerçek yapısıyla (partition'lardan bağımsız olarak!) da çalışma yapmamız gerekebilir. Böyle bir işlem için bir BIOS interrupt'ı olan 13h'yı kullanabiliriz. Bu interrupt hard diskin partition'larını önemsemez, silindir ve kafa numaralarını kullanarak istenen yere ulaşabilir.

    Her hard disk (BIOS silindir 0, kafa 0, sector 1) bir boot record ve partition tablosu (table) ile başlar. Bu boot record'u DOS partition'ının boot record'u değildir. Master Boot Record adı verilen bu boot record'da hangi partition'un gerçek boot bilgisini içerdiği belirlenmiştir. Maksimal 4 partition'dan yalnızca bir tanesi boot işlemini yapabildiğinden master boot record bu partition'ı bulup kontrolu ona devreder.

    Master boot record 55AAh ile sona erer. Buna boot imzası anlamına gelen boot signature'da denir. Partition tablosu, boot signature'dan hemen bir önce gelir. (Ofset 01BEh ve 01FDh adreslerinde!) Partition tablosu, partition hakkında çeşitli bilgiler içerir.





    Y. Elektronik Mühendisi Ferdâ M. Tanyeri, MS-DOS için ASSEMBLY adlı kitabında ne diyordu_?

    Şimdi yazacağımız bir program ile INT 13h'ya bir örnek verelim ve master boot record'u okuyup hard diskimiz hakkındaki bilgileri nasıl edinebileceğimizi öğrenelim.

    Bu yeni programımıza hdinfo.asm adını vereceğiz. Hard disk hakkında bizlere bilgi (information) verecek olan bu program ile çeşitli hard diskler ve onların partition'larını rahatça inceleyebileceğiz.





    Âlâ! Âlâ!

    Rus yazılımcı misali, Hard Disk' e bodoslama dalacağız demek ki. Ne güzel. Öyleyse ne duruyoruz_? : )

    _16-bit Sembolik Makina Dili

    hdinfo.asm:


    Kod:
    ;******************************************************
    ; HARD DİSK BİLGİLERİ PROGRAMI
    ;
    ; Bu program BIOS INT 13h'nın 2 numaralı fonksiyonuna bir örnektir!
    ;
    ;******************************************************
    ;------------------------------------------------------------------------
    ; DATA ve EXTRA segmentlerinin tanımlanması
    
    dhdinfo	segment
    
    buffer	db	512 dup ('0')
    mesaj1	db	'Hard diskten DOS yüklenemez'
      	db	0Dh,0Ah,'$'
    mesaj2	db	'Hard diskten DOS yüklenebilir'
      	db	0Dh,0Ah,'$'
    mesaj3	db	'Partitiondaki FAT tipi tanınmıyor'
      	db	0Dh,0Ah,'$'
    mesaj4	db	'Partitiondaki FAT tipi 12-bit'
      	db	0Dh,0Ah,'$'
    mesaj5	db	'Partitiondaki FAT tipi 16-bit, '
      	db	'hard disk 32 MB den ufak',0Dh,0Ah,'$'
    mesaj6	db	'Partition bir Extended DOS Partition'
      	db	0Dh,0Ah,'$'
    mesaj7	db	'Partitiondaki FAT tipi 16-bit, '
      	db	'hard disk 32 MB den büyük', 0Dh,0Ah,'$'
    mesaj9	db	'Partitiondaki FAT DOS açısından '
      	db	'belirsiz!',0Dh,0Ah,'$'
    
    dhdinfo	ends
    ;------------------------------------------------------------------------
    ; CODE segmentinin tanımlanması
    
    hdinfo	segment
    
    ana_prog proc	far
    
    assume	cs:hdinfo
    assume	ds:dhdinfo
    assume	es:dhdinfo
    
    basla:
    push	ds			;Geri dönüş adreslerini
    sub	ax, ax			;stack içine sakla!
    push	ax
    
    mov	ax, dhdinfo		;DS ve ES segmentlerinin
    mov	ds, ax			;gerçek adreslerini
    mov	es, ax			;belirle!
    call	$cls			;Ekranı sil!
    mov	dl, 80h			;1. Hard disk (C:)
    mov	dh, 0			;Head : 0
    mov	ch, 0			;Cylinder : 0
    mov	cl, 1			;Sector : 1
    mov	al, 1			;1 sector oku
    mov	ah, 2			;Sector okuma servisi
    lea	bx, buffer		;Okunan bilginin yerleşeceği adres
    
    int	13h			;BIOS'tan yardım iste!
    jnc	devam_et		;Herşey normalse devam et!
    ret				;Anormal çıkış!
    devam_et:
    add	bx, 1BEh		;BX'i 1.partition başına pozisyonla
    
    cmp	byte ptr [bx], 80h	;BX'in işaretlediği byte'ı kontrol et!
    
    je	dos_part		;Bu byte 80h ise diskten
    				;sistem yüklenebilir
    lea	dx, mesaj1		;mesajını seç!
    jmp	boot_tamam		;Boot kontrolu sonuna git!
    
    dos_part:
    lea	dx, mesaj2		;Sistem yüklenemez mesajını seç!
    
    boot_tamam:
    mov	ah, 9			;mesaj1 veya mesaj2
    int	21h			;içeriğini ekrana yolla!
    
    add	bx, 4			;FAT bilgisinin adresini BX'e yükle!
    
    cmp	byte ptr [bx], 00	;FAT bilgisini 00 ile karşılaştır!
    
    jne	fat_bul1		;Bu byte 00 değilse devam!
    lea	dx, mesaj3		;Gereken mesajı yükle
    jmp	fat_bulundu		;Daha fazla araştırma!
    
    fat_bul1:
    cmp	byte ptr [bx], 01	;FAT bilgisini 01 ile karşılaştır!
    
    jne	fat_bul2		;Bu byte 01 değilse devam!
    lea	dx, mesaj4		;Gereken mesajı yükle
    jmp	fat_bulundu		;Daha fazla araştırma!
    
    fat_bul2:
    cmp	byte ptr [bx], 04	;FAT bilgisini 04 ile karşılaştır!
    
    jne	fat_bul3		;Bu byte 04 değilse devam!
    lea	dx, mesaj5		;Gereken mesajı yükle
    jmp	fat_bulundu		;Daha fazla araştırma!
    
    fat_bul3:
    cmp      byte ptr [bx], 05	;FAT bilgisini 05 ile karşılaştır!
    
    jne	fat_bul4		;Bu byte 05 değilse devam!
    lea	dx, mesaj6		;Gereken mesajı yükle
    jmp	fat_bulundu		;Daha fazla araştırma!
    
    fat_bul4:
    cmp	byte ptr [bx], 06	;FAT bilgisini 06 ile karşılaştır!
    
    jne	fat_hatasi		;Bu byte 05 değilse devam!
    lea	dx, mesaj7		;Gereken mesajı yükle
    jmp	fat_bulundu		;Daha fazla araştırma!
    
    fat_hatasi:
    lea	dx, mesaj9		;Hata mesajını yükle!
    
    fat_bulundu:
    mov	ah, 9			;Fat mesajını ekrana yolla 
    int	21h
    
    ret				;DOS'a geri dön!
    
    ana_prog	endp
    ;------------------------------------------------------------------------
    $cls	proc	near
    
    mov	ax, 0600h
    mov	cx, 0000
    mov	dx, 184Fh
    mov	bh, 7
    ret
    $cls	endp
    
    hdinfo	ends			;CODE segmentinin sonu
    ;******************************************************
    end	basla

    Ne yazık ki ne MS-DEBUG L 100 2 0 1 ne de hdinfo.asm ' INT 13h ' işe yarar, ki demek ki hiçbir şey yapamayacağız! Neden_?


    DEBUG.EXE:


    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\WINDOWS\SYSTEM32>DEBUG.EXE
    -?
    assemble     A [adres]
    compare      C aralık adresi
    dump         D [aralık]
    enter        E adres [liste]
    fill         F aralık liste
    go           G [=adres] [adresler]
    hex          H değer1 değer2
    input        I bağlantınoktası
    load         L [adres] [sürücü] [ilkkesim] [numara]
    Kod:
    -
    -L 0100 2 0 1

    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\WINDOWS\SYSTEM32>DEBUG.EXE
    -
    -L 0100 2 0 1
    N.B.: L[oad] [DS:]0100 [C:] 2 [logical sector] 0 [number] 1 [only load one sector = 0200h bytes]


    HDINFO.EXE:

    _ Compile ' MASM.EXE -> hdinfo.obj ' & Link ' LINK.EXE -> hdinfo.exe ' & DEBUG.EXE:


    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\>DEBUG.EXE HDINFO.EXE
    -L
    -R
    AX=0000  BX=0000  CX=03DF  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
    DS=0DD2  ES=0DD2  SS=0DE2  CS=0E17  IP=0000   NV UP EI PL NZ NA PO NC
    0E17:0000 1E            PUSH    DS
    -
    -U CS:0000
    0E17:0000 1E            PUSH    DS
    0E17:0001 2BC0          SUB     AX,AX
    0E17:0003 50            PUSH    AX
    0E17:0004 B8E20D        MOV     AX,0DE2
    0E17:0007 8ED8          MOV     DS,AX
    0E17:0009 8EC0          MOV     ES,AX
    0E17:000B E87500        CALL    0083
    0E17:000E B280          MOV     DL,80
    0E17:0010 B600          MOV     DH,00
    0E17:0012 B500          MOV     CH,00
    0E17:0014 B101          MOV     CL,01
    0E17:0016 B001          MOV     AL,01
    0E17:0018 B402          MOV     AH,02
    0E17:001A 8D1E0000      LEA     BX,[0000]
    0E17:001E CD13          INT     13
    -
    -G CS:001E
    
    AX=0201  BX=0000  CX=0001  DX=0080  SP=FFFC  BP=0000  SI=0000  DI=0000
    DS=0DE2  ES=0DE2  SS=0DE2  CS=0E17  IP=001E   NV UP EI PL ZR NA PE NC
    0E17:001E CD13          INT     13
    -P
    _ Adresler Makina Dili Sembolik Makina Dili Comment

    Kod:
    
    0E17:000E B280          MOV     DL,80
    0E17:0010 B600          MOV     DH,00
    0E17:0012 B500          MOV     CH,00
    0E17:0014 B101          MOV     CL,01
    0E17:0016 B001          MOV     AL,01
    0E17:0018 B402          MOV     AH,02
    0E17:001A 8D1E0000      LEA     BX,[0000]	; ES:[0000] = buffer
    0E17:001E CD13          INT     13		; DISK - READ SECTORS INTO MEMORY
    						; AL = number of sectors to read, CH = track, CL = sector
    						; DH = head, DL = drive, ES:BX -> buffer to fill
    						; Return: CF set on error, AH = status,	AL = number of sectors read
    
    						; AH = status ' AH values for disk operation status ':
    						; 00h    successful completion
    						; 01h    invalid function in AH or invalid parameter
    						; 02h    address mark not found
    						; 03h    disk write-protected
    						; 04h    sector not found/read error
    						; 05h    reset failed (hard disk)
    						; 05h    data did not verify correctly (TI Professional PC)
    						; 06h    disk changed (floppy)
    						; 07h    drive parameter activity failed (hard disk)
    						; 08h    DMA overrun
    						; 09h    data boundary error (attempted DMA across 64K boundary or >80h sectors)
    						; 0Ah    bad sector detected (hard disk)
    						; 0Bh    bad track detected (hard disk)
    						; 0Ch    unsupported track or invalid media
    						; 0Dh    invalid number of sectors on format (PS/2 hard disk)
    						; 0Eh    control data address mark detected (hard disk)
    						; 0Fh    DMA arbitration level out of range (hard disk)
    						; 10h    uncorrectable CRC or ECC error on read
    						; 11h    data ECC corrected (hard disk)
    						; 20h    controller failure
    						; 31h    no media in drive (IBM/MS INT 13 extensions)
    						; 32h    incorrect drive type stored in CMOS (Compaq)
    						; 40h    seek failed
    						; 80h    timeout (not ready)
    						; AAh    drive not ready (hard disk)
    						; B0h    volume not locked in drive (INT 13 extensions)
    						; B1h    volume locked in drive (INT 13 extensions)
    						; B2h    volume not removable (INT 13 extensions)
    						; B3h    volume in use (INT 13 extensions)
    						; B4h    lock count exceeded (INT 13 extensions)
    						; B5h    valid eject request failed (INT 13 extensions)
    						; B6h    volume present but read protected (INT 13 extensions)
    						; BBh    undefined error (hard disk)
    						; CCh    write fault (hard disk)
    						; E0h    status register error (hard disk)
    						; FFh    sense operation failed (hard disk)




    ;................................................. .................................................. ..........................................

    DEBUG.EXE: L[oad] [DS:]0100 [C:] 2 [logical sector] 0 [number] 1 [only load one sector = 0200h bytes]

    16-bit [Sembolik] Makina Dili: P[roceed]

    Her iki direktif de çalıştırıldığında, işletim sistemi, şu uyarı mesajını ekrana gönderir.


    16 bit MS-DOS Alt Sistemi

    C:\command.com
    Uygulama desteklenmeyen bir eylem gerçekleştirdi: Sabit diske doğrudan erişim.
    Bu, uygulamanın yanlış çalışmasına neden olabilir. Uygulamayı bitirmek için Kapat'ı seçin.

    Kapat Yoksay

    Bir başka deyişle_?

    _ Hard disk ' C: ' üzerindeki 0. logical sector DEBUG.EXE' de, DS:0100 - DS:02FF adres aralığına okunamaz.

    _ INT 13h ;BIOS'tan yardım iste[nemez]!, i.e., hdinfo.asm' deki bu ve sonraki sembolik makina dili komutları çalıştırılamaz.


    ;................................................. .................................................. ..........................................

    Ya 16 bit MS-DOS Alt Sistemi uyarısında " Kapat " değil de " Yoksay " tıklanırsa_? Bir şey değişir mi ki_?


    DEBUG.EXE


    Kod:
    -
    -L 0100 2 0 1
    C sürücüsünü okumada disk hatası
    -

    COMMAND.COM:

    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\>HDINFO.EXE
    
    C:\>

    DEBUG.EXE:

    ;................................................. .................................................. ..........................................

    N.B.:

    DEBUG.EXE HDINFO.EXE
    L
    R
    U CS:0000
    G CS:001E
    P[roceed]

    komutları, işe yaramaz zira COMMAND.COM anında kapanır.


    ;................................................. .................................................. ..........................................

    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\>DEBUG.EXE
    -
    -NHDINFO.EXE
    -L
    -R
    AX=0000  BX=0000  CX=03DF  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
    DS=0DD2  ES=0DD2  SS=0DE2  CS=0E17  IP=0000   NV UP EI PL NZ NA PO NC
    0E17:0000 1E            PUSH    DS
    -
    -U CS:0000
    0E17:0000 1E            PUSH    DS
    0E17:0001 2BC0          SUB     AX,AX
    0E17:0003 50            PUSH    AX
    0E17:0004 B8E20D        MOV     AX,0DE2
    0E17:0007 8ED8          MOV     DS,AX
    0E17:0009 8EC0          MOV     ES,AX
    0E17:000B E87500        CALL    0083
    0E17:000E B280          MOV     DL,80
    0E17:0010 B600          MOV     DH,00
    0E17:0012 B500          MOV     CH,00
    0E17:0014 B101          MOV     CL,01
    0E17:0016 B001          MOV     AL,01
    0E17:0018 B402          MOV     AH,02
    0E17:001A 8D1E0000      LEA     BX,[0000]
    0E17:001E CD13          INT     13
    -
    -G CS:001E
    
    AX=0201  BX=0000  CX=0001  DX=0080  SP=FFFC  BP=0000  SI=0000  DI=0000
    DS=0DE2  ES=0DE2  SS=0DE2  CS=0E17  IP=001E   NV UP EI PL ZR NA PE NC
    0E17:001E CD13          INT     13
    -P
    
    AX=8001  BX=0000  CX=0001  DX=0080  SP=FFFC  BP=0000  SI=0000  DI=0000
    DS=0DE2  ES=0DE2  SS=0DE2  CS=0E17  IP=0020   NV UP DI NG NZ AC PO CY
    0E17:0020 7301          JNB     0023
    -T
    
    AX=8001  BX=0000  CX=0001  DX=0080  SP=FFFC  BP=0000  SI=0000  DI=0000
    DS=0DE2  ES=0DE2  SS=0DE2  CS=0E17  IP=0022   NV UP DI NG NZ AC PO CY
    0E17:0022 CB            RETF
    -T
    
    AX=8001  BX=0000  CX=0001  DX=0080  SP=0000  BP=0000  SI=0000  DI=0000
    DS=0DE2  ES=0DE2  SS=0DE2  CS=0DD2  IP=0000   NV UP DI NG NZ AC PO CY
    0DD2:0000 CD20          INT     20
    -P
    
    Program normal olarak sonlandırıldı
    -




    ;................................................. .................................................. ..........................................

    DEBUG.EXE' de INT 13 komutu çalıştırıldığı anda ' P[roceed] ' ne oldu_?

    AH values for disk operation status: AH = 80h -> timeout (not ready)

    Return: C[arry]F[lag] set on error, i.e. N[ot]C[arry] ' clear ' -> C[arry]Y[es] ' set '. Bu, geçersiz ya da hatalı bir şeylerin olduğuna işaret eder.

    Zaten Y. Elektronik Mühendisi Ferdâ M. Tanyeri, hdinfo.asm dosyasındaki kodların açıklamalarında ' comment ' ne diyordu_?


    Kod:
    int	13h			;BIOS'tan yardım iste!
    jnc	devam_et		;Herşey normalse devam et!
    ret				;Anormal çıkış!
    ;................................................. .................................................. ..........................................

    Kısacası fırıldak çevirmek işe yaramaz. : )

    Özetle, sabit diske bodoslama erişebilen bu ve benzeri sembolik makina dili komutları, ancak ve ancak 80' ler & 90' lardaki işletim sistemlerinde çalışır, günümüzdekilerde çalışmaz, bu yüzden de yerli ve yabancı eski sembolik makina dili kitaplarındaki bu ve benzeri sabit diske bodoslama erişen kod örneklerinin tümü artık g e ç e r s i z d i r.

    Ne demek istiyoruz_?

    Martin Mystère zamanına ait olan bu ve benzeri virüsler ' [TIME | LOGIC] bombs ', hâlihazırda hiçbir şey yapamazdı, zira asri işletim sistemleri bu ve benzeri kodlara karşı çok hassastır.


    ;................................................. .................................................. ..........................................

    ' Batılı yazılımcılara özentiden mütevellit ' fiyakasından geçilmeyen Rus bir yazılımcının yazdığı virüs kodunda Microsoft's Rich Header misali bir şifreleme metodu vardır, ki programdaki adresi ve makina dili karşılığı da şudur:

    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\>DEBUG.EXE
    -
    -E CS:046A 3F 32 3E 36 21 20 53 3E 26 20 27 53 37 3A 36 5D
    -
    -D CS:046A 0479
    0D8D:0460                                3F 32 3E 36 21 20             ?2>6!
    0D8D:0470  53 3E 26 20 27 53 37 3A-36 5D                     S>& 'S7:6]
    -
    -Q
    
    C:\>
    Deşifresi nedir_?*

    İpucu: Her byte, bir başka byte ile XOR' lanacaktır, şöyle ki:

    3Fh XOR HexNumber

    32h XOR HexNumber

    ...................................
    ...................................

    36h XOR HexNumber

    5Dh XOR HexNumber

    00 <= HexNumber <= FFh

    Burada HexNumber' ı ve hâliyle Rus yazılımcı tarafından sözüm ona gizlenmiş [Flavor Anglice] mesajı istiyoruz tabii ki. : )

    * Zor olmasa da uğraştırıcı bir sorudur.



    İ ç t e n l i k l e...

    Sevgiyle...

  3. #33
    Ç. R. Düzenleme
    Üyelik Tarihi
    Nov 2015
    Mesajlar
    503

    Seviye: 40 
    Tecrübe: 1,794,875
    Sonraki Seviye: 2,111,327

    Beğenmiş
    2,397
    Beğenilmiş
    2,050
    Adı Geçen
    0 Konu
    Etiketlendiği
    0 Konu
    UNDOCUMENTED DOS V:





    Atlantis BA30: Santa Claus 9000' de Noel Baba ne diyordu_?

    "Baytlar"... Hafızada ayrılmış ilgili sahalara gidiyorlar!

    Rus yazılımcı ve Y. Elektronik Mühendisi Ferdâ M. Tanyeri' nin ' MS-DOS için ASSEMBLY ', Hard Disk' e şu şekildeki bodoslama dalma kodları, sistem tarafından engellediğinden, bir işe yaramadığı aşikârdır.

    Kod:
    AH = 02h	; Function No
    INT 13h		; DISK - READ SECTORS INTO MEMORY

    N.B.:

    Enteresandır ki, MBR' u okumayı bile beceremeyen bu Rus yazılımcı, klavyeden girilmesi istenilen tarihin USSR standardında olmasını istiyordu.

    Bay Bill ve benzeri Batılı yazılımcılara özentiden mütevellit fiyakasından geçilmeyen bu Rus yazılımcı, sözde efsane özde alelade şifreleme numarasında, trajikomik [Flavor Anglice] ibare yerine, ' kimi benzeri yazılımcıların yaptığı gibi ' kendisiyle iletişim kurulabilecek bir bağlantı noktasını ' mail, etc. ' kodlara gömseydi ' embedded codes ', bir daha hayatı boyunca USSR standardından bahsedemeyecekti, zira bu standart fücceten gidecek, tarafımızca bilkuvve ve bilfiil havaya uçurulacaktı. : )

    Ne demek istiyoruz_?

    Şu anda felsefeyle iştigal etmeye ne zamanımız ne de niyetimiz var, lakin sanal alemin derinliklerinde yok olup giden eski yazılarımızda defalarca tanıtladığımız gibi, çağın paradigması Ortak Atalardan Türeme Hipotezi' nden ' Descendentiae de Antecessoribus Communibus Hypotheticis ' türeyen ve dünyayı fethetmesine de ramak kalan ' Paneuropeanismus' un, binlerce yıllık Porphyrios Ağacından ' Arbor Porphyrii ' türeyen Filogenetik Ağaçtan ' Arbor Phylogenetica ' türeyen Hint-Avrupa Dillerinin Soyağacı ' Stemma linguarum Indoeuropaearum ' hipotezine göre Rusça diye bir dil y o k t u r, ki demek ki USSR standardı diye bir şey de yoktur, zira türemiştir, ki üremiştir, ki ıraksamış ıradır ' characteris [diductio, divergentis, divergentiae] ', ki hükümsüzdür.

    Her neyse.

    Peki Hard Disk' e erişilemez mi ki_? L[ow] L[evel] [programming] L[anguage]' de ' [[Sembolik] Makina Dili] ' imkânsız diye bir şey y o k t u r.

    MASM32' yi indirip kuruyoruz.

    32-bit Sembolik Makina Dili ' SUBSYSTEM: CONSOLE ':



    Kod:
    	TITLE	rbsmbr.asm
    	.386P
    includelib \masm32\lib\msvcrt.lib
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\shell32.lib
    if @Version gt 510
    .model	FLAT
    else
    _TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
    _TEXT	ENDS
    _DATA	SEGMENT DWORD USE32 PUBLIC 'DATA'
    _DATA	ENDS
    CONST	SEGMENT DWORD USE32 PUBLIC 'CONST'
    CONST	ENDS
    _BSS	SEGMENT DWORD USE32 PUBLIC 'BSS'
    _BSS	ENDS
    _TLS	SEGMENT DWORD USE32 PUBLIC 'TLS'
    _TLS	ENDS
    FLAT	GROUP _DATA, CONST, _BSS
    	ASSUME	CS: FLAT, DS: FLAT, SS: FLAT
    endif
    PUBLIC	_main
    EXTRN	_printf:NEAR
    EXTRN	_swprintf:NEAR
    EXTRN	_wcslen:NEAR
    EXTRN	__wcsnicmp:NEAR
    EXTRN	__imp__GetStdHandle@4:NEAR
    EXTRN	__imp__WriteFile@20:NEAR
    EXTRN	__imp__ReadFile@20:NEAR
    EXTRN	__imp__CloseHandle@4:NEAR
    EXTRN	__imp__GetCommandLineW@0:NEAR
    EXTRN	__imp__GlobalAlloc@8:NEAR
    EXTRN	__imp__GetLastError@0:NEAR
    EXTRN	__imp__CommandLineToArgvW@8:NEAR
    EXTRN	__imp__CreateFileW@28:NEAR
    
    _DATA	SEGMENT
    	align 4
    LC0	DB 'Boot-sector and MBR read utility.', 0Ah, 0Ah, 00
    	align 4
    LC1	DB 'rbsmbr[.exe] [DriveLetter: | mbr<number>:] [Filename[.ext]]', 0Ah, 00
    	align 2
    LC2	DB 'm', 00, 'b', 00, 'r', 00, 00, 00
    	align 4
    LC3	DB '\', 00, '\', 00, '.', 00, '\', 00, 'P', 00, 'h', 00, 'y', 00 
    	DB 's', 00, 'i', 00, 'c', 00, 'a', 00, 'l', 00, 'D', 00, 'r', 00
    	DB 'i', 00, 'v', 00, 'e', 00, '%', 00, 's', 00, 00, 00
    	align 2
    LC4	DB '\', 00, '\', 00, '.', 00, '\', 00, '%', 00, 's', 00, 00, 00
    LC5	DB 'Can not open %S', 0Ah, 00
    LC6	DB 'Error %d', 0Ah, 00
    LC7	DB 'Read %d bytes instead of %d', 0Ah, 00
    LC8	DB 'Can not access STDOUT', 0Ah, 00
    LC9	DB 'Can not create output file %S', 0Ah, 00
    	align 4
    LC10	DB 'Written %d bytes instead of %d', 0Ah, 00
    _DATA	ENDS
    
    _TEXT	SEGMENT
    _start:
    _main	PROC	NEAR
    	push	ebp					;
    	mov	ebp, esp				;,
    	sub	esp, 48h				;,
    	and	esp, 0FFFFFFF0h				;,
    	mov	eax, 0					; tmp0,
    	add	eax, 0Fh				; tmp1,
    	add	eax, 0Fh				; tmp2,
    	shr	eax, 4					; tmp3,
    	sal	eax, 4					; tmp4,
    	mov	DWORD PTR [ebp-40], eax			;, tmp4
    	mov	eax, DWORD PTR [ebp-40]			;,
    	call	DWORD PTR __imp__GetCommandLineW@0	;
    	mov	DWORD PTR [ebp-4], eax			; CmdLineW, tmp5
    	lea	eax, [ebp-12]				; tmp6,
    	mov	DWORD PTR [esp+4], eax			;, tmp6
    	mov	eax, DWORD PTR [ebp-4]			; CmdLineW, CmdLineW
    	mov	DWORD PTR [esp], eax			;, CmdLineW
    	call	DWORD PTR __imp__CommandLineToArgvW@8	;
    	sub	esp, 8					;,
    	mov	DWORD PTR [ebp-8], eax			; argv,
    	cmp	DWORD PTR [ebp-12], 1			; argc,
    	jg	L1					;,
    	mov	DWORD PTR [esp], OFFSET FLAT:LC0	;,
    	call	_printf					;
    	mov	DWORD PTR [esp], OFFSET FLAT:LC1	;,
    	call	_printf					;
    	mov	DWORD PTR [ebp-36], 0FFFFFFFFh		; <result>,
    	jmp	L0					;
    L1:
    	mov	DWORD PTR [esp+8], 3			;,
    	mov	DWORD PTR [esp+4], OFFSET FLAT:LC2	;,
    	mov	eax, DWORD PTR [ebp-8]			; tmp7, argv
    	add	eax, 4					; tmp7,
    	mov	eax, DWORD PTR [eax]			; tmp8,
    	mov	DWORD PTR [esp], eax			;, tmp8
    	call	__wcsnicmp				;
    	test	eax, eax				; tmp9
    	jnz	L2					;,
    	mov	eax, DWORD PTR [ebp-8]			; tmp10, argv
    	add	eax, 4					; tmp10,
    	mov	eax, DWORD PTR [eax]			; tmp11,
    	mov	DWORD PTR [esp], eax			;, tmp11
    	call	_wcslen					;
    	add	eax, eax				; tmp12
    	add	eax, 24h				; tmp13,
    	mov	DWORD PTR [esp+4], eax			;, tmp13
    	mov	DWORD PTR [esp], 0			;,
    	call	DWORD PTR __imp__GlobalAlloc@8		;
    	sub	esp, 8					;,
    	mov	DWORD PTR [ebp-16], eax			; Path,
    	mov	eax, DWORD PTR [ebp-8]			; tmp14, argv
    	add	eax, 4					; tmp14,
    	mov	eax, DWORD PTR [eax]			; tmp15,
    	add	eax, 6					; tmp15,
    	mov	DWORD PTR [esp+8], eax			;, tmp15
    	mov	DWORD PTR [esp+4], OFFSET FLAT:LC3	;,
    	mov	eax, DWORD PTR [ebp-16]			; Path, Path
    	mov	DWORD PTR [esp], eax			;, Path
    	call	_swprintf				;
    	mov	DWORD PTR [ebp-32], eax			; n,
    	cmp	DWORD PTR [ebp-32], 0			; n,
    	jz	L3					;,
    	mov	eax, DWORD PTR [ebp-32]			; n, n
    	add	eax, eax				; tmp16
    	add	eax, DWORD PTR [ebp-16]			; tmp17, Path
    	sub	eax, 2					; tmp18,
    	mov	WORD PTR [eax], 0			;,
    	jmp	L3					;
    L2:
    	mov	eax, DWORD PTR [ebp-8]			; tmp19, argv
    	add	eax, 4					; tmp19,
    	mov	eax, DWORD PTR [eax]			; tmp20,
    	mov	DWORD PTR [esp], eax			;, tmp20
    	call	_wcslen					;
    	add	eax, eax				; tmp21
    	add	eax, 0Ah				; tmp22,
    	mov	DWORD PTR [esp+4], eax			;, tmp22
    	mov	DWORD PTR [esp], 0			;,
    	call	DWORD PTR __imp__GlobalAlloc@8		;
    	sub	esp, 8					;,
    	mov	DWORD PTR [ebp-16], eax			; Path,
    	mov	eax, DWORD PTR [ebp-8]			; tmp23, argv
    	add	eax, 4					; tmp23,
    	mov	eax, DWORD PTR [eax]			; tmp24,
    	mov	DWORD PTR [esp+8], eax			;, tmp24
    	mov	DWORD PTR [esp+4], OFFSET FLAT:LC4	;,
    	mov	eax, DWORD PTR [ebp-16]			; Path, Path
    	mov	DWORD PTR [esp], eax			;, Path
    	call	_swprintf				;
    L3:
    	mov	DWORD PTR [esp+4], 200h			;,
    	mov	DWORD PTR [esp], 0			;,
    	call	DWORD PTR __imp__GlobalAlloc@8		;
    	sub	esp, 8					;,
    	mov	DWORD PTR [ebp-24], eax			; buf,
    	mov	DWORD PTR [esp+24], 0			;,
    	mov	DWORD PTR [esp+20], 0			;,
    	mov	DWORD PTR [esp+16], 3			;,
    	mov	DWORD PTR [esp+12], 0			;,
    	mov	DWORD PTR [esp+8], 3			;,
    	mov	DWORD PTR [esp+4], 80000000h		;,
    	mov	eax, DWORD PTR [ebp-16]			; Path, Path
    	mov	DWORD PTR [esp], eax			;, Path
    	call	DWORD PTR __imp__CreateFileW@28		;
    	sub	esp, 1Ch				;,
    	mov	DWORD PTR [ebp-20], eax			; h, tmp25
    	cmp	DWORD PTR [ebp-20], 0			; h,
    	jz	L5					;,
    	cmp	DWORD PTR [ebp-20], 0FFFFFFFFh		; h,
    	jz	L5					;,
    	jmp	L4					;
    L5:
    	mov	eax, DWORD PTR [ebp-16]			; Path, Path
    	mov	DWORD PTR [esp+4], eax			;, Path
    	mov	DWORD PTR [esp], OFFSET FLAT:LC5	;,
    	call	_printf					;
    	call	DWORD PTR __imp__GetLastError@0		;
    	mov	DWORD PTR [esp+4], eax			;, tmp26
    	mov	DWORD PTR [esp], OFFSET FLAT:LC6	;,
    	call	_printf					;
    	mov	DWORD PTR [ebp-36], 0FFFFFFFEh		; <result>,
    	jmp	L0					;
    L4:
    	mov	DWORD PTR [esp+16], 0			;,
    	lea	eax, [ebp-28]				; tmp27,
    	mov	DWORD PTR [esp+12], eax			;, tmp27
    	mov	DWORD PTR [esp+8], 200h			;,
    	mov	eax, DWORD PTR [ebp-24]			; buf, buf
    	mov	DWORD PTR [esp+4], eax			;, buf
    	mov	eax, DWORD PTR [ebp-20]			; h, h
    	mov	DWORD PTR [esp], eax			;, h
    	call	DWORD PTR __imp__ReadFile@20		;
    	sub	esp, 14h				;,
    	mov	eax, DWORD PTR [ebp-20]			; h, h
    	mov	DWORD PTR [esp], eax			;, h
    	call	DWORD PTR __imp__CloseHandle@4		;
    	sub	esp, 4					;,
    	cmp	DWORD PTR [ebp-28], 200h		; dw,
    	jz	L6					;,
    	mov	DWORD PTR [esp+8], 200h			;,
    	mov	eax, DWORD PTR [ebp-28]			; dw, dw
    	mov	DWORD PTR [esp+4], eax			;, dw
    	mov	DWORD PTR [esp], OFFSET FLAT:LC7	;,
    	call	_printf					;
    	call	DWORD PTR __imp__GetLastError@0		;
    	mov	DWORD PTR [esp+4], eax			;, tmp28
    	mov	DWORD PTR [esp], OFFSET FLAT:LC6	;,
    	call	_printf					;
    	mov	DWORD PTR [ebp-36], 0FFFFFFFEh		; <result>,
    	jmp	L0					;
    L6:
    	cmp	DWORD PTR [ebp-12], 2			; argc,
    	jnz	L7					;,
    	mov	DWORD PTR [esp], 0FFFFFFF5h		;,
    	call	DWORD PTR __imp__GetStdHandle@4		;
    	sub	esp, 4					;,
    	mov	DWORD PTR [ebp-20], eax			; h, tmp29
    	cmp	DWORD PTR [ebp-20], 0			; h,
    	jz	L8					;,
    	cmp	DWORD PTR [ebp-20], 0FFFFFFFFh		; h,
    	jz	L8					;,
    	jmp	L9					;
    L8:
    	mov	DWORD PTR [esp], OFFSET FLAT:LC8	;,
    	call	_printf					;
    	call	DWORD PTR __imp__GetLastError@0		;
    	mov	DWORD PTR [esp+4], eax			;, tmp30
    	mov	DWORD PTR [esp], OFFSET FLAT:LC6	;,
    	call	_printf					;
    	mov	DWORD PTR [ebp-36], 0FFFFFFFEh		; <result>,
    	jmp	L0					;
    L7:
    	mov	DWORD PTR [esp+24], 0			;,
    	mov	DWORD PTR [esp+20], 0			;,
    	mov	DWORD PTR [esp+16], 1			;,
    	mov	DWORD PTR [esp+12], 0			;,
    	mov	DWORD PTR [esp+8], 0			;,
    	mov	DWORD PTR [esp+4], 40000000h		;,
    	mov	eax, DWORD PTR [ebp-8]			; tmp31, argv
    	add	eax, 8					; tmp31,
    	mov	eax, DWORD PTR [eax]			; tmp32,
    	mov	DWORD PTR [esp], eax			;, tmp32
    	call	DWORD PTR __imp__CreateFileW@28		;
    	sub	esp, 28					;,
    	mov	DWORD PTR [ebp-20], eax			; h, tmp33
    	cmp	DWORD PTR [ebp-20], 0			; h,
    	jz	L10					;,
    	cmp	DWORD PTR [ebp-20], 0FFFFFFFFh	 	; h,
    	jz	L10					;,
    	jmp	L9					;
    L10:
    	mov	eax, DWORD PTR [ebp-8]			; tmp34, argv
    	add	eax, 8					; tmp34,
    	mov	eax, DWORD PTR [eax]			; tmp35,
    	mov	DWORD PTR [esp+4], eax			;, tmp35
    	mov	DWORD PTR [esp], OFFSET FLAT:LC9	;,
    	call	_printf					;
    	call	DWORD PTR __imp__GetLastError@0		;
    	mov	DWORD PTR [esp+4], eax			;, tmp36
    	mov	DWORD PTR [esp], OFFSET FLAT:LC6	;,
    	call	_printf					;
    	mov	DWORD PTR [ebp-36], 0FFFFFFFEh		; <result>,
    	jmp	L0					;
    L9:
    	mov	DWORD PTR [esp+16], 0			;,
    	lea	eax, [ebp-28]				; tmp37,
    	mov	DWORD PTR [esp+12], eax			;, tmp37
    	mov	DWORD PTR [esp+8], 200h			;,
    	mov	eax, DWORD PTR [ebp-24]			; buf, buf
    	mov	DWORD PTR [esp+4], eax			;, buf
    	mov	eax, DWORD PTR [ebp-20]			; h, h
    	mov	DWORD PTR [esp], eax			;, h
    	call	DWORD PTR __imp__WriteFile@20		;
    	sub	esp, 20					;,
    	cmp	DWORD PTR [ebp-28], 200h		; dw,
    	jz	@F					;,
    	mov	DWORD PTR [esp+8], 200h			;,
    	mov	eax, DWORD PTR [ebp-28]			; dw, dw
    	mov	DWORD PTR [esp+4], eax			;, dw
    	mov	DWORD PTR [esp], OFFSET FLAT:LC10	;,
    	call	_printf					;
    	call	DWORD PTR __imp__GetLastError@0		;
    	mov	DWORD PTR [esp+4], eax			;, tmp38
    	mov	DWORD PTR [esp], OFFSET FLAT:LC6	;,
    	call	_printf					;
    	mov	DWORD PTR [ebp-36], 0FFFFFFFEh		; <result>,
    	jmp	L0					;
    @@:
    	mov	eax, DWORD PTR [ebp-20]			; h, h
    	mov	DWORD PTR [esp], eax			;, h
    	call	DWORD PTR __imp__CloseHandle@4		;
    	sub	esp, 4					;,
    L0:
    	mov	eax, DWORD PTR [ebp-36]			; <result>, <result>
    	leave
    	ret
    _main	ENDP
    _TEXT	ENDS
    END	_start

    _ Compile ' ml.exe -> rbsmbr.obj ' & Link ' link.exe -> rbsmbr.exe '

    _ DEBUG.EXE: L[oad] [DS:]0100 [C:] 2 [logical sector] 0 [number] 1 [only load one sector = 0200h bytes]

    Y. Elektronik Mühendisi Ferdâ M. Tanyeri' nin MS-DOS için ASSEMBLY adlı eserindeki bu direktif çalıştırıldığında, işletim sistemi, şu uyarı mesajını ekrana gönderir.


    Kod:
    -
    -L 0100 2 0 1
    16 bit MS-DOS Alt Sistemi

    C:\WINDOWS\system32\debug.exe
    Uygulama desteklenmeyen bir eylem gerçekleştirdi: Sabit diske doğrudan erişim.
    Bu, uygulamanın yanlış çalışmasına neden olabilir. Uygulamayı bitirmek için Kapat'ı seçin.

    Kapat Yoksay

    Kapat tıklanırsa DEBUG.EXE anında kapanır. Yoksay tıklanırsa da, DEBUG.EXE şu mesajı görüntüler:

    Kod:
    -
    -L 0100 2 0 1
    C sürücüsünü okumada disk hatası
    -
    Bir başka deyişle_?

    _ Hard disk ' C: ' üzerindeki 0. logical sector DEBUG.EXE' de, DS:0100 - DS:02FF adres aralığına okunamaz.

    Fakat RBSMSR.EXE, sistemin bu ve benzeri müdahalelerinden bağımsızdır. ' Neden_? Hard Disk' e bodoslama dalmaz da ondan. '

    N.B.: C[:]L[ogical]S[e]CT[o]R0.EXC


    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\MASM32\BIN>RBSMBR.EXE
    Boot-sector and MBR read utility.
    
    rbsmbr[.exe] [DriveLetter: | mbr<number>:] [Filename[.ext]]
    
    C:\MASM32\BIN>RBSMBR.EXE C: CLSCTR0.EXC
    
    C:\MASM32\BIN>DEBUG.EXE CLSCTR0.EXC
    -
    -D CS:0100 02FF
    0D8D:0100  EB 52 90 4E 54 46 53 20-20 20 20 00 02 08 00 00   .R.NTFS    .....
    0D8D:0110  00 00 00 00 00 F8 00 00-3F 00 FF 00 3F 00 00 00   ........?...?...
    0D8D:0120  00 00 00 00 80 00 80 00-33 0A 80 02 00 00 00 00   ........3.......
    0D8D:0130  00 00 0C 00 00 00 00 00-A3 00 28 00 00 00 00 00   ..........(.....
    0D8D:0140  F6 00 00 00 01 00 00 00-8A CC DA 40 00 DB 40 F0   ...........@..@.
    0D8D:0150  00 00 00 00 FA 33 C0 8E-D0 BC 00 7C FB B8 C0 07   .....3.....|....
    0D8D:0160  8E D8 E8 16 00 B8 00 0D-8E C0 33 DB C6 06 0E 00   ..........3.....
    0D8D:0170  10 E8 53 00 68 00 0D 68-6A 02 CB 8A 16 24 00 B4   ..S.h..hj....$..
    0D8D:0180  08 CD 13 73 05 B9 FF FF-8A F1 66 0F B6 C6 40 66   ...s......f...@f
    0D8D:0190  0F B6 D1 80 E2 3F F7 E2-86 CD C0 ED 06 41 66 0F   .....?.......Af.
    0D8D:01A0  B7 C9 66 F7 E1 66 A3 20-00 C3 B4 41 BB AA 55 8A   ..f..f. ...A..U.
    0D8D:01B0  16 24 00 CD 13 72 0F 81-FB 55 AA 75 09 F6 C1 01   .$...r...U.u....
    0D8D:01C0  74 04 FE 06 14 00 C3 66-60 1E 06 66 A1 10 00 66   t......f`..f...f
    0D8D:01D0  03 06 1C 00 66 3B 06 20-00 0F 82 3A 00 1E 66 6A   ....f;. ...:..fj
    0D8D:01E0  00 66 50 06 53 66 68 10-00 01 00 80 3E 14 00 00   .fP.Sfh.....>...
    0D8D:01F0  0F 85 0C 00 E8 B3 FF 80-3E 14 00 00 0F 84 61 00   ........>.....a.
    0D8D:0200  B4 42 8A 16 24 00 16 1F-8B F4 CD 13 66 58 5B 07   .B..$.......fX[.
    0D8D:0210  66 58 66 58 1F EB 2D 66-33 D2 66 0F B7 0E 18 00   fXfX..-f3.f.....
    0D8D:0220  66 F7 F1 FE C2 8A CA 66-8B D0 66 C1 EA 10 F7 36   f......f..f....6
    0D8D:0230  1A 00 86 D6 8A 16 24 00-8A E8 C0 E4 06 0A CC B8   ......$.........
    0D8D:0240  01 02 CD 13 0F 82 19 00-8C C0 05 20 00 8E C0 66   ........... ...f
    0D8D:0250  FF 06 10 00 FF 0E 0E 00-0F 85 6F FF 07 1F 66 61   ..........o...fa
    0D8D:0260  C3 A0 F8 01 E8 09 00 A0-FB 01 E8 03 00 FB EB FE   ................
    0D8D:0270  B4 01 8B F0 AC 3C 00 74-09 B4 0E BB 07 00 CD 10   .....<.t........
    0D8D:0280  EB F2 C3 0D 0A 44 69 73-6B 20 6F 6B 75 6D 61 20   .....Disk okuma
    0D8D:0290  68 61 74 61 73 8D 00 0D-0A 4E 54 4C 44 52 20 65   hatas....NTLDR e
    0D8D:02A0  6B 73 69 6B 00 0D 0A 4E-54 4C 44 52 20 73 8D 6B   ksik...NTLDR s.k
    0D8D:02B0  8D 9F 74 8D 72 8D 6C 64-8D 00 0D 0A 59 65 6E 69   ..t.r.ld....Yeni
    0D8D:02C0  64 65 6E 20 62 61 9F 6C-61 74 3A 20 43 74 72 6C   den ba.lat: Ctrl
    0D8D:02D0  2B 41 6C 74 2B 44 65 6C-0D 0A 00 65 6C 20 74 6F   +Alt+Del...el to
    0D8D:02E0  20 72 65 73 74 61 72 74-0D 0A 00 00 00 00 00 00    restart........
    0D8D:02F0  00 00 00 00 00 00 00 00-83 97 A5 BA 00 00 55 AA   ..............U.
    -
    -Q
    
    C:\MASM32\BIN>




    N.B.: DriveLetter: C:, D:, E:, . . .

    Y. Elektronik Mühendisi Ferdâ M. Tanyeri' nin MS-DOS için ASSEMBLY adlı eserindeki INT 13h' ı içeren tüm sembolik makina dili kaynak kod dosyaları ' *.ASMs, ee.g., hdinfo.asm ve diğerleri ', yürütülebilir dosyalara dönüştürülüp ' *.COM, *.EXE ' çalıştırıldıklarında, işletim sistemi, şu uyarı mesajını ekrana gönderir.

    16 bit MS-DOS Alt Sistemi

    C:\command.com
    Uygulama desteklenmeyen bir eylem gerçekleştirdi: Sabit diske doğrudan erişim.
    Bu, uygulamanın yanlış çalışmasına neden olabilir. Uygulamayı bitirmek için Kapat'ı seçin.

    Kapat Yoksay

    Kapat tıklanırsa COMMAND.COM anında kapanır. Yoksay tıklanırsa da, COMMAND.COM ana dizine geri döner. ' i.e., hdinfo.exe çalışmaz '*

    * Arka planda neler olduğu önceki yazımızda açıklanmıştı, şöyle ki:

    DEBUG.EXE' de INT 13h çalıştırıldığı anda ' P[roceed] ' ne olmuştu_?

    _ 16 bit MS-DOS Alt Sistemi mesajı görüntülenmiş ve Kapat tıklanmışsa, DEBUG.EXE anında kapanmıştı.

    _ Ya da DEBUG.EXE: NHDINFO.EXE ile INT 13h' ın adresinden ' CS:001E ' sonraki adreslere CS:0020, CS:0022,... ' erişmeye ' program çalıştırılmaya ' zorlanmışsa, program sonlandırılmış ve şu hatalar görüntülenmişti.

    AH values for disk operation status: AH = 80h -> timeout (not ready)

    Return: C[arry]F[lag] set on error, i.e. N[ot]C[arry] ' clear ' -> C[arry]Y[es] ' set '. Bu, geçersiz ya da hatalı bir şeylerin olduğuna işaret eder.


    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\>HDINFO.EXE

    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\>DEBUG.EXE HDINFO.EXE
    -L
    -G CS:001E
    
    AX=0201  BX=0000  CX=0001  DX=0080  SP=FFFC  BP=0000  SI=0000  DI=0000
    DS=0DE2  ES=0DE2  SS=0DE2  CS=0E17  IP=001E   NV UP EI PL ZR NA PE NC
    0E17:001E CD13          INT     13
    -P

    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\>HDINFO.EXE
    
    C:\>

    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\>DEBUG.EXE
    -
    -NHDINFO.EXE
    -
    -G CS:0020
    
    Program normal olarak sonlandırıldı
    -




    Fakat RBSMSR.EXE, sistemin bu ve benzeri müdahalelerinden bağımsızdır. ' Neden_? Hard Disk' e bodoslama dalmaz da ondan. '

    N.B.: C[:]P[hysical]S[e]CT[o]R0.EXC

    Rus yazılımcının önce okuyup, sonra diske kaydedip ' filename.ext ', pseudo' sunu üzerine yazıp klavyeden girilen tarihe erişildiğinde de havaya uçurmaya çalıştığı meşhur MBR ' Master Boot Record ' işte budur. : )


    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\MASM32\BIN>RBSMBR.EXE
    Boot-sector and MBR read utility.
    
    rbsmbr[.exe] [DriveLetter: | mbr<number>:] [Filename[.ext]]
    
    C:\MASM32\BIN>RBSMBR.EXE MBR0: CPSCTR0.EXC
    
    C:\MASM32\BIN>DEBUG.EXE CPSCTR0.EXC
    -
    -D CS:0100 02FF
    0D8D:0100  33 C0 8E D0 BC 00 7C FB-50 07 50 1F FC BE 1B 7C   3.....|.P.P....|
    0D8D:0110  BF 1B 06 50 57 B9 E5 01-F3 A4 CB BD BE 07 B1 04   ...PW...........
    0D8D:0120  38 6E 00 7C 09 75 13 83-C5 10 E2 F4 CD 18 8B F5   8n.|.u..........
    0D8D:0130  83 C6 10 49 74 19 38 2C-74 F6 A0 B5 07 B4 07 8B   ...It.8,t.......
    0D8D:0140  F0 AC 3C 00 74 FC BB 07-00 B4 0E CD 10 EB F2 88   ..<.t...........
    0D8D:0150  4E 10 E8 46 00 73 2A FE-46 10 80 7E 04 0B 74 0B   N..F.s*.F..~..t.
    0D8D:0160  80 7E 04 0C 74 05 A0 B6-07 75 D2 80 46 02 06 83   .~..t....u..F...
    0D8D:0170  46 08 06 83 56 0A 00 E8-21 00 73 05 A0 B6 07 EB   F...V...!.s.....
    0D8D:0180  BC 81 3E FE 7D 55 AA 74-0B 80 7E 10 00 74 C8 A0   ..>.}U.t..~..t..
    0D8D:0190  B7 07 EB A9 8B FC 1E 57-8B F5 CB BF 05 00 8A 56   .......W.......V
    0D8D:01A0  00 B4 08 CD 13 72 23 8A-C1 24 3F 98 8A DE 8A FC   .....r#..$?.....
    0D8D:01B0  43 F7 E3 8B D1 86 D6 B1-06 D2 EE 42 F7 E2 39 56   C..........B..9V
    0D8D:01C0  0A 77 23 72 05 39 46 08-73 1C B8 01 02 BB 00 7C   .w#r.9F.s......|
    0D8D:01D0  8B 4E 02 8B 56 00 CD 13-73 51 4F 74 4E 32 E4 8A   .N..V...sQOtN2..
    0D8D:01E0  56 00 CD 13 EB E4 8A 56-00 60 BB AA 55 B4 41 CD   V......V.`..U.A.
    0D8D:01F0  13 72 36 81 FB 55 AA 75-30 F6 C1 01 74 2B 61 60   .r6..U.u0...t+a`
    0D8D:0200  6A 00 6A 00 FF 76 0A FF-76 08 6A 00 68 00 7C 6A   j.j..v..v.j.h.|j
    0D8D:0210  01 6A 10 B4 42 8B F4 CD-13 61 61 73 0E 4F 74 0B   .j..B....aas.Ot.
    0D8D:0220  32 E4 8A 56 00 CD 13 EB-D6 61 F9 C3 47 65 87 65   2..V.....a..Ge.e
    0D8D:0230  72 73 69 7A 20 62 94 6C-81 6D 20 74 61 62 6C 6F   rsiz b.l.m tablo
    0D8D:0240  73 75 00 98 9F 6C 65 74-69 6D 20 73 69 73 74 65   su...letim siste
    0D8D:0250  6D 69 20 79 81 6B 6C 65-6D 65 20 68 61 74 61 73   mi y.kleme hatas
    0D8D:0260  8D 00 98 9F 6C 65 74 69-6D 20 73 69 73 74 65 6D   ....letim sistem
    0D8D:0270  69 20 79 6F 6B 00 79 73-74 65 6D 00 00 00 00 00   i yok.ystem.....
    0D8D:0280  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0D8D:0290  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0D8D:02A0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0D8D:02B0  00 00 00 00 00 2C 43 62-CA 0F CA 0F 00 00 80 01   .....,Cb........
    0D8D:02C0  01 00 07 FE FF FF 3F 00-00 00 34 0A 80 02 00 00   ......?...4.....
    0D8D:02D0  C1 FF 0F FE FF FF 73 0A-80 02 8D 9B D0 06 00 00   ......s.........
    0D8D:02E0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0D8D:02F0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA   ..............U.
    -
    -Q
    
    C:\MASM32\BIN>




    N.B.: mbr<number>: mbr0, mbr1, mbr2, . . .

    Y. Elektronik Mühendisi Ferdâ M. Tanyeri' nin MS-DOS için ASSEMBLY adlı eserinde dediği gibi, MBR' un 55 AA ile sona erdiğine dikkat edilmelidir.

    Hülasa, RBSMBR.EXE, her lojik sürücünün boot record' unu ve her fiziksel sürücünün tüm sektörlerini okur ve dosya olarak da diske kaydeder ve sistem kendisine karışmaz. Doğrusu enteresan. : )


    Teknik yazılardan bunalan dostlarımız ve eski dostumuz Victoryv için:






    İ ç t e n l i k l e...

    Sevgiyle...

  4. #34
    Ç. R. Düzenleme
    Üyelik Tarihi
    Nov 2015
    Mesajlar
    503

    Seviye: 40 
    Tecrübe: 1,794,875
    Sonraki Seviye: 2,111,327

    Beğenmiş
    2,397
    Beğenilmiş
    2,050
    Adı Geçen
    0 Konu
    Etiketlendiği
    0 Konu
    UNDOCUMENTED DOS VI:





    Atlantis BA32: Mucize Çocuk' ta Vincent Phybes ne diyordu_?

    Hangi bilgisayar olursa olsun, birçok dili konuşabilir. Assembler, Pascal vs. gibi diller... Bunlar kompütere harika programlar uygulamasını sağlar... Oysa bu dilleri çok az kişi bilir. Programcıların çoğu öğrenmesi kolay ama kısıtlı bir dil olan BASIC'den yararlanırlar.

    Y. Elektronik Mühendisi Ferdâ M. Tanyeri, Assembly - Programlama Sanatı adlı eserinde ne diyordu_?

    BÖLÜM XII-- BASIC -- ASSEMBLY İŞBİRLİĞİ

    Bu bölümün içeriği : BASIC programlarından ASSEMBLY alt programlarına erişim.

    Bir çok programcı ilk olarak BASIC programlama dilini öğrenmiştir. En kolay öğrenebilinen BASIC dili bilgisayar programcılığına soyunan her öğrencinin genelde ilk adımıdır. Zaten bu dilin tüm anlamı da çiçeği burnunda programcı adaylarına programcılık hakkında ilk fikirleri vermektir.

    Kitabın bu bölümünde daha çok BASIC programlarından ASSEMBLY rutinlerine bilgi aktarmayı, bu bilgileri ASSEMBLY dilinde yazılmış programlarla işlemeyi ve sonucu BASIC programına aktarmayı öğrenecek, birkaç örnekle BASIC-ASSEMBLY işbirliği üzerinde çalışmalar yapacağız.

    BASIC derleyici (compiler) değil yorumlayıcı (interpreter) prensibine göre çalışan bir programlama dilidir.

    Derleyici prensibiyle çalışan programlama dilleri (COBOL, PASCAL, C ve hatta ASSEMBLY) MS-DOS işletim sisteminde derleme sonucu olarak genelde .OBJ türü bir dosya meydana getirirler. Bu tür dosyaları LINK sistem programı ile .EXE dosyaları yani icra edilebilir makine kodu dosyalarına çevirir ve çalıştırırız.

    Buna karşılık yorumlayıcı (interpreter) prensibine göre çalışan BASIC programlama lisanının kendisi aslında çalışan programdır. Programcının 'program satırları' BASIC programının bilgilerini (data) meydana getirir ve bu satırları birer birer icra eder. BASIC'te .OBJ veya .EXE türü dosyalar olmayacağından diğer programlama dillerinde yazılmış dosyalarla BASIC'in işbirliği yapması oldukça zordur.

    Ana belleğe (RAM) çağırılan programı işletim sistemi bulduğu uygun bir yere yerleştirir. Çeşitli dillerle yazılıp derlenmiş ve .OBJ dosyaları yaratılmış programlar LINK ile kombine edilip tek program haline geldiklerinden elde edilen .EXE dosyası bir bütündür ve işletim sistemi bunu yüklemekte zorluk çekmez.

    BASIC'te bunu gerçekleştiremediğimiz için izlememiz gereken yol oldukça uzar. BASIC dışı dillerden ASSEMBLY'e ulaşmak için CALL, BASIC'ten ise USR komutu kullanılır. (Bazı değişik BASIC versionlarında CALL komutu da bulunur, fakat biz tüm versionlar için geçerli olan USR komutuyla çalışacağız!) En büyük zorluğu da bu komutun kullanımında yaşayacağız. Çünkü BASIC programına çağırılacak olan ASSEMBLY programının ana bellekte bulunabileceği adresi biz bir programcı olarak bildirmeye mecburuz. Unutmayın ki bu tür programlararası alışverişlerde fiziksel olarak birbirinden ayrı iki program çalışmakta ve işletim sistemi sadece birini (BASIC) ana belleğe yüklemekte. Buna karşılık .OBJ dosyalarından LINK ile yaratılmış olan .EXE dosyası işletim sistemi tarafından bir bütün olarak görülüyor ve ana belleğe yüklenmesi esnasında (istersek birçok .OBJ dosyasını kombine etmiş olalım!) hiçbir güçlük ortaya çıkmıyor.





    ;................................................. .................................................. ..........................................

    N.B.:

    Her ne kadar hem Vincent Phybes hem de Y. Elektronik Mühendisi Ferdâ M. Tanyeri, haklı olsalar da göz ardı edilmemesi gereken bir şey de vardır, ki şudur:

    L[ow] L[evel] [programming] L[anguage] ' [Sembolik] Makina Dili: [ASSEMBLY] ' ile H[igh] L[evel] [programming] L[anguages] ' [Sembolik] Makina Dili haricindekiler ', en azından bize göre, karşılaştırılamaz. Neden_?

    Antik Yunan Filozofu ' philosophus Graecus antiquus /Muallim-i Evvel ' Aristoteles' in kıyas teorisine göre ' theoria syllogismi categorici in logica Aristotelicae ', HLLs birbirleriyle kıyaslanabilir, HLLs ile LLL d e ğ i l.


    ;................................................. .................................................. ..........................................

    Hemen ardından da Y. Elektronik Mühendisi Ferdâ M. Tanyeri tarafından iki misal sunulur, ki şunlardır:

    _ Desimal - Heksadesimal çeviri:

    DESIHEKS.BAS [BASIC] & BINHEKS.ASM [ASSEMBLY]:

    Desimal - Heksadesimal çeviri için sunulan bu dosyalarda herhangi bir sorun yok.






    _ Heksadesimal - Decimal çeviri:

    HEKSIDES.BAS [BASIC] & HEKSBIN.ASM [ASSEMBLY]:

    Nihayetinde ne deniliyordu_? : )


    Haydi bakalım, kolay gelsin. Bu programı ' HEKSIDES.BAS [BASIC] & HEKSBIN.ASM [ASSEMBLY] ' çalıştırabilirseniz bir önceki örneği ' DESIHEKS.BAS [BASIC] & BINHEKS.ASM [ASSEMBLY] ' anlamışsınız demektir. Programı 'süslemek' sizlerin becerisine kalmış!!


    Y. Elektronik Mühendisi Ferdâ M. Tanyeri, Assembly - Programlama Sanatı' nda ne diyordu_?

    HEKSIDES PROGRAMI

    Daha az bir açıklama ile sizlere başka bir örnekle HEKSIDES programını sunuyoruz. Adından da belli olduğu gibi bu program heksadesimal bir değeri desimal bir değere çevirip ekrana yansıtıyor. BASIC ve ASSEMBLY programlarının listesini ardarda sıralıyor, aralarındaki bilgi alışverişi için gereken işlemleri siz okuyucuların çabasına bırakıyoruz!

    Tamam da, Heksadesimal - Decimal çeviri dosyaları h a f a k a n, zira, dizgi hatasından olsa gerek, hatalarla doludur. Velhasıl, öncelik, nerede kaldı ki programları 'süslemek', düzeltmektir, şöyle ki:


    BASIC HEKSIDES.BAS programı ' ya şudur ':


    Kod:
    10 DEFINT A-Z
    20 DEF SEG = &H0
    30 DEF USR0 = 0
    40 INPUT "Heksadesimal Numarayi Girin "; N
    50 D = USR0 (N) : PRINT
    60 PRINT "Desimal karsiligi : "; N
    70 PRINT
    80 GOTO 40
    BASIC HEKSIDES.BAS programı ' ya da budur ':

    Kod:
    10 DEFINT A-Z
    20 DEF SEG = &H0
    30 DEF USR0 = 0
    40 INPUT "Heksadesimal Numarayi Girin "; D
    50 N = USR0 (D) : PRINT
    60 PRINT "Desimal karsiligi : "; D
    70 PRINT
    80 GOTO 40
    Görüldüğü gibi bu program önce ASSEMBLY rutinini çağırıyor sonra geri gelen değeri ekrana gönderiyor.

    ASSEMBLY HEKSBIN&.ASM programı ' da budur ':

    _ 16-bit Sembolik Makina Dili:


    Kod:
    ;HEKSBIN& -- Heksadesimal değerleri biner değere çevirip
    ; sonucu çağıran BASIC programına yollayan ASSEMBLY rutini.
    ;
    ; !!!!!! Yalnız BASIC programlarından çağırılır !!!!!!
    ;
    ;******************************************************
    ;
    heksbin   segment
    
    ana_prog  proc far
    
      assume  cs:heksbin
    ;
    ;Klavyeden heksadesimal değer gir ve bu değeri biner değere çevir!
    ;
    ;DX rejisterini başlangıç değeri olarak sıfırla!
    ;
      mov	dx, 0
    ;
    klavye_giris:
    ;
      mov	ah, 01
    
      int	21h
    ;
    ;Girilen ASCII karakterini biner değere çevir:
    ;
      sub	al, 30h
    ;
    ;Sıfırdan ufaksa program sonuna git!
    ;
      jl	cikis
    ;
    ;Girilen değer 10 sayısından ufak mı?
    ;
      cmp	al, 10
    ;
    ;Eğer ufaksa doğru bir rakam girilmiştir!
    ;
      jl	topla
    ;
    ;0 - 9 arasındaki sayıların kontrolünü yaptık.
    ;Girilen değer A - F arasında olabileceğinden
    ;ve bunun da geçerli bir heksadesimal rakamı
    ;olabileceğinden ötürü ikinci bir kontrol yapıyoruz:
    ;
      sub	al, 7h
    ;
    ;AL' deki değer 0Ah' mı?
    ;
      cmp	al, 0ah
    ;
    ;Eğer ufaksa harf değil!
    ;
      jl	cikis
    ;
    ;AL' deki değer 0Fh' dan büyük mü?
    ;
    cmp	al, 0fh
    
      jge	cikis
    ;
    ;A - F arasında geçerli bir heksadesimal rakama
    ;rastladık. Toplama işlemine devam edebiliriz!
    ;
    topla:
    ;Girilmiş olan rakamı DX rejisterindeki sayıya ilave et!
    ;
      mov	cl, 4
    
      shl	dx, cl
    
      mov	ah, 0
    
      add	dx, ax
    
      jmp	klavye_giris
    ;
    cikis:
    ;
    ;Sonucu (ki DX rejisterinde bulunmakta!) BX rejisterinin
    ;işaretlediği offset adrese yerleştir. BASIC programı
    ;geri dönen sonuç değerini bu adreste arayacaktır!
    ;
     mov	[bx], dx
    ;
    ;BASIC programına geri dön!
    ;
     retf
    
    heksbin	  ends
    ;
    ;******************************************************
    ;
    
    ;ana_prog endp
    
    end
    N.B.: Anlatım, Y. Elektronik Mühendisi Ferdâ M. Tanyeri' nin jargonuyla paraleldir.

    1. ADIM: ASSEMBLY programını editörünüzle yazıp bir .ASM kaynak kodu yaratın!

    HEKSBIN.ASM

    N.B.: Editör ile kastedilen antik [EDIT.COM | WRITE.EXE]. Hâlihazırda bunlardan ziyade NOTEPAD EXE ya da benzerleri kullanılır.

    2. ADIM: Yazdığınız programı MASM ile derleyip bir .OBJ dosyası yaratın!

    MASM.EXE HEKSBIN.ASM;

    3. ADIM: .OBJ dosyasından LINK ile bir .EXE dosyası yaratın, fakat bu işlemi yaparken LINK programının /HIGH parametresini kullanın!

    LINK.EXE HEKSBIN.OBJ /HIGH;

    Yaratılan programı BASIC bulma zorunluğunda. Belleğin hangi segment ve ofset adreslerinde bu programın bulunması gerektiğini BASIC programına bildirmek zorundayız.

    4. ADIM: DEBUG programını çağırın:

    DEBUG.EXE HEKSBIN.EXE

    5. ADIM: R komutu ile segment ve ofset adreslerini tesbit edelim:

    Kod:
    C:\>DEBUG.EXE HEKSBIN.EXE
    -
    -R
    AX=0000  BX=0000  CX=0026  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
    DS=0DD8  ES=0DD8  SS=9FDF  CS=9FDF  IP=0000   NV UP EI PL NZ NA PO NC
    9FDF:0000 BA0000        MOV     DX,0000
    -
    CS rejisterinin değeri 9FDF (programın segment adresi).
    IP rejisterinin değeri ise 0000 (programın ofset adresi).

    6. ADIM: Şimdi GWBASIC (veya BASICA) programını yüklemek için program ismini DEBUG'a bildirelim!

    -NGWBASIC.EXE

    7. ADIM: BASIC yorumlayıcısını yükleyelim!

    -L

    8. ADIM: BASIC yorumlayıcısını çağıralım!

    -G

    BASIC çalışmaya başlayacak ekrandaki tüm görüntüler yok olacak ve BASIC ortamının tanınmış ekranı belirecektir.

    9. ADIM: Yazdığımız BASIC programını çağıralım:

    Kod:
    Ok
    LOAD "HEKSIDES.BAS"
    Bu işlem sonunda hem BASIC hem de ASSEMBLY programları ana belleğin içinde bulunuyor. Bir sonraki adımda BASIC programına ASSEMBLY programını hangi adreste bulabileceğini bildireceğiz.

    10. ADIM: ASSEMBLY programının segment adresini BASIC programına bildirelim:

    Kod:
    20 DEF SEG = &H9FDF
    11. ADIM: ASSEMBLY programının ofset adresini BASIC programına bildirelim:

    Kod:
    30 DEF USR0 = 0
    N.B.: Aslen 11. ADIM gereksiz, zira .BAS içeriğinde mevcut. Olasılıkla " Yazım tarzı doğru olması gerektiğinden burada bulunuyor. "

    Artık programımız şu şekilde olacaktır:

    Kod:
    10 DEFINT A-Z
    20 DEF SEG = &H9FDF
    30 DEF USR0 = 0
    40 INPUT "Heksadesimal Numarayi Girin "; D
    50 N = USR0 (D) : PRINT
    60 PRINT "Desimal karsiligi : "; D
    70 PRINT
    80 GOTO 40
    12. ADIM: BASIC programımızı yeni şekliyle kaydediyoruz:

    Kod:
    Ok
    SAVE "HEKSIDES.BAS"
    Artık ilk denemeleri yapma zamanı geldi:

    13. ADIM: BASIC programınızı çalıştırın:

    Kod:
    Ok
    RUN
    Heksadesimal Numarayi Girin ? &H1000
    
    Desimal karsiligi :  4096
    
    Heksadesimal Numarayi Girin ? &H7FFF
    
    Desimal karsiligi :  32767
    
    Heksadesimal Numarayi Girin ?
    Break in 40
    Ok
    N.B.: 0000 <= Heksadesimal Numara <= 7FFFh

    Tabii ki çalışmalar her zaman bu kadar düzgün gitmeyecek ve hata arama işlemlerine başlamak zorunda kalacaksınız! 13. adımda ASSEMBLY programınız istenilen şekilde çalışmıyorsa

    -G 9FDF:0000

    DEBUG komutuyla direk olarak ASSEMBLY programının başlangıcına sıçrayabilir buradan da ASSEMBLY rutinini adım adım takip edebiliriz.

    Henüz işimiz bitmedi. Programı her seferinde DEBUG'la çağırmamak için ASSEMBLY rutinini BASIC'in beklediği bir alana direk olarak yükleyebilmek için BSAVE ve BLOAD BASIC komutlarını kullanmamız gerekiyor.

    Ana bellekte herzaman aynı adrese yüklenebilen ASSEMBLY programlarına 'biner dosyalar (binary files)' adı verilir ve bu dosyalar genelde .BIN türündendir. BASIC'ten bu tür dosyaları kaydetmek için BSAVE, tekrar geri yükleyebilmek için de BLOAD komutları kullanılır. Programın doğru çalıştığına emin olduktan sonra:

    14. ADIM: BASIC'ten ASSEMBLY rutinini BSAVE komutuyla herzaman aynı adreste çalışmak üzere kaydedelim:

    Kod:
    Ok
    DEF SEG = &H9FDF
    Ok
    BSAVE "HEKSBIN.BIN",0, &H26
    Sıfır parametresi programın ofset adresini, &h26 ise programın uzunluğunu belirtiyor. Program uzunluğunu ASSEMBLY programı derlerken yaratabilinen .LST türü dosyadan öğrenebiliriz.

    ;................................................. .................................................. ..........................................

    N.B.:

    Tüm dosyaların C' de olduğu varsayılırsa MASM' ın o değil şu kullanımıyla .LST türü dosya elde edilebilir.


    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\>MASM.EXE HEKSBIN.ASM, ,;

    Kod:
    Open procedures: ANA_PROG
    Open procedures: ANA_PROG
    
      50416 + 440416 Bytes symbol space free
    
          0 Warning Errors
          1 Severe  Errors
    
    C:\>DIR HEKSBIN.*
     C sürücüsündeki birimin etiketi yok.
     Birim Seri Numarası: 40DA-CC8A
    
     C:\ dizini
    
    05/17/2025  00:00             1,775 HEKSBIN.ASM
    05/17/2025  00:00             4,192 HEKSBIN.LST
                   2 Dosya            5,967 bayt
                   0 Dizin   12,275,200,000 bayt boş
    
    C:\>

    .OBJ & .LST oluşması gerekirken sadece .LST dosyası oluştu. Hatanın nedeni de .ASM' nin şu satırındaki ; yüzündendir:

    ;ana_prog endp

    ; kaldırılırsa hata önlenir ve .OBJ & .LST dosyaları oluşur.

    Ne var ki, .ASM, özde tekil ya da bağımsız bir modül değildir, bu yüzden de ANA_PROG prosedürü kapatılmamalıdır. Hülasa,

    _ Burada Severe Error falan yoktur, bu bir. " .OBJ oluşturulamadığından bu mesaj ekrana gönderilmektedir. "

    _ ; kaldırılmamalıdır, bu iki.

    _ MASM.EXE HEKSBIN.ASM; ile .OBJ, ardından da MASM.EXE HEKSBIN.ASM, ,; kullanımıyla HEKSBIN.LST oluşturulur, bu da üç.

    Aslında ; kaldırılsa da kaldırılmasa da, en azından bu .BAS & .ASM ikilisi için değişen bir şey olmaz. Zaten benzeri bir durum " DESIHEKS.BAS: 60 D = USR0 (N) " için Y. Elektronik Mühendisi Ferdâ M. Tanyeri ne diyordu_? : )


    Heksadesimal sayıyı ekrana gönderme işini ASSEMBLY'den yapacağımızdan bu satırdaki D değişkeninin bir kullanımı yok. Yazım tarzı doğru olması gerektiğinden burada bulunuyor.

    ;................................................. .................................................. ..........................................

    Tabii ki BASIC programına da ASSEMBLY rutinini hangi adreste araması gerektiğini bildirmemiz lazım:

    15. ADIM: BASIC programına bir satır ilave ediyoruz:

    Kod:
    25 BLOAD "HEKSBIN.BIN",0
    BSAVE komutunda olduğu gibi program uzunluğunu belirtmemize gerek yok!

    16. ADIM: BASIC programımızı son şekliyle kaydediyoruz:

    Kod:
    Ok
    SAVE "HEKSIDES.BAS"
    Ok
    BASIC programımızın son şekli şöyle olacaktır:

    Kod:
    10 DEFINT A-Z
    20 DEF SEG = &H9FDF
    25 BLOAD "HEKSBIN.BIN",0
    30 DEF USR0 = 0
    40 INPUT "Heksadesimal Numarayi Girin "; D
    50 N = USR0 (D) : PRINT
    60 PRINT "Desimal karsiligi : "; D
    70 PRINT
    80 GOTO 40
    Herşeyi tamamladık. Artık BASIC programımızı direk olarak çalıştırabiliriz:

    GWBASIC HEKSIDES

    komutu ile bu çağırma işlemini gerçekleştiririz. Unutmayalım ki biner bir dosya olarak sakladığımız 'HEKSBIN&.BIN' dosyası içinde bulunduğumuz çalışma alanında olmalıdır.

    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\>MASM.EXE HEKSBIN.ASM;

    Kod:
    Open procedures: ANA_PROG
    
      50960 + 439872 Bytes symbol space free
    
          0 Warning Errors
          0 Severe  Errors
    Kod:
    C:\>LINK.EXE HEKSBIN.OBJ /HIGH;
    Kod:
    LINK : warning L4021: no stack segment
    
    C:\>DEBUG.EXE HEKSBIN.EXE
    -
    -R
    AX=0000  BX=0000  CX=0026  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
    DS=0DD8  ES=0DD8  SS=9FDF  CS=9FDF  IP=0000   NV UP EI PL NZ NA PO NC
    9FDF:0000 BA0000        MOV     DX,0000
    -
    -NGWBASIC.EXE
    -L
    -G
    
    GW-BASIC 3.23
    (C) Copyright Microsoft 1983,1984,1985,1986,1987,1988
    60300 Bytes free
    Ok
    LOAD "HEKSIDES.BAS"
    Ok
    20 DEF SEG = &H9FDF
    30 DEF USR0 = 0
    SAVE "HEKSIDES.BAS"
    Ok
    RUN
    Heksadesimal Numarayi Girin ? &H1000
    
    Desimal karsiligi :  4096
    
    Heksadesimal Numarayi Girin ? &H7FFF
    
    Desimal karsiligi :  32767
    
    Heksadesimal Numarayi Girin ?
    Break in 40
    Ok
    DEF SEG = &H9FDF
    Ok
    BSAVE "HEKSBIN.BIN",0, &H26
    Ok
    25 BLOAD "HEKSBIN.BIN",0
    SAVE "HEKSIDES.BAS"
    Ok
    LIST
    10 DEFINT A-Z
    20 DEF SEG = &H9FDF
    25 BLOAD "HEKSBIN.BIN",0
    30 DEF USR0 = 0
    40 INPUT "Heksadesimal Numarayi Girin "; D
    50 N = USR0 (D) : PRINT
    60 PRINT "Desimal karsiligi : "; D
    70 PRINT
    80 GOTO 40
    Ok
    
    1LIST   2RUN<-   3LOAD"  4SAVE"  5CONT<-  6,"LPT1 7TRON<-  8TROFF<- 9KEY    0SCREEN
    DS=0DD8  ES=0DD8  SS=9FDF  CS=9FDF  IP=0000   NV UP EI PL NZ NA PO NC
    9FDF:0000 BA0000        MOV     DX,0000
    -
    -NGWBASIC.EXE
    -L
    -G




    Teknik yazılardan bunalan dostlarımız ve eski dostumuz Anthis için:





    İ ç t e n l i k l e...

    Sevgiyle...

  5. #35
    Ç. R. Düzenleme
    Üyelik Tarihi
    Nov 2015
    Mesajlar
    503

    Seviye: 40 
    Tecrübe: 1,794,875
    Sonraki Seviye: 2,111,327

    Beğenmiş
    2,397
    Beğenilmiş
    2,050
    Adı Geçen
    0 Konu
    Etiketlendiği
    0 Konu
    UNDOCUMENTED DOSX VII:





    Atlantis BA32: Mucize Çocuk' ta, Vincent Phybes ve Martin Mystère arasındaki diyaloglar felsefidir ' philosophia linguae ', ki ne idi_?

    Onu ' mucize çocuk ' en iyi programlamak için bir şey gerekli...

    Sanırım anladım. Onunla "konuşulacak" dili bilmek gerekir...


    Her ne kadar ' en azından şu an için ' felsefeyle iştigal etmeyecek olsak da, mantık öyle d e ğ i l.

    Sözün özü, bu diyaloglarda bir analoji ' zihnin tikelden tikele hareketi, i.e., analogia ' vardır, şöyle ki:

    Onu ' bilgisayarı ' en iyi programlamak için bir şey gerekli...

    Sanırım anladım. Onunla "konuşulacak" dili ' LLL ' bilmek gerekir...


    BASIC, özellikle de C ile kıyaslanarak kıyasıya eleştirilir, ki en gözde eleştiri de ne idi_?

    Sembolik Makina Dili' ndeki ' L[ow] L[evel] [programming] L[anguage] ' lojik komutlara benzer şekilde, C ile de bit seviyesinde işlemler yapılabilir, ki BASIC' de, her ne kadar HEX$ & OCT$ Functions' ı olsa da, BIN$ function diye bir şey y o k t u r.

    Ne var ki göz ardı edilen bir şey vardır, ki ehemmiyet-i hâizdir, ki şudur:

    BASIC H[igh] L[evel] [programming] L[anguage], C M[iddle | edium] L[evel] [programming] L[anguage]' dir, ki Antik Yunan Filozofu ' philosophus Graecus antiquus /Muallim-i Evvel ' Aristoteles' in kıyas teorisine göre ' theoria syllogismi categorici in logica Aristotelicae ', [H | M]LLs [H | M]LLs' le kıyaslanabilir, HLLs ile MLLs d e ğ i l.

    Klasik Mantık ' Logica Formalia '

    II. Şekil, Cesare:

    Hiçbir HLL bit seviyesinde işlemlere sahip değildir ; praemissum_i
    Her MLL bit seviyesinde işlemlere sahiptir ; praemissum_j
    __________________________________________________ ___
    Hiçbir MLL HLL değildir ; conclucio

    [Klasik] Mantık' ta, öncüller doğru, sonuç yanlış ise çıkarım geçersizdir, aksi hâllerde geçerlidir. Ne var ki, bu formel bir şarttır, meselâ, öncüller ve sonuç yanlış ise de çıkarım geçersiz olmaz. Şu hâlde, sonucun doğruluğunun ispatı hem öncüllerin doğru olmasını, hem de öncüllerin sonucu zorunlu kılmasını gerektirir.

    Hülasa, öncüllerden biri bile yanlış ise, sonucun doğru olduğu ispatlanamaz.

    Özetle, büyük öncül ' praemissum_i ' doğru değildir, meselâ XBASIC' de BIN$ Function vardır.

    XBASIC:


    Kod:
    '
    '
    ' ######################
    ' #####         Entry ()        #####
    ' ######################
    '
    ' Programs contain:
    '    1. A PROLOG with type/function/constant declarations.
    '    2. This Entry() function where execution begins.
    '    3. Zero or more additional functions.
    '
    FUNCTION   Entry ()
    
    PRINT HEX$(32239)
    PRINT BIN$(-9753)
    
    END FUNCTION
    F5: execute program with breakpoint at cursor line

    Kod:
    7DEF
    11111111111111111101100111100111 ' Signed 32-bit

    N.B.: Aksi hâlde de değişen bir şey olmaz, zira, hiçbir MLL HLL değildir önermesi yanlış olamaz, ki yalın bir gerçektir, ki demek ki, bu öncüller gereksizdir : )


    Hep Mi$ter Bill hep Micro$oft... Nereye kadar_? : )

    Dev-Cpp' ı indirip kuruyoruz.

    _ 32-bit Sembolik Makina Dili ' SUBSYSTEM: CONSOLE ':


    Kod:
    	.file	"gdecbin.asm"
    	.intel_syntax
    
    	.section .rdata,"dr"
    LC0:
    	.ascii "%d\0"
    LC1:
    	.ascii "\12\0"
    	.text
    	.align 2
    .globl __Z15decimalToBinaryi
    	.def	__Z15decimalToBinaryi;	.scl	2;	.type	32;	.endef
    __Z15decimalToBinaryi:
    	push	ebp					#
    	mov	ebp, esp				#,
    	sub	esp, 168				#,
    	mov	DWORD PTR [ebp-140], 0			# i,
    L2:
    	cmp	DWORD PTR [ebp+8], 0			# decimal,
    	jns	L4					#,
    	mov	eax, DWORD PTR [ebp+8]			# decimal, decimal
    	cdq
    	mov	eax, edx				# tmp60, tmp58
    	xor	eax, DWORD PTR [ebp+8]			# tmp60, decimal
    	sub	eax, edx				#, tmp58
    	mov	edx, eax				# tmp61,
    	mov	eax, 65536				# tmp62,
    	sub	eax, edx				# tmp63, tmp61
    	mov	DWORD PTR [ebp+8], eax			# decimal, tmp63
    	mov	ecx, DWORD PTR [ebp-140]		# i, i
    	mov	edx, DWORD PTR [ebp+8]			# decimal, decimal
    	mov	eax, edx				# tmp67, decimal
    	sar	eax, 31					# tmp67,
    	shr	eax, 31					# tmp68,
    	lea	eax, [edx+eax]				# tmp69,
    	sar	eax					# tmp65
    	add	eax, eax					# tmp71
    	sub	edx, eax				#, tmp71
    	mov	eax, edx				# tmp72,
    	mov	DWORD PTR [ebp-136+ecx*4], eax		# binary, tmp72
    	mov	edx, DWORD PTR [ebp+8]			# decimal, decimal
    	mov	eax, edx				# tmp75, decimal
    	sar	eax, 31					# tmp75,
    	shr	eax, 31					# tmp76,
    	lea	eax, [edx+eax]				# tmp77,
    	sar	eax					# tmp73
    	mov	DWORD PTR [ebp+8], eax			# decimal, tmp73
    	lea	eax, [ebp-140]				# tmp96,
    	inc	DWORD PTR [eax]				# i
    	jmp	L2					#
    L4:
    	cmp	DWORD PTR [ebp+8], 0			# decimal,
    	jle	L5					#,
    	mov	ecx, DWORD PTR [ebp-140]		# i, i
    	mov	edx, DWORD PTR [ebp+8]			# decimal, decimal
    	mov	eax, edx				# tmp81, decimal
    	sar	eax, 31					# tmp81,
    	shr	eax, 31					# tmp82,
    	lea	eax, [edx+eax]				# tmp83,
    	sar	eax					# tmp79
    	add	eax, eax				# tmp85
    	sub	edx, eax				#, tmp85
    	mov	eax, edx				# tmp86,
    	mov	DWORD PTR [ebp-136+ecx*4], eax		# binary, tmp86
    	mov	edx, DWORD PTR [ebp+8]			# decimal, decimal
    	mov	eax, edx				# tmp89, decimal
    	sar	eax, 31					# tmp89,
    	shr	eax, 31					# tmp90,
    	lea	eax, [edx+eax]				# tmp91,
    	sar	eax					# tmp87
    	mov	DWORD PTR [ebp+8], eax			# decimal, tmp87
    	lea	eax, [ebp-140]				# tmp98,
    	inc	DWORD PTR [eax]				# i
    	jmp	L4					#
    L5:
    	mov	eax, DWORD PTR [ebp-140]		# tmp92, i
    	dec	eax					# tmp92
    	mov	DWORD PTR [ebp-144], eax		# j, tmp92
    L6:
    	cmp	DWORD PTR [ebp-144], 0			# j,
    	js	L7					#,
    	mov	eax, DWORD PTR [ebp-144]		# j, j
    	mov	eax, DWORD PTR [ebp-136+eax*4]		# tmp94, binary
    	mov	DWORD PTR [esp+4], eax			#, tmp94
    	mov	DWORD PTR [esp], OFFSET FLAT:LC0	#,
    	call	_printf					#
    	lea	eax, [ebp-144]				# tmp100,
    	dec	DWORD PTR [eax]				# j
    	jmp	L6					#
    L7:
    	mov	DWORD PTR [esp], OFFSET FLAT:LC1	#,
    	call	_printf					#
    	leave
    	ret
    	.def	___main;	.scl	2;	.type	32;	.endef
    	.section .rdata,"dr"
    LC2:
    	.ascii "N: ? \0"
    	.text
    	.align 2
    .globl _main
    	.def	_main;	.scl	2;	.type	32;	.endef
    _main:
    	push	ebp					#
    	mov	ebp, esp				#,
    	sub	esp, 24					#,
    	and	esp, -16				#,
    	mov	eax, 0					# tmp59,
    	add	eax, 15					# tmp60,
    	add	eax, 15					# tmp61,
    	shr	eax, 4					# tmp62,
    	sal	eax, 4					# tmp64,
    	mov	DWORD PTR [ebp-8], eax			#, tmp64
    	mov	eax, DWORD PTR [ebp-8]			#,
    
    	mov	DWORD PTR [esp], OFFSET FLAT:LC2	#,
    	call	_printf					#
    	lea	eax, [ebp-4]				# tmp71,
    	mov	DWORD PTR [esp+4], eax			#, tmp71
    	mov	DWORD PTR [esp], OFFSET FLAT:LC0	#,
    	call	_scanf					#
    	mov	eax, DWORD PTR [ebp-4]			# decimal, decimal
    	mov	DWORD PTR [esp], eax			#, decimal
    	call	__Z15decimalToBinaryi			#
    	mov	eax, 0					# <result>,
    	leave
    	ret
    	.def	_scanf;	.scl	2;	.type	32;	.endef
    	.def	_printf;	.scl	2;	.type	32;	.endef

    G[NU]BUILDC[onsole].BAT:

    Kod:
    @echo off
    
    rem *.asm & *.a files must be in the C directory...
    
    echo.
    
    set GNUDir=C:\DEV-CPP\BIN
    set GASOp=--warn --statistics --keep-locals
    set LDOp=--strip-all --stats --verbose
    
    "%GNUDir%\as.exe" -o %1.out %GASOp% --MD FlNm -K %1.asm
    
    if %errorlevel% neq 0 goto errc
    
    echo.
    
    "%GNUDir%\ld.exe" %1.out --output %1.exe -m i386pe --subsystem console --image-base 0x400000 --entry _main -nostdlib --library-path C: -( -l%2 -) %LDOp%
    
    if %errorlevel% neq 0 goto errlink
    
    echo.
    
    dir %1.*
    
    goto TheEnd
    
    :errlink
    echo _
    echo Link error
    goto TheEnd
    
    :errc
    echo _
    echo Compilation error
    goto TheEnd
    
    :TheEnd
    
    set GNUDir=
    set GASOp=
    set LDOp=
    
    echo.
    
    pause

    Compile & Link: G[NU]BUILDC[onsole].BAT

    N.B.: MSVCRT -> C:\Dev-Cpp\lib\libmsvcrt.a


    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\>GBUILDC GDECBIN MSVCRT
    
    C:\DEV-CPP\BIN\as.exe: total time in assembly: 0.015000
    frag chains:
    
            003E3C60 .text                  10 frags
    
            003E3CAC .data                   2 frags
    
            003E3CF8 .bss                    2 frags
    
            003E3E28 .rdata                  2 frags
    fixups: 9
    0 mini local symbols created, 0 converted
    
    GNU ld version 2.15.91 20040904
      Supported emulations:
       i386pe
    using internal linker script:
    ==================================================
    /* Default linker script, for normal executables */
    OUTPUT_FORMAT(pei-i386)
    SEARCH_DIR("/mingw/mingw32/lib"); SEARCH_DIR("/mingw/lib"); 
    SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");
    ENTRY(_mainCRTStartup)
    
    ==================================================
    attempt to open GDECBIN.out succeeded
    GDECBIN.out
    attempt to open C:/libMSVCRT.dll.a failed
    attempt to open C:/MSVCRT.dll.a failed
    attempt to open C:/libMSVCRT.a succeeded
    (C:/libMSVCRT.a)dkxs00652.o
    (C:/libMSVCRT.a)dkxs00639.o
    (C:/libMSVCRT.a)dkxh.o
    (C:/libMSVCRT.a)dkxt.o
    C:\DEV-CPP\BIN\ld.exe: total time in link: 0.500000
    
     C sürücüsündeki birimin etiketi yok.
     Birim Seri Numarası: 40DA-CC8A
    
     C:\ dizini
    
    01/31/2020  00:00             3,413 gdecbin.asm
    01/31/2020  00:00             2,560 GDECBIN.exe
    01/31/2020  00:00             1,086 GDECBIN.out
                   3 Dosya            7,059 bayt
                   0 Dizin   12,403,625,984 bayt boş
    
    Devam etmek için bir tuşa basın . . .
    
    C:\>GDECBIN.EXE
    N: ? -9753
    1101100111100111
    
    C:\>GDECBIN.EXE
    N: ? 9753
    10011000011001
    
    C:\>




    BASIC -- ASSEMBLY İŞBİRLİĞİ: CALL Statement I:

    Y. Elektronik Mühendisi Ferdâ M. Tanyeri, Assembly - Programlama Sanatı adlı eserinde ne diyordu_?

    Ana bellekte her zaman aynı adrese yüklenebilen ASSEMBLY programlarına 'biner dosyalar (binary files)' adı verilir ve bu dosyalar genelde .BIN türündendir. BASIC'ten bu tür dosyaları kaydetmek için BSAVE, tekrar geri yükleyebilmek için de BLOAD komutları kullanılır.

    Ana bellekte her zaman aynı adrese yüklenebilen ASSEMBLY programları ' *.BINs ' hakkında ne anlaşıldı_? Ana bellekte her zaman aynı adrese yüklenebildikleri. Bir başka deyişle_? Hiçbir şey!

    Ne yazık ki yazılımcılar böyledir, en kritik mevzulara şöyle bir değinip geçerler işte.

    Dosyaların bazı özelliklerinden bahsedelim ki, ehemmiyet-i hâizdir.

    MS-DOS & Windows için, yalnızca üç tür yürütülebilir dosya uzantısı vardır, ki şunlardır: .COM, .EXE, .BAT

    Nasıl olur_? Meselâ, çizgiromanlarımızı okuduğumuz *[.CBR | CBZ], yazı yazıp notlar aldığımız ' *.TXT ', elektronik tabloyla hesaplamalar yaptığımız ' *.XLS[X] ', dahası *.DLL,... ve benzeri pek çok dosya yok mu_?

    ' Sanılanın aksine ' Y o k.

    Her nedense aklımıza Paneuropeanismus' un Hint-Avrupa Dilleri Soyağacı ' Stemma linguarum Indoeuropaearum ' hipotezi geldi. Bu hipoteze göre, ki ortak atalardan türeme hipotezi ' theoria descendentiae seu evolutionis specierum est reiicienda ' ile de analojiktir, bazı çok eski ' i.e., [ortak] ata, izole,... ' diller hariç, hiçbir dil ' sanılanın aksine ' y o k t u r.

    Bu ve benzeri analojiler hipotetiktir, ki buna rağmen, yadsınmaları da oldukça müşküldür, meselâ, [Sembolik] Makina Dili hariç hiçbir dil ' sanılanın aksine ' y o k t u r, &c.

    Zaten Latinler ne diyordu_? " Non semper ea sunt quae videntur. Şeyler çoğu zaman göründükleri gibi değildir. "

    Meselâ, MS-DOS & Windows XP Professional, SP3 için:

    C:\Program Files\CDisplay\ dizinindeki CDisplay.exe dosyası silinirse, çizgiromanlarımızı ' *[.CBR | CBZ] ' olarak d e ğ i l, uzantısını [.RAR | .ZIP]' e değiştirip açtıktan sonra resim dosyaları ' *.JP[E]G,... ' olarak okumak zorunda kalırız.

    C:\WINDOWS\system32\ dizinindeki notepad.exe silinebilseydi ' *.TXT ' yerine, başka bir metin editörü kullanmak zorunda kalırdık. ' Ne var ki bu bir sistem dosyasıdır, nerede kaldı ki silinmesi, başka bir versiyonu dahi üzerine kopyalanamaz, yapıştırılamaz, zira ne yapılırsa yapılsın, kendi kendine orjinal versiyon tekrar aynı dizinde oluşur '

    C:\Program Files\Microsoft Office\Office12\ dizinindeki EXCEL.EXE silinebilseydi, ' *.XLS[X] ' yerine başka elektronik tablo dosyasıyla hesaplama yapmak zorunda kalırdık. ' Ne var ki bu da bir sistem dosyasıdır, nerede kaldı ki silinmesi, başka bir versiyonu dahi üzerine kopyalanamaz, yapıştırılamaz, zira ne yapılırsa yapılsın, orjinal versiyon tekrar aynı dizinde oluşur '

    Fakat EXCEL.EXE, notepad.exe gibi, kendi kendine oluşmaz, şöyle ki:

    Desktop -> Mouse Right Click -> New -> Microsoft Office Excel Worksheet ile *.XLS[X] dosyası oluşturup açmayı denersek, dosya açılmaz ve sistem, şu uyarı mesajlarını ard arda ekrana gönderir.

    Windows Sürücü Modeli

    Yüklemeye hazırlanıyor...

    İptal


    Microsoft Office Enterprise 2007

    Please wait while Windows configures Microsoft Office Enterprise 2007

    Gathering required information...

    İptal



    Akabinde New Microsoft Office Excel Worksheet.xls[x] dosyası kendi kendine açılır.

    C:\Program Files\Microsoft Office\Office12\ dizini incelendiğinde, sistem tarafından EXCEL.EXE dosyasının tekrar oluşturulduğu görülür. Doğrusu enteresan.

    [PE] *.DLLs, 10000000h adresinden başlayarak yüklenen ve IMAGE_SECTION_HEADER .reloc & SECTION .reloc [IMAGE_BASE_RELOCATION]' a sahip özel *.EXE dosyalarıdır, &c.

    N.B.: [PE] *.EXEs, 00400000h adresinden başlayarak yüklenirler ve IMAGE_SECTION_HEADER .reloc & SECTION .reloc [IMAGE_BASE_RELOCATION]' a sahip olabilirler de olmayabilirler de.

    Ana bellekte her zaman aynı adrese yüklenebilen ASSEMBLY programları 'biner dosyalar (binary files)' nedir peki_? *.COM dosyasının özel bir formu, bu kadar basit. : )

    Bir başka deyişle_? Bir kez daha hiçbir şey anlaşılamadı! Ne var ki bu kez pürüzler de giderilecektir, şöyle ki:

    *.COM, Ana bellekte her zaman aynı offset adresine yüklenebilen ASSEMBLY programlarıdır, ki CS[=Variable]:IP[=0100h]

    *.BIN, Ana bellekte her zaman aynı segment & offset adresine yüklenebilen ASSEMBLY programlarıdır, ki CS[=Constant]:IP[=0100h]

    Meselâ, BIOS, uzantısı ya .BIN ya da alt formu .ROM olan ASSEMBLY programlarıdır ' ki, uzantısız ya da bir başka uzantı olsa da farketmez, nihayetinde tümü, özde, .BIN uzantılı dosyalardır '

    ROM BIOS codes, ana bellekte, F0000h - FFFFFh ' ISA ', E0000h - FFFFFh ' EISA ' absolute adresses' dedir.

    ROM BIOS codes' ında advanced [Sembolik] Makina Dili komutları vardır, e.g. PHOENIX BIOS için:


    Kod:
    F000:3280 DB7516E8      ESC     1E,[DI+16]TBYTE PTR [DI-18]
    N.B.:

    VM86 Mode' da, MS-DEBUG ile, ' ISA ' ROM BIOS codes' ının bazı bölümleri görüntülenirken ' D[ump] CS:IP = D[ump] F000:(0000 . . . FFFF) ' herhangi bir nedenden dolayı hiçbir şey yapmaksızın uzun süre beklenirse, sistem, sinir bozucu bir BEEP sesiyle uyarı gönderir.

    Kısacası ROM BIOS codes, D[ump] direktifi ile görüntülendikten sonra uzun süre beklenmemelidir ve Q[uit] direktifi ile MS-DEBUG' dan çıkılmalıdır. Zaten ROM BIOS codes' ının incelenmesi için illaki MS-DEBUG' da kalınacak diye bir şey de yok.


    Pratik, [hemen her zaman] Teoriden efdaldir, değil mi_? Her hâlde.

    _ 16-bit [Sembolik] Makina Dili



    Kod:
    _TEXT	segment para public 'CODE'
    
    assume	CS:_TEXT, DS:_TEXT, SS:_TEXT
    
    org	100h
    
    main	proc far
    
    DB	01010101B
    DW	1110110010001011B
    
    DB	10001011B
    DW	0000011001011110B
    DW	0000011110001011B
    
    DB	10111001B
    DW	0000000000000100B
    
    ;******************************************************
    
    DB	10011100B
    
    DB	01010001B
    DW	0000010010110001B
    DW	1100000011010011B
    DB	01011001B
    
    DW	1101101100110011B
    
    DB	10101001B
    DW	0000000000000001B
    DW	0000011101110101B
    DW	1110001110000001B
    DW	1111111111110000B
    DB	11101011B
    DW	1001000000000101B
    
    DW	1100101110000001B
    DW	0000000000000001B
    DB	10101001B
    DW	0000000000000010B
    
    DW	0000011101110101B
    DW	1110001110000001B
    DW	1111111100001111B
    DB	11101011B
    DW	1001000000000101B
    
    DW	1100101110000001B
    DW	0000000000010000B
    
    
    DB	10101001B
    DW	0000000000000100B
    DW	0000011101110101B
    DW	1110001110000001B
    DW	1111000011111111B
    
    DB	11101011B
    DW	1001000000000101B
    
    DW	1100101110000001B
    DW	0000000100000000B
    
    DB	10101001B
    DW	0000000000001000B
    DW	0000011101110101B
    
    DW	1110001110000001B
    DW	0000111111111111B
    DB	11101011B
    DW	1001000000000101B
    
    DW	1100101110000001B
    DW	0001000000000000B
    
    ;======================================================
    
    DB	10011101B
    
    DB	01001001B
    DW	1100100110000101B
    DW	0010000001111000B
    DW	0001010101110100B
    DW	0000101001111011B
    
    ;******************************************************
    
    DB	01010000B
    DB	01010001B
    
    DB	11101000B
    DW	0000000000011110B
    DB	01011001B
    DB	01011000B
    
    DB	01001001B
    
    DW	1010001111101011B
    
    ;******************************************************
    
    DB	01010000B
    DB	01010001B
    
    DB	11101000B
    DW	0000000000010100B
    
    DB	01011001B
    DB	01011000B
    
    DW	1001101011101011B
    
    ;******************************************************
    
    DB	01010000B
    DB	01010001B
    
    DB	11101000B
    DW	0000000000001011B
    
    DB	01011001B
    DB	01011000B
    
    DW	1001000111101011B
    
    ;******************************************************
    
    DB	11101000B
    DW	0000000000000100B
    
    ;******************************************************
    
    DB	01011101B
    
    DB	11001010B
    DW	0000000000000010B
    
    DW	0000010010110101B
    
    DW	0000010010110001B
    DW	1100001111010011B
    DW	1100001110001010B
    DW	0000111100100100B
    DW	0011000000000100B
    DW	0011101000111100B
    DW	0000001001111100B
    DW	0000011100000100B
    
    DW	1101000010001010B
    DW	0000001010110100B
    DW	0010000111001101B
    DW	1100110111111110B
    DW	1110011001110101B
    
    DB	11000011B
    
    main	endp
    
    _TEXT	ends
    
    end	main

    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\>ASM.EXE DECBIN.ASM;
    The IBM Personal Computer Assembler
    Version 1.00 (C)Copyright IBM Corp 1981
    
    
    Warning Severe
    Errors  Errors
    0       0
    
    C:\>LINK.EXE
    IBM Personal Computer Linker
    Version 1.00 (C) Copyright IBM Corp 1981
    Object Modules: DECBIN.OBJ
    Run File: DECBIN.EXE
    List File [DECBIN.MAP] :!
    
    There were    1 errors detected
    
    C:\>DEBUG.EXE DECBIN.EXE
    -R
    AX=0000  BX=0000  CX=0200  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
    DS=0DD2  ES=0DD2  SS=0DE2  CS=0DE2  IP=0100   NV UP EI PL NZ NA PO NC
    0DE2:0100 55            PUSH    BP
    -
    -D CS:0100 01FF
    0DE2:0100  55 8B EC 8B 5E 06 8B 07-B9 04 00 9C 51 B1 04 D3   U...^.......Q...
    0DE2:0110  C0 59 33 DB A9 01 00 75-07 81 E3 F0 FF EB 05 90   .Y3....u........
    0DE2:0120  81 CB 01 00 A9 02 00 75-07 81 E3 0F FF EB 05 90   .......u........
    0DE2:0130  81 CB 10 00 A9 04 00 75-07 81 E3 FF F0 EB 05 90   .......u........
    0DE2:0140  81 CB 00 01 A9 08 00 75-07 81 E3 FF 0F EB 05 90   .......u........
    0DE2:0150  81 CB 00 10 9D 49 85 C9-78 20 74 15 7B 0A 50 51   .....I..x t.{.PQ
    0DE2:0160  E8 1E 00 59 58 49 EB A3-50 51 E8 14 00 59 58 EB   ...YXI..PQ...YX.
    0DE2:0170  9A 50 51 E8 0B 00 59 58-EB 91 E8 04 00 5D CA 02   .PQ...YX.....]..
    0DE2:0180  00 B5 04 B1 04 D3 C3 8A-C3 24 0F 04 30 3C 3A 7C   .........$..0<:|
    0DE2:0190  02 04 07 8A D0 B4 02 CD-21 FE CD 75 E6 C3 00 00   ........!..u....
    0DE2:01A0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0DE2:01B0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0DE2:01C0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0DE2:01D0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0DE2:01E0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0DE2:01F0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    -
    -H 0100 0007
    0107  00F9
    -H 019D 0008
    01A5  0195
    -
    -M CS:0100 019D CS:0107
    -
    -E CS:0100 FD E2 0D 00 01 A6 00
    -E CS:01A5 1A
    -
    -D CS:0100 01A5
    0DE2:0100  FD E2 0D 00 01 A6 00 55-8B EC 8B 5E 06 8B 07 B9   .......U...^....
    0DE2:0110  04 00 9C 51 B1 04 D3 C0-59 33 DB A9 01 00 75 07   ...Q....Y3....u.
    0DE2:0120  81 E3 F0 FF EB 05 90 81-CB 01 00 A9 02 00 75 07   ..............u.
    0DE2:0130  81 E3 0F FF EB 05 90 81-CB 10 00 A9 04 00 75 07   ..............u.
    0DE2:0140  81 E3 FF F0 EB 05 90 81-CB 00 01 A9 08 00 75 07   ..............u.
    0DE2:0150  81 E3 FF 0F EB 05 90 81-CB 00 10 9D 49 85 C9 78   ............I..x
    0DE2:0160  20 74 15 7B 0A 50 51 E8-1E 00 59 58 49 EB A3 50    t.{.PQ...YXI..P
    0DE2:0170  51 E8 14 00 59 58 EB 9A-50 51 E8 0B 00 59 58 EB   Q...YX..PQ...YX.
    0DE2:0180  91 E8 04 00 5D CA 02 00-B5 04 B1 04 D3 C3 8A C3   ....]...........
    0DE2:0190  24 0F 04 30 3C 3A 7C 02-04 07 8A D0 B4 02 CD 21   $..0<:|........!
    0DE2:01A0  FE CD 75 E6 C3 1A                                 ..u...
    -
    -NDECBIN.BIN
    -
    -RCX
    CX 0200
    :00A6
    -
    -W CS:0100
    000A6 bayt yazılıyor
    -
    -Q
    
    C:\>
    N.B.: Antika Linker' in " There were 1 errors detected " uyarısı geçersizdir.





    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\>EXE2BIN.EXE DECBIN.EXE DECBIN.BIN
    
    C:\>EXE2BIN.EXE DECBIN.EXE DECBIN.COM
    
    C:\>FC DECBIN.BIN DECBIN.COM
    DECBIN.BIN ve DECBIN.COM dosyaları karşılaştırılıyor
    Dosya Karşılaştırması: Farklılık bulunamadı
    
    
    C:\>DIR DECBIN.BIN /D
     C sürücüsündeki birimin etiketi yok.
     Birim Seri Numarası: 40DA-CC8A
    
     C:\ dizini
    
    DECBIN.BIN
                   1 Dosya           65,284 bayt
                   0 Dizin   12,820,377,600 bayt boş
    
    C:\>
    Antika Linker, *.EXE' nin HEADER' ını oluştururken Bizans Oyunu çevirdiğinden, EXE2BIN.EXE' de ona uyduğundan ' her nedense ana belleğin bazı adres aralıklarındaki bytes' ı *.BIN ya da *.COM' a gömdüğünden ' DECBIN.EXE' yi ne DECBIN.BIN ne de DECBIN.COM' a çevirebiliyoruz.

    Meselâ, *.COM & *.BIN için, Base Address: 0000h Range: 0100h-10004h Loaded length: FF04h byte.

    Aslında bu hâl önemsiz, zira direkt *.BIN dosyasına çevirebilseydi de pek bir işe yaramayacaktı, zira MS-DEBUG' ın o kahredici eline düşmeksizin meseleyi halletmek, müşküldür. : )

    Peki DECBIN.BIN nasıl oluşturuldu_? MS-DEBUG ile DECBIN.EXE' den DECBIN.COM oluşturulursa daha net anlaşılabilir, şöyle ki:


    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\>DEBUG.EXE DECBIN.EXE
    -R
    AX=0000  BX=0000  CX=0200  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
    DS=0DD2  ES=0DD2  SS=0DE2  CS=0DE2  IP=0100   NV UP EI PL NZ NA PO NC
    0DE2:0100 55            PUSH    BP
    -
    -D CS:0100 01FF
    0DE2:0100  55 8B EC 8B 5E 06 8B 07-B9 04 00 9C 51 B1 04 D3   U...^.......Q...
    0DE2:0110  C0 59 33 DB A9 01 00 75-07 81 E3 F0 FF EB 05 90   .Y3....u........
    0DE2:0120  81 CB 01 00 A9 02 00 75-07 81 E3 0F FF EB 05 90   .......u........
    0DE2:0130  81 CB 10 00 A9 04 00 75-07 81 E3 FF F0 EB 05 90   .......u........
    0DE2:0140  81 CB 00 01 A9 08 00 75-07 81 E3 FF 0F EB 05 90   .......u........
    0DE2:0150  81 CB 00 10 9D 49 85 C9-78 20 74 15 7B 0A 50 51   .....I..x t.{.PQ
    0DE2:0160  E8 1E 00 59 58 49 EB A3-50 51 E8 14 00 59 58 EB   ...YXI..PQ...YX.
    0DE2:0170  9A 50 51 E8 0B 00 59 58-EB 91 E8 04 00 5D CA 02   .PQ...YX.....]..
    0DE2:0180  00 B5 04 B1 04 D3 C3 8A-C3 24 0F 04 30 3C 3A 7C   .........$..0<:|
    0DE2:0190  02 04 07 8A D0 B4 02 CD-21 FE CD 75 E6 C3 00 00   ........!..u....
    0DE2:01A0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0DE2:01B0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0DE2:01C0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0DE2:01D0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0DE2:01E0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    0DE2:01F0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    -
    -RCX
    CX 0200
    :009E
    -
    -NDECBIN.COM
    -
    -W CS:0100
    0009E bayt yazılıyor
    -
    -Q
    
    C:\>DEBUG.EXE DECBIN.COM
    -R
    AX=0000  BX=0000  CX=009E  DX=0000  SP=FFFE  BP=0000  SI=0000  DI=0000
    DS=0DD2  ES=0DD2  SS=0DD2  CS=0DD2  IP=0100   NV UP EI PL NZ NA PO NC
    0DD2:0100 55            PUSH    BP
    -
    -D CS:0100 019D
    0DD2:0100  55 8B EC 8B 5E 06 8B 07-B9 04 00 9C 51 B1 04 D3   U...^.......Q...
    0DD2:0110  C0 59 33 DB A9 01 00 75-07 81 E3 F0 FF EB 05 90   .Y3....u........
    0DD2:0120  81 CB 01 00 A9 02 00 75-07 81 E3 0F FF EB 05 90   .......u........
    0DD2:0130  81 CB 10 00 A9 04 00 75-07 81 E3 FF F0 EB 05 90   .......u........
    0DD2:0140  81 CB 00 01 A9 08 00 75-07 81 E3 FF 0F EB 05 90   .......u........
    0DD2:0150  81 CB 00 10 9D 49 85 C9-78 20 74 15 7B 0A 50 51   .....I..x t.{.PQ
    0DD2:0160  E8 1E 00 59 58 49 EB A3-50 51 E8 14 00 59 58 EB   ...YXI..PQ...YX.
    0DD2:0170  9A 50 51 E8 0B 00 59 58-EB 91 E8 04 00 5D CA 02   .PQ...YX.....]..
    0DD2:0180  00 B5 04 B1 04 D3 C3 8A-C3 24 0F 04 30 3C 3A 7C   .........$..0<:|
    0DD2:0190  02 04 07 8A D0 B4 02 CD-21 FE CD 75 E6 C3         ........!..u..
    -




    0DE2:0100 ..................... FD ; MS-DOS .BIN file ID. ' Yoksa ya da bir başka byte ise, GWBASIC' ten *.BAS çalıştırılamaz. '

    MS-DOS .BIN file ID yoksa ya da FD değilse, GWBASIC şu mesajı ekrana gönderir: Bad file mode in 30 ' satır numarası '.

    N.B.: BIOS dosyaları da .BIN uzantılıdır, lakin illaki FD ile başlayacak diye bir şey yok. Meselâ, AMI BIOS dosyaları FF ile başlar.

    0DE2:0101 ..................... E2 0D ; *.BIN dosyası segment adresi, ki little-endian ' CS = 0DE2h '

    0DE2:0103 ..................... 00 01 ; *.BIN dosyası offset adresi, ki little-endian ' IP = 0100h '

    0DE2:0105 ..................... A6 00 ; MS-DOS için End of file ' EOF ' dahil, *.BIN dosyası uzunluğu, ki little-endian ' CX = 00A6 '

    0DE2:0107 - 01A4 .................... ; *.COM dosyası [uzunluğu]

    0DE2:01A5 ..................... 1A ; Zorunlu değil, ki MS-DOS için End of file.


    H 0100 0007 ; *.BIN dosyası oluşturabilmek için, 7 byte eklenecektir, ki zorunludur.

    ; 0100 BIN dosyasının başlangıç offset adresi, elde edilen 0107, *.BIN dosyasındaki *.COM dosyasının başlangıç offset adresidir.

    H 019D 0008 ; *.BIN dosyası oluşturabilmek için, MS-DOS için End of file dahil, 8 byte eklenecektir.

    ; 019D *.BIN dosyasındaki *.COM dosyasının bitiş offset adresi, elde edilen 01A5, *.BIN dosyasının bitiş offset adresidir.

    M CS:0100 019D CS:0107 ; CS:0100 019D adres aralığı 7 byte alan açmak için CS:0107 başlangıç adresinden itibaren taşı.

    E CS:0100 FD E2 0D 00 01 A6 00 ; CS:0100 - 0106 aralığına *.BIN dosyası oluşturmak için zorunlu olan 7 byte' ı taşı.

    E CS:01A5 1A ; *.BIN dosyasının sonuna MS-DOS için End of file ASCII karakterini yerleştir.

    D CS:0100 01A5 ; *.BIN dosyasının içeriğini görüntüle.

    N[ame]DECBIN.BIN ; Diske kaydedilecek dosyanın adı.

    RCX
    CX 0200
    :00A6

    [CS:]0100 - 01A5 offset adres aralığı *.BIN dosyasının uzunluğudur. ' CX = 01A5 - 0100 + 1 = 00A6 '

    W CS:0100 ' *.BIN dosyasını diske kaydet.



    Kod:
    _ DECBIN.BAS & DECBIN.BIN ' BASIC '
    
    GW-BASIC 3.23
    (C) Copyright Microsoft 1983,1984,1985,1986,1987,1988
    60300 Bytes free
    Ok
    LOAD "DECBIN.BAS"
    Ok
    LIST
    10 ASMADR=&H100
    20 DEF SEG=&HDE2
    30 BLOAD "DECBIN.BIN", ASMADR
    40 INPUT "N: "; D%
    50 CALL ASMADR(D%)
    60 IF(D% < 0) THEN PRINT USING "_1####_"; ELSE PRINT USING "_0####_";
    70 END
    Ok
    RUN
    N: ? -9753
    1101100111100111
    Missing operand in 60
    Ok
    RUN
    N: ? 9753
    0010011000011001
    Missing operand in 60
    Ok
    
    1LIST   2RUN<-   3LOAD"  4SAVE"  5CONT<-  6,"LPT1 7TRON<-  8TROFF<- 9KEY    0SCREEN


    _ DECBIN.BAS & ' Embedded Machine Codes ' DECBIN.COM ' BASIC '

    Kod:
    GW-BASIC 3.23
    (C) Copyright Microsoft 1983,1984,1985,1986,1987,1988
    60300 Bytes free
    Ok
    LOAD "DECBIN.BAS"
    Ok
    LIST
    10 I=0:J=0
    20 DIM A%(158)
    30 MEM%=VARPTR(A%(0))
    40 FOR I=0 TO 158
    50 READ J
    60 POKE MEM%,J
    70 MEM%=MEM%+1
    80 NEXT
    90 INPUT "N: "; D%
    100 ASMADR=VARPTR(A%(0))
    110 CALL ASMADR(D%)
    120 IF(D% < 0) THEN PRINT USING "_1####_"; ELSE PRINT USING "_0####_";
    130 END
    1000 DATA &H55,&H8B,&HEC,&H8B,&H5E,&H06,&H8B,&H07
    1100 DATA &HB9,&H04,&H00,&H9C,&H51,&HB1,&H04,&HD3
    1200 DATA &HC0,&H59,&H33,&HDB,&HA9,&H01,&H00,&H75
    1300 DATA &H07,&H81,&HE3,&HF0,&HFF,&HEB,&H05,&H90
    1400 DATA &H81,&HCB,&H01,&H00,&HA9,&H02,&H00,&H75
    1500 DATA &H07,&H81,&HE3,&H0F,&HFF,&HEB,&H05,&H90
    1600 DATA &H81,&HCB,&H10,&H00,&HA9,&H04,&H00,&H75
    1700 DATA &H07,&H81,&HE3,&HFF,&HF0,&HEB,&H05,&H90
    1800 DATA &H81,&HCB,&H00,&H01,&HA9,&H08,&H00,&H75
    1900 DATA &H07,&H81,&HE3,&HFF,&H0F,&HEB,&H05,&H90
    2000 DATA &H81,&HCB,&H00,&H10,&H9D,&H49,&H85,&HC9
    2100 DATA &H78,&H20,&H74,&H15,&H7B,&H0A,&H50,&H51
    2200 DATA &HE8,&H1E,&H00,&H59,&H58,&H49,&HEB,&HA3
    2300 DATA &H50,&H51,&HE8,&H14,&H00,&H59,&H58,&HEB
    2400 DATA &H9A,&H50,&H51,&HE8,&H0B,&H00,&H59,&H58
    2500 DATA &HEB,&H91,&HE8,&H04,&H00,&H5D,&HCA,&H02
    2600 DATA &H00,&HB5,&H04,&HB1,&H04,&HD3,&HC3,&H8A
    2700 DATA &HC3,&H24,&H0F,&H04,&H30,&H3C,&H3A,&H7C
    2800 DATA &H02,&H04,&H07,&H8A,&HD0,&HB4,&H02,&HCD
    2900 DATA &H21,&HFE,&HCD,&H75,&HE6,&HC3,&H1A
    Ok
    RUN
    N: ? -9753
    1101100111100111
    Missing operand in 120
    Ok
    RUN
    N: ? 9753
    0010011000011001
    Missing operand in 120
    Ok
    
    1LIST   2RUN<-   3LOAD"  4SAVE"  5CONT<-  6,"LPT1 7TRON<-  8TROFF<- 9KEY    0SCREEN

    N.B.: " Missing operand in 120 " uyarısı, IF ... THEN ... ELSE Statement' ın sözdizimine uygun kullanılmadığındandır.

    Y. Elektronik Mühendisi Ferdâ M. Tanyeri' nin dediği gibi, programları süslemek, düzenlemek, düzeltmek,... size kalmış!






    İ ç t e n l i k l e...

    Sevgiyle...

  6. #36
    Ç. R. Düzenleme
    Üyelik Tarihi
    Nov 2015
    Mesajlar
    503

    Seviye: 40 
    Tecrübe: 1,794,875
    Sonraki Seviye: 2,111,327

    Beğenmiş
    2,397
    Beğenilmiş
    2,050
    Adı Geçen
    0 Konu
    Etiketlendiği
    0 Konu
    UNDOCUMENTED DOSX VIII:





    Atlantis BA32: Mucize Çocuk' ta, Vincent Phybes' in söylemi felsefidir ' philosophia linguae ', ki ne diyordu_?

    BASIC'deki durum. Tek bildikleri dil bu ve siz de hemen buna programlanıyorsunuz...

    Diğer bütün diller bir kenara itiliyor. Bunu kompüter, yani bebek anlamayacağı için değil, kendileri bilmedikleri için yapıyorlar.


    Hülasa, bir zincir, en zayıf halkası kadar güçlüdür ve optimizasyon ve hâliyle de eliminasyon şarttır, değil mi_? Her neyse.


    BASIC, ' Vincent Phybes' in aksine, zira kendisi özde [Sembolik] Makina Dili ile kıyaslamaktadır ', özellikle de C ile kıyaslanarak kıyasıya eleştirilir, ki en gözde eleştiri de ne idi_?

    Sembolik Makina Dili' ndeki ' L[ow] L[evel] [programming] L[anguage] ' lojik komutlara benzer şekilde, C ile de bit seviyesinde işlemler yapılabilir, ki BASIC' de, her ne kadar HEX$ & OCT$ Functions' ı olsa da, BIN$ function diye bir şey y o k t u r.

    Ne o_? Bu bir zayıflık mı yoksa_? D e ğ i l. Neden_?

    Türkiye' de C Programlamanın duayenlerinden Kaan Aslan, Assembly Programlama Dili[.chm] notlarında ne diyordu_?

    Sembolik makine dilinde büyük-küçük harf duyarlılığı yoktur. Dilin karakter kümesi C'den fazla olarak @ ve ? işaretlerini kapsayacak biçimdedir.

    C'de döndürme işlemi yapan bir bit operatörü yoktur. Ancak makine dilinde genellikle döndürme komutları vardır.


    Öyleyse ' ki öyle ', bu mantığa göre, C' de zayıftır, değil mi_?



    Kod:
    #include<stdio.h>
    #include<conio.h>
    int main()
    {
    int decnum, binnum[50], i=0;
    printf("Enter any decimal number: ");
    scanf("%d", &decnum);
    while(decnum!=0)
    {
    binnum[i] = decnum%2;
    i++;
    decnum = decnum/2;
    }
    printf("\nEquivalent Binary Value = ");
    for(i=(i-1); i>=0; i--)
    printf("%d", binnum[i]);
    getch();
    return 0;
    }
    Sanal âlemden elde edilen TEST.C, Decimal Binary çevirici programıdır, ki Executable Format: 16-bit NE & 32-bit PE farketmeksizin hangi derleyici ' QCWIN.EXE | TCC.EXE | BCC.EXE & GCC.EXE | CL.EXE | ICL.EXE ' ile derlenirse derlensin, elde edilen sonuçlar değişmeksizin şudur:

    Compile & Link: I[ntel]BUILDC[onsole].BAT


    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\PROGRA~1\INTEL\COMPILER\11.1\048\BIN\IA32>IBUILDC TEST
    
    Intel(R) C++ Compiler Professional for applications running on IA-32, Version 11.1    Build 20090930 Package ID: w_cproc_p_11.1.048
    
    
    TEST.C
    
    XILINK: executing 'link'
    Microsoft (R) Incremental Linker Version 6.00.8168
    
    
    /MACHINE:IX86
    /FIXED
    /SUBSYSTEM:CONSOLE
    /INCREMENTAL:NO
    /OPT:REF
    /ENTRY:mainCRTStartup
    /OUT:TEST.EXE
    "/LIBPATH:C:\PROGRA~1\Intel\Compiler\11.1\048\Lib\ia32;C:\Program Files\Microsoft Visual Studio\VC98\mfc\lib;C:\Program Files\Microsoft Visual Studio\VC98\lib"
    
    TEST.OBJ
    
    ************
    test.c
    TEST.EXE
    TEST.obj
    ************
    
    Devam etmek için bir tuşa basın . . .
    
    C:\PROGRA~1\INTEL\COMPILER\11.1\048\BIN\IA32>TEST.EXE
    Enter any decimal number: -9753
    
    Equivalent Binary Value = -100-1-10000-1-100-1
    C:\PROGRA~1\INTEL\COMPILER\11.1\048\BIN\IA32>TEST.EXE
    Enter any decimal number: -32768
    
    Equivalent Binary Value = -1000000000000000
    C:\PROGRA~1\INTEL\COMPILER\11.1\048\BIN\IA32>

    Peki negatif desimal sayılar yok mudur_? Hiç kimsenin bu hâli hesaba katmaması da cidden enteresan.


    BASIC -- ASSEMBLY İŞBİRLİĞİ: CALL Statement II:

    Türkiye' de C Programlamanın duayenlerinden Kaan Aslan, Intel İşlemcileri Korumalı Mod Yazılım Mimarisi adlı eserinin önsözünde ne diyordu_?

    Beş ya da altı yıl önce DOS'a benzer deneysel amaçlı bir işletim sisteminin tasarım ve yazımı üzerinde çalışıyordum. Belirli bir aşamaya geldikten sonra bu sistemi korumalı modu kullanarak çokişlemliliği destekleyecek bir biçime dönüştürmek istedim. Ancak uygulama sırasında korumalı moddaki çalışma biçimini pek de iyi bilmediğimi anladım. Bildiklerim uygulama için yetmiyordu. İncelediğim yabancı kaynakların hemen hepsi (Intel'in başvuru kitaplarını da dahil ediyorum) eksik ve hatalarla doluydu. Zaman içerisinde gerekli bilgileri edindim ve deneyim kazandım.

    Bektaşi' ye iki şişe bade getirmişler ve demişler ki, " bunlardan hangisi kötü? "

    Herhangi birinden bir yudum alır almaz bırakmış ve demiş ki, " en kötüsü budur. "

    " Nasıl olur? Diğerini denemedin ki? "

    " Bundan daha kötüsü olamaz! "

    Her ne kadar öyle olsa da, bize göre, bir programlama dilini öğrenmenin yegâne yolu, User's [Guide | Reference], Software Developer's Manual ve benzeri kitaplardır, programlama kitapları d e ğ i l, zira programlama kitaplarındaki eksik ve hataların User's [Guide | Reference], Software Developer's Manual ve benzeri kitaplarla kıyaslanması bile abesle iştigaldir. : )

    Her neyse.

    Microsoft GW-BASIC Interpreter - User's Guide 1986:

    Assembly Language (Machine Code) Subroutines

    TWOSUM.BAS:


    Kod:
    10 DEF SEG=0
    100 CS=PEEK(&H102)+PEEK(&H103)*256
    200 OFFSET=PEEK(&H100)+PEEK(&H101)*256
    250 DEF SEG
    300 C1%=2:C2%=3:C3%=0
    400 TWOSUM=OFFSET
    500 DEF SEG=CS
    600 CALL TWOSUM(C1%,C2%,C3%)
    700 PRINT C3%
    800 END

    TWOSUM.ASM:

    Kod:
    double	segment
    assume	cs:double
    org	100h
    
    start:	jmp start1
    usrprg	proc far
    push	bp
    mov	bp, sp
    mov	si, [bp]+8		;get address of parameter b
    mov	ax, [si]		;get value of b
    mov	si, [bp]+10		;get address of parameter a
    add	ax, [si]		;add value of a to value of b
    mov	di, [bp]+6		;get address of parameter c
    mov	[di], ax		;store sum in parameter c
    pop	bp
    ret 	6
    usrprg	endp
    
    				;Program to put procedure in memory and remain resident.
    				;The offset and segment are stored in location 100-103H.
    
    start1:
    mov	ax, 0
    mov	ds, ax			;data segment to 0000h
    mov	bx, 0100h		;pointer to int vector 100h
    cmp	word ptr [bx+2], 0
    jne	quit			;program already run, exit
    cmp	word ptr [bx], 0
    jne	quit			;program already run exit
    mov	ax, offset usrprg
    mov	[bx], ax		;program offset
    mov	ax, cs
    mov	[bx+2], ax		;data segment
    push	cs
    pop	ds
    mov	dx, offset veryend
    int	27h
    quit:
    int	20h
    veryend:
    double	ends
    end	start




    BASIC' deki CALL Statement için, sanal âlemdeki hemen her platformda sunulan misal budur. Micro$oft sunduğuna göre, programlarda hata olamaz değil mi_?


    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\>ASM.EXE TWOSUM.ASM,,;
    The IBM Personal Computer Assembler
    Version 1.00 (C)Copyright IBM Corp 1981
    
    
    Warning Severe
    Errors  Errors
    0       0
    
    C:\>LINK.EXE
    IBM Personal Computer Linker
    Version 1.00 (C) Copyright IBM Corp 1981
    Object Modules: TWOSUM.OBJ
    Run File: TWOSUM.EXE
    List File [TWOSUM.MAP] :!
    
    There were    1 errors detected
    
    C:\>DEBUG.EXE TWOSUM.EXE
    -
    -S CS:0100 017F CD 20
    0DE2:013D
    -
    -NTWOSUM.COM
    -RCX
    CX 0180
    :003F
    -
    -W CS:0100
    0003F bayt yazılıyor
    -
    -Q
    
    C:\>TYPE TWOSUM.LST
     The IBM Personal Computer Assembler 05-17-<5           PAGE    1-1
    
    
    
     0000			double	segment
    			assume	cs:double
     0100			org	100h
    
     0100  EB 17 90		start:	jmp start1
     0103			usrprg	proc far
     0103  55		push	bp
     0104  8B EC		mov	bp, sp
     0106  8B 76 08		mov	si, [bp]+8	;get address of parameter b
     0109  8B 04		mov	ax, [si]	;get value of b
     010B  8B 76 0A		mov	si, [bp]+10	;get address of parameter a
     010E  03 04		add	ax, [si]	;add value of a to value of b
     0110  8B 7E 06		mov	di, [bp]+6	;get address of parameter c
     0113  89 05		mov	[di], ax	;store sum in parameter c
     0115  5D		pop	bp
     0116  CA 0006		ret	6
     0119			usrprg	endp
    
    			;Program to put procedure in memory and remain resident.
    			;The offset and segment are stored in location 100-103H.
    
     0119			start1:
     0119  B8 0000		mov	ax, 0
     011C  8E D8		mov	ds, ax		;data segment to 0000h
     011E  BB 0100		mov	bx, 0100h	;pointer to int vector 100h
     0121  83 7F 02 00	cmp	word ptr	[bx+2], 0
     0125  75 16		jne	quit		;program already run, exit
     0127  83 3F 00		cmp	word ptr [bx], 0
     012A  75 11		jne	quit		;program already run exit
     012C  B8 0103 R	mov	ax, offset usrprg
     012F  89 07		mov	[bx], ax	;program offset
     0131  8C C8		mov	ax, cs
     0133  89 47 02		mov	[bx+2], ax	;data segment
     0136  0E		push	cs
     0137  1F		pop	ds
     0138  BA 013F R	mov	dx, offset veryend
     013B  CD 27		int	27h
     013D			quit:
     013D  CD 20		int	20h
     013F			veryend:
     013F			double	ends
    			end	start


    N.B.: Antika Linker' in " There were 1 errors detected " uyarısı geçersizdir.





    Microsoft GW-BASIC Interpreter - User's Guide 1986 ne diyordu_?

    The assembly language subroutine called in the above program must be assembled, linked, and converted to a .COM file. The program, when executed prior to the running of the GW-BASIC program, will remain in memory until the system power is turned off, or the system is rebooted.

    Yukarıdaki programda çağrılan assembly dili subroutine' i derlenmeli, bağlanmalı ve bir .COM dosyasına dönüştürülmelidir. Program, GW-BASIC programının çalıştırılmasından önce yürütüldüğünde, sistem gücü kapatılana veya sistem yeniden başlatılana kadar bellekte kalacaktır.

    Peki söylenenler harfiyen yapıldığında ne olmaktadır_?

    IBMBASIC.COM:


    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\>DEBUG.EXE TWOSUM.COM
    -L
    -G
    
    Program normal olarak sonlandırıldı
    -
    -NIBMBASIC.COM
    -L
    -G
    
    Direct statement in file
    Ok
    LOAD "TWOSUM.BAS"
    Ok
    RUN
    0
    4792
    9584
    Bak hele! Karşımıza bir dizi çıktı!

    Her <-| ' Enter ' için dizinin genel terimi de şudur:

    a(0 < n < 14) = 4792 n

    Meselâ 9 Enter -> a(0 < n = 9 < 14) = 4792 *9 = 43128


    GWBASIC.EXE:


    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\>DEBUG.EXE TWOSUM.COM
    -L
    -G
    
    Program normal olarak sonlandırıldı
    -
    -NGWBASIC.EXE
    -L
    -G
    
    Ok
    LOAD "TWOSUM.BAS"
    Ok
    RUN
    Syntax error in 1162
    Ok
    Undefined line number in 1162
    Ok

    N.B.: GWBASIC.EXE, şu şekilde çalıştırılsa da değişen bir şey olmaz. Diğerleri için de benzer şeyler geçerlidir.


    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\>TWOSUM.COM
    
    C:\>GWBASIC.EXE
    
    GW-BASIC 3.23
    (C) Copyright Microsoft 1983,1984,1985,1986,1987,1988
    60300 Bytes free
    Ok
    LOAD "TWOSUM.BAS"
    Ok
    RUN
    Syntax error in 1162
    Ok
    Undefined line number in 1162
    Ok

    TWOSUM.BAS programında son satır numarası 800 olduğuna göre, 1162 nereden geldi_?*

    * Zor soru. İpucu: Bu yazı.



    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\>DEBUG.EXE TWOSUM.COM
    -L
    -G
    
    Program normal olarak sonlandırıldı
    -
    -NBASICA.EXE
    -L
    -G
    
    Line buffer overflow
    Ok
    LOAD "TWOSUM.BAS"
    Ok
    RUN
    AX=0200  BX=0BBE  CX=3A00  DX=0C03  SP=FFF8  BP=0C03  SI=B57D  DI=0BBE
    DS=2BE6  ES=2BE6  SS=2BE6  CS=1E3F  IP=B583   OV UP EI NG ZR NA PO CY
    1E3F:B583 B890B5        MOV     AX,B590
    -

    O[verflow]F[lag]: N[ot]O[verflow] -> OV[erflow]

    C[arry]F[lag]: N[ot]C[arry] -> C[arry]Y[es]

    CF: CY ise hatalı, geçersiz bir işlem var demektir.







    Kod:
    INT 27h		; DOS 1+ - TERMINATE AND STAY RESIDENT
    
    		; DX = number of bytes to keep resident (max FFF0h)
    		; CS = segment of PSP

    Ne var ki BASIC interpreters' den hiçbiri bu TSR programını tanımamaktadır. Öyleyse ne_? Şu:


    Kod:
    Microsoft(R) Windows DOS
    (C)Telif Hakkı Microsoft Corp 1990-2001.
    
    C:\>DEBUG.EXE
    -
    -D 0000:0100 0103
    0000:0100  8A 04 10 02                                       ....
    -
    -D 0210:048A 049F
    0210:0480                                C4 C4 40 CA 02 00             ..@...
    0210:0490  1E 50 51 B8 40 00 8E D8-B9 10 00 B0 3E A8 80 E1   .PQ.@.......>...
    -
    -E 0210:048A 55 8B EC 8B 76 08
    -E 0210:0490 8B 04 8B 76 0A 03 04 8B 7E 06 89 05 5D CA 06 00
    -
    -D 0210:048A 049F
    0210:0480                                55 8B EC 8B 76 08             U...v.
    0210:0490  8B 04 8B 76 0A 03 04 8B-7E 06 89 05 5D CA 06 00   ...v....~...]...
    -
    -NGWBASIC.EXE
    -L
    -G
    
    Ok
    LOAD "TWOSUM.BAS"
    Ok
    LIST
    10 DEF SEG=0
    100 CS=PEEK(&H102)+PEEK(&H103)*256
    200 OFFSET=PEEK(&H100)+PEEK(&H101)*256
    250 DEF SEG
    300 C1%=2:C2%=3:C3%=0
    400 TWOSUM=OFFSET
    500 DEF SEG=CS
    600 CALL TWOSUM(C1%,C2%,C3%)
    700 PRINT C3%
    800 END
    Ok
    RUN
     5
    Ok




    100 CS=PEEK(&H102)+PEEK(&H103)*256
    200 OFFSET=PEEK(&H100)+PEEK(&H101)*256

    TWOSUM.LST' teki usrprg procedürünün ' CS:0103 - CS:0119 ' makina kodlarını CS:OFFSET' e gömüyoruz ' embedded codes '. Bu kadar basit.

    MS-DEBUG direktiflerinin ' öncesinde pek çok kere açıklandığından ' açıklanması gerekli değil, değil mi_? : )



    İ ç t e n l i k l e...

    Sevgiyle...

  7. #37
    Ç. R. Düzenleme
    Üyelik Tarihi
    Nov 2015
    Mesajlar
    503

    Seviye: 40 
    Tecrübe: 1,794,875
    Sonraki Seviye: 2,111,327

    Beğenmiş
    2,397
    Beğenilmiş
    2,050
    Adı Geçen
    0 Konu
    Etiketlendiği
    0 Konu
    Eski dostumuz Palio68 için:





    Eski dostumuz Ercu Unlu için:





    Eski dostumuz ZaFrEsA için:








    ;................................................. .................................................. ..........................................





    İ ç t e n l i k l e...

    Sevgiyle...

  8. #38
    Ç. R. Düzenleme
    Üyelik Tarihi
    Nov 2015
    Mesajlar
    503

    Seviye: 40 
    Tecrübe: 1,794,875
    Sonraki Seviye: 2,111,327

    Beğenmiş
    2,397
    Beğenilmiş
    2,050
    Adı Geçen
    0 Konu
    Etiketlendiği
    0 Konu



    Martin Mystère, ÇDÖS 2D: Shakespeare'in Tüm Eserleri'nde ne deniliyordu_?

    Varsayalım bir maymun sonsuz zamanda bir seri harflere bassa, sonunda mantıklı bir yazı çıkabilir...

    Shakespeare'in eserleriyle de kalmaz: Onların bütün dillerdeki tercümeleri ve bilinmeyen dillerde yazılanları ve çeşitli özetleri...


    Haec simia erit auctor clarissimus, satis per tempus laborans. Nempe scripserit omnes libros qui umquam ficti essent. " Bu maymun uzun süre çok çalışacak, çok ünlü bir yazar olacak. Şimdiye dek yazılmış bütün kitapları o yazdı elbette ki. "


    ;................................................. .................................................. ..........................................

    Origines ' Kökenler ':

    Antik Yunan Filozofu ' philosophus Graecus antiquus /Muallim-i Evvel ' Aristoteles, Metafizik' te ne diyordu_? ' Metaphysica, liber I., C. IV., 985b15-20, Translitteratio Latina '

    Çünkü onlar varlıkların farklılıklarının "oran", "temas" ve "dönüş"den ileri geldiğini söylemektedirler. Şimdi bunlardan "oran", biçim; "temas", sıra ve "dönüş" durumdur. Çünkü A N'den biçim, AN NA'dan sıra ve Z H'den durum bakımından ayrılır. Hareket sorununa -varlıkların harekeri nereden ve nasıl aldıkları sorununa- gelince, diğerleri gibi bunlar da onu sessiz geçiştirmişlerdir.

    Antik Yunan Filozofu ' philosophus Graecus antiquus /Muallim-i Evvel ' Aristoteles, Oluş ve Bozuluş Üzerine' de ne diyordu_? ' De Generatione et Corruptione, 315b6-15, Translitteratio Latina '

    Demokritos ve Leukippos ise, şekilleri [skhemata] ortaya koyarak, başkalaşma ve oluşu bunlardan türetti: Bunların ayrışma ve birleşmelerinden oluşla bozuluşu, düzen ve konumlarından da başkalaşmayı. Görünüştekilerin doğru ve görünenlerin birbirine karşıt ve sonsuz sayıda olduğunu düşündüklerinden, şekilleri sonsuz yaptılar, böylece bileşikteki değişimler aynı şeyin başka kişiler için karşıt görünüşler kazanması oldu. Küçük bir şeyin karışmış olması bileşiğin düzenini değiştiriyor, bir bileşenin yerinin değişmesi ise bütünü başka gösteriyormuş -tragedya ve komedya aynı harflerden çıkmış ya.



    Eklektik Filozof ' philosophus eclecticus ' M. T. Cicero, Tanrıların Doğası Üzerine' de ne diyordu_? ' De Natura Deorum, 2.93 '

    Hic ego non mirer esse quemquam qui sibi persuadeat corpora quaedam solida atque individua vi et gravitate ferri mundumque effici ornatissimum et pulcherrimum ex eorum corporum concursione fortuita? Hoc qui existimat fieri potuisse, non intellego cur non idem putet, si innumerabiles unius et viginti formae litterarum vel aureae vel qualeslibet aliquo coiciantur, posse ex iis in terram excussis annales Ennii ut deinceps legi possint effici; quod nescio an ne in uno quidem versu possit tantum valere fortuna.

    Şimdi bu noktada katı ve bölünmez atomların kendi ağırlık ve güçleriyle hareket ettiklerine ve rastlantısal çarpışmaları sonucunda bu süslü mü süslü, bu güzeller güzeli evrenin meydana geldiğine kendisini inandıran birinin bulunmasına şaşırmalı mıyım? Bunun olabileceğini düşünen biri, yirmi bir harfin altından ya da hangi maddedense artık, sayısız kopyası fırlatılıp atılsa, yere düşen bu harflerin okunduğunda Ennius'un Annales'ini ortaya çıkarabileceğini niçin düşünmez, hiç anlamış değilim. Bunun neredeyse tek bir dizede bile olma şansı yok.

    Eklektik Filozof ' philosophus eclecticus ' M. T. Cicero, Kehanet Üzerine' de ne diyordu_? ' De Divinatione, 1.23 '

    Quid? quaeris, Carneades, cur haec ita fiant aut qua arte perspici possint? Nescire me fateor, evenire autem te ipsum dico videre. Casu, inquis. Itane vero? quicquam potest casu esse factum, quod omnes habet in se numeros veritatis? Quattuor tali iacti casu Venerium efficiunt; num etiam centum Venerios, si quadringentos talos ieceris, casu futuros putas? Aspersa temere pigmenta in tabula oris liniamenta efficere possunt; num etiam Veneris Coae pulchritudinem effici posse aspersione fortuita putas? Sus rostro si humi A litteram inpresserit, num propterea suspicari poteris Andromacham Ennii ab ea posse describi?

    Ne? Carneades, bu olayların neden böyle olduğunu ya da hangi sanatla görülebildiğini mi soruyorsun? Bilmediğimi itiraf ediyorum, fakat kendiniz de göreceksiniz diyorum. Sırf rastlantı diyorsun. Hakikaten öyle mi? Üzerinde hakikatin her sayısını taşıyan herhangi bir şey rastlantı olabilir mi? Dört zar atılır ve bir Venüs [atışı] elde edilirse, bu bir şanstır, ya dört yüz atışta yüz Venüs' ün de bir şans olacağını mı düşünüyorsun? Bir tuval üzerine rastgele atılan boyaların bir suretin ana hatlarını oluşturması mümkündür; ancak pigmentlerin tesadüfi dağılımının Cos Venüsü'nün güzelliğini oluşturabileceğini düşünüyor musunuz? Farzımuhal, bir hınzır, burnuyla yere 'A' harfini oluştursun; bu, Ennius'un Andromache şiirini yazabileceğine inanmak için bir sebep midir?






    ;................................................. .................................................. ..........................................

    Theoria Simiarum Infinitarum ' Sonsuz maymun teoremi ':

    Theoria simiarum infinitarum est appellatio vulgaris sententiae elegantiori mathematicae data, quae dicit sortes eventus improbabilis, si per infinitum tempus temptatae, infinitati ipsi appropinquare.

    Sensu est antiqua, at figura hodierna dicit, si essent simiae infinitae, vel una per tempus infinitum, sedentes et adhibentes machinas dactylographicas, tandem a forte opera omnia Gulielmi Shakespeare prodiderint.


    Sonsuz maymun teoremi, sonsuz bir zaman dilimi boyunca denendiğinde olası olmayan sonuçların sayısının sonsuza yaklaştığını belirten çok zarif bir matematiksel önermeye verilen popüler bir isimdir.

    Bu eski bir düşüncedir, ancak modern bir yaklaşıma göre eğer sonsuz sayıda maymun olsaydı veya sonsuz bir süre boyunca tek bir maymun oturup daktilo kullansaydı, sonunda William Shakespeare'in tüm eserleri tesadüfen ortaya çıkardı.

    İspat:

    _ Daktiloda z tuş, Shakespeare' in eseri, a boşluk, noktalama işareti ve harften oluştuğu varsayılırsa, yazı denemeleri bağımsız olaylar olduğundan ilk n denemede Shakespeare' in eserinin oluşmama olasılığı

    f(z, a, n) = (1 - 1 /z^a)^n

    Burada, a, z sonlu bir değer ise ' ki öyledir ', 0 < f(z, a, n)^1/n < 1 olduğundan sonsuz denemede ' n -> oo için '

    Lim f(z, a, n) = 0
    n -> oo

    Shakespeare' in eserinin oluşmama olasılığı sıfırdır, ki n = oo için Shakespeare' in eserinin yazılma olasılığı % 100' e yaklaşır.

    _ f(z, a, n), ilk n maymundan hiçbirinin Shakespeare' in eserini ilk denemede yazamama olasılığını da belirtir, ki n -> oo için f(z, a, n) = 0 olduğundan değişen bir şey olmaz, ki en az bir maymun tarafından Shakespeare' in eserinin yazılma olasılığı % 100' e yaklaşır.


    ;................................................. .................................................. ..........................................

    Nümerik tatbikat:

    Shakespeare' in eseri Hamlet, 132.680' i alfabetik harf olmak üzere, toplam 199.749 karakterden oluşmaktadır.

    26 *2 (büyük-küçük harfler) + 12 (noktalama imleri) = 64 karakter

    f(z, a, n) = (1 - 1 /z^a)^n : Shakespeare' in eserinin ilk n denemede oluşmama olasılığıdır.

    f(z = 64, a = 199749, n = 10^9) : Shakespeare' in Hamlet' inin ilk n denemede oluşmama olasılığıdır.

    Ne var ki n > 0 için bu değer ' oluşmama olasılığı ' pratikte % 100' dür ' i.e., oluşma olasılığı pratikte % 0' dır '. Bu yüzden kavranabilecek sayılarla iştigal etmek efdaldir.

    Shakespeare' in herhangi bir eseri yerine, bu maymun, yalnızca latince " pithecus " yazacak olsun.

    _
    f(z = 64, a = 8, n = 10^9) : Latince " pithecus " kelimesinin ilk bir milyar denemede oluşmama olasılığıdır.

    f(z = 64, a = 8, n = 10^9) = (1 - 1 /64^8)^(10^9)

    log f(z = 64, a = 8, n = 10^9) = (10^9) log (1 - 1 /64^8) = -0.0000015429239464853

    f(z = 64, a = 8, n = 10^9) = 0.9999964472926 ' % 99.99964472926 '


    1 - f(z = 64, a = 8, n = 10^9) : Latince " pithecus " kelimesinin ilk bir milyar denemede oluşma olasılığıdır.

    1 - f(z = 64, a = 8, n = 10^9) = 0.0000035527074 ' % 0.00035527074 '

    _
    f(z = 64, a = 8, n = 10^10) : Latince " pithecus " kelimesinin ilk on milyar denemede oluşmama olasılığıdır.

    f(z = 64, a = 8, n = 10^10) = (1 - 1 /64^8)^(10^10)

    log f(z = 64, a = 8, n = 10^10) = (10^10) log (1 - 1 /64^8) = -0.000015429239464853

    f(z = 64, a = 8, n = 10^10) = 0.9999644734943 ' % 99.99644734943 '


    1 - f(z = 64, a = 8, n = 10^10) : Latince " pithecus " kelimesinin ilk on milyar denemede oluşma olasılığıdır.

    1 - f(z = 64, a = 8, n = 10^10) = 0.0000355265057 ' % 0.00355265057 '

    _
    f(z = 64, a = 8, n = 10^11) : Latince " pithecus " kelimesinin ilk yüz milyar denemede oluşmama olasılığıdır.

    f(z = 64, a = 8, n = 10^11) = (1 - 1 /64^8)^(10^11)

    log f(z = 64, a = 8, n = 10^11) = (10^11) log (1 - 1 /64^8) = -0.0001542923946

    f(z = 64, a = 8, n = 10^11) = 0.9996447917336 ' % 99.96447917336 '


    1 - f(z = 64, a = 8, n = 10^11) : Latince " pithecus " kelimesinin ilk yüz milyar denemede oluşma olasılığıdır.

    1 - f(z = 64, a = 8, n = 10^11) = 0.0003552082664 ' % 0.03552082664 '



    ;................................................. .................................................. ..........................................

    Eski dostumuz Savataged için:





    Eski dostumuz Melange için:





    ;................................................. .................................................. ..........................................





    İ ç t e n l i k l e...

    Sevgiyle...

  9. #39
    Ç. R. Düzenleme
    Üyelik Tarihi
    Nov 2015
    Mesajlar
    503

    Seviye: 40 
    Tecrübe: 1,794,875
    Sonraki Seviye: 2,111,327

    Beğenmiş
    2,397
    Beğenilmiş
    2,050
    Adı Geçen
    0 Konu
    Etiketlendiği
    0 Konu
    İstanbul Teknik Üniversitesi Yüksek Mühendislerinden Kâzım Mirşan' ın Anısına...

    I:


    Dr. Ergin Korur, Yazıtların Esrarı' nda ne diyordu_? ' Bilim ve Teknik, S: 138 '


    Diyelim ki bir araştırma gezisine giriştiniz, taşlık ve çorak bir vadide ilerliyorsunuz. Birden karşınıza üzerine anlamadığınız garip yazılar kazılmış yalçın bir kaya çıktı. Bunun çağımızdan belki de binlerce sene önce yaşamış bir uygarlığın anıtı olduğunu anladınız ve kalbiniz hızlı hızlı çarpmağa başladı: "Acaba bu anıt-kayanın dilini anlayabilecek, sırrını çözebilecek miyiz?" diye düşündünüz, sonra bir an için ümitsizliğe kapıldınız, öyle ya, anıtın dilini bilen tek kişi bile yok, yazısı belki binlerce seneden beri unutulmuş! Arkadan tekrar ümitlendiniz ve: "yok canım, elektronik beyinlerin yardımıyla en zor şifreleri çözen insanoğlu bir yazıt parçasının hakkından gelemez mi?" dediniz. Acaba bu durumda iyimserlik mi, kötümserlik mi gerçeğe daha yakın?

    Aslında gerçek ortada bir yerdedir: Bazen anlaşılması imkânsız sanılan bir yazıtı mutlu rastlantıların da yardımıyla okuyabiliyor, bazense ilk bakışta çözümü kolay görünen bir yazıt karşısında çaresiz kalıyoruz. Bunun sebebini açıklayabilmek için işe önce eski bir yazıtı çözmekte karşılaşılan zorlukları belirtmekle başlayalım: Bir eski yazıtı çözmek için elimizde bazı ipuçları bulunması gerekir. Bunlar başlıca a) Yazıtta çok tekrarlanan işaret, hece ve sözler, b) Yazıtta kullanılan dilin bugün de bilinen bir dile yakınlığı, c) Yazıtta daha önce çözülmüş başka dil ve alfabelere birlikte yer verilmiş olması gibi yardımcı unsurlardır. Metni okuyabilmek için önce metindeki harf, hece ve kelimeleri seçebilmek ve hangi şeklin hangi harf, hece veya kelimeye karşılık olduğunu bulmak lâzımdır. Bu ise öyle sanıldığı kadar kolay bir iş değildir. Bunu daha iyi gözler önüne sermek için önce Türkçe kısa bir metin ele alalım:


    Neclâ, oğlu Çetin'i "Bilim ve Teknik"i okurken gördü ve sordu:

    - Hangi yazıya daldın öyle?

    - Çok korkunç anneciğim! Uzayda kara delik ve çukurlar varmış; onlara düşen uzay gemileri yok oluyormuş!

    - Onu astronotlar düşünsün! Sen asıl evden okula giderken açık bırakılan delik ve çukurlara dikkat et!


    Şimdi bu metni sadece büyük harflerle ve noktalama işaretleri ile kelime ve satır aralıkları olmadan yazalım:





    NECLÂOCLUÇETİNİBİLİMVETEKNİKİOKURKENGÖRDÜVESORDUHA NClYAZIYADALDINÖYLEKORKUNÇANNECİCİMUZAYDAKARADELİK VEÇUKURLARVARMIŞONLARADÜŞENUZAYGEMİLERİYOKOLUYORMU ŞONUASTRONOTLARDÜŞÜNSÜNSENASILEVDENOKULAGİDERKENAÇ IKBIRAKILANDELİKVEÇUKURLARADİKKATET

    Metni nasıl buldunuz? Zannediyorum ki okumakta güçlük çektiniz. Herhalde edebiyat öğretmenimizden "on" alacak bir ödeve benzemiyor değil mi? Şimdi isterseniz bu metni A ve E'yi = A ile; O, Ö, U ve Ü'yü = O ile göstererek ve I ile İ'yi tamamen kaldırarak yeniden yazalım:

    NECLÂOGLOÇATNBLMVATAKNKOKORKANGORDOVASORDOHANGYA27 YADALDNOYLAÇOKKORKONÇANNACĞMOZAYDAKARADALKVAÇOKORL ARVARMŞONLARADOŞONOZAYGAMLARYOKOLOYORMUŞONOASTRONO TLARDOŞONSONSANASLAVDANOKOLAGDARKANAÇKBRAKLANDALKV AÇOKORLARADKKATAT

    Şimdi ne dersiniz? Metni kolayca okumak bir yana, Türkçe olduğundan bile şüphe ettiniz sanırım! İşte eski yazıtlar çoğunlukla buna benzer biçimde kaleme alınmışlardır. Eğer bildiğimiz Latin harfleri ile kaleme alınmış Türkçe bir metin bu kadar anlaşılmaz hale gelirse, siz artık bilinmeyen bir dil ve alfabe ile yazılmış bu biçim bir metinle karşılaşan bilginlerin ne büyük zorluklar çektiğini düşünün!

    Eski çağların parlak medeniyetlerinin belgeleri olan eski yazıtların okunması ancak on sekizinci yüzyıl sonlarında ciddî olarak ele alınabilmiştir. O sıralarda bilinen ve yazıtları okunabilen başlıca eski diller Yunanca, İbranice ve Latince idi. Eski Mısır dil ve yazısı tamamen unutulmuştu. Bu yüzden Mısır hiyeroglif resim-yazısı okunamıyor, hatta bazıları hiyerogliflerin bir yazı değil, süs olduğunu bile iddia ediyordu. Babil, Asur ve Hitit çivi yazıları çözülememişti. Türk millî anıtları olan Orhun kitabelerinin varlığı bile bilinmiyordu. Bundan dolayı eski çağlara ait bilgilerimiz çok sınırlıydı. Bugün ise bütün bu yazıtları çözmüş bulunuyoruz.

    Tarih bilgimiz yazının Mısır ve Mezopotamya'da kullanılmaya başladığı Milâttan üçbin yıl öncesine kadar uzanmış, elimize günümüzden beş bin yıl öncesine kadar dayanan paha biçilmez bir tarih arşivi geçmiş bulunmaktadır. Bunu her şeyden önce, çözüme yok denecek kadar az ipucu ile başlayan ve yıllarca uğraşarak önlerindeki muazzam güçlükleri yenen birkaç fedakâr bilgine borçluyuz. İsterseniz anlatıma Fransız bilgini Champollion (1790 - 1832) ve Mısır yazıtlarının çözümünden başlayalım:

    Napoléon'un 1799'daki Mısır seferine katılan bir Fransız askeri Rosetta'da bir kalenin yıkıntıları arasında meşhur "Rosetta taşı"nı buldu. Bu taş, üzerinde Mısır hiyeroglif ve basitleştirilmiş demotik yazısı ile Yunanca olmak üzere, üç ayrı yazı bulunan yassı bir bazalt levha idi. Yunanca metinden yararlanarak bunun Mısır firavunu beşinci Ptoleme devrine ait, M.Ö. 196 yılında yayınlanmış bir emirname olduğu anlaşıldı. İngiliz bilginleri Young ve Bankes Yunanca metnin yardımıyle hiyeroglif ve demotik yazılı bölümü çözmeğe çalıştılarsa da ancak çok tekrarlanan "Kleopatra" ve "Berenice" gibi bir iki özel ismi okuyabildiler. 1820 başlarında Champollion Rosetta taşının sırrını çözmeğe azmetti.

    Daha önce eski Mısır diline yakın Kopt dilini öğrenmiş olması ona büyük ölçüde yarar sağladı. Hiyeroglifleri dikkatle inceledikten sonra, "Kaisaros", "Autokrator" gibi ünvanları ve "Aleksandros", "Hadrianos" ve "Thothmes" gibi özel isimlerle bunları belirten hece işaretlerini okumağa muvaffak oldu Nihayet 1822'de taşın çözümünü tamamlayarak araştırmalarının sonucunu aynı yılın sonbaharında Paris Akademisi'ne bir raporla bildirdi. Ayrıca bu konudaki kitabını 1824'te yayınladı. O yıllarda birçokları genç araştırmacının çözüm yolundan şüphe ettilerse de 1866'da bulunan ve hem demotik, hem hiyeroglif yazıyla kaleme alınmış plan M.Ö. 238 tarihli Canopus emirnamesi Champollion'un çözüm şeklini doğrulayarak bu konudaki bütün şüpheleri giderdi.

    Eski Fars (Pers) yazıtlarını kısmen de olsa çözme şerefi Alman bilgini Grotefend (1775 - 1853)'e aittir. Grotefend 1802'de eski Fars yazıtlarını incelemeğe başladı. Çalışmalarında özellikle gezgin Niebuhr (1733 - 1815) un İran'da Şiraz'ın kuzeydoğusunda bulunan M.Ö. 500 yıllarından kalma Persepolis yazıtlarından 1765'te kopye ederek 1788'de yayınladığı üç dilli (Eski Fars, Elam ve Babil) metinden yararlandı. Önce eski Farsça "Darius, büyük kral, kralların kralı" ibaresini çözmeğe muvaffak oldu. Bu konuda kaydettiği ilerlemeleri 1802'de Göttingen Akademisi'ne yazıyla iletti. Ancak İran'da Kirmanşah'ın doğusunda bulunan ve en önemli Fars yazıtı olan Behistun (Bisütun) kitabelerine erişememesi ve eski Fars diline yakın olan Sanskrit ve Avesta'yı bilmemesi araştırmalarını daha da ileriye götürmesini önledi.





    Behistun yazıtlarını çözmek Henry Rawlinson (1810-1895) a nasip oldu. Daha önce birçok klasik dilleri ve Farsçayı öğrenmiş olan Rawlinson 1835'ten itibaren, Darius'un M.Ö. 516 yılında kayalara kazdırmış olduğu bu yazıtlarla ilgilenmeğe başladı. Yazıtların kusursuz kopyelerini çıkarabilmek için en yalçın kayalıklara kadar tırmanıp hayatını tehlikeye atmaktan çekinmedi.

    1837'de, iki yıllık bir çalışmadan sonra yazıtın eski Farsça olan ikiyüz satırlık ilk iki sütununu okuyabildi ve bunu İngiliz Araştırma Kurumu "Royal Asiatic Society"ye bildirdi. Farsça metin sayesinde yazıttaki Elam ve Babil yazısiyle kaleme alınmış metinlerin de 1850'ye kadar devam eden çalışmalar sonucunda okunması mümkün oldu. Hattâ sınamak için 1857'de Rawlinson, Talbot, Hincks ve Oppert'e Asur, Babil ve Fenike ülkeleri kralı Tiglatpileser l'in (M.Ö. 1115 - 1077) taş silindir şeklindeki bir emirnamesinin kopyeleri ayrı ayrı verildiği zaman bu dört bilgin metni hemen hemen aynı şekilde çözerek artık bu konudaki güçlüklerin giderilmiş olduğunu bilim dünyasına kesinlikle gösterdiler.

    Hitit yazıtlarının varlığı epey zamandan beri biliniyordu. Gezgin Burckhardt 1812'de Hama yazıtını, Texier 1839'da ve Hamilton 1842'de Boğazköy ve Alacahöyük yazıtlarını görüp tarif etmişlerdi. Nihayet Boğazköy'de kazı yapan Hugo Winckler 1906'da on bini aşan kil tablet üzerinde kaleme alınmış Hitit devlet arşivini ortaya çıkardı. Bunun üzerine çözüm çalışmaları hızlandı. Çek bilgini Hrozny 1917'de Hititlerin yazıtlarda aynı zamanda kullandığı Sümer ve Akadça ideogramlardan, yani ortak resim - işaretlerden yararlanarak Hitit dilini kısmen çözdü. 1947'de bulunan iki dilli (Hitit - Fenike) Karatepe anıtı ideogramların ve Hitit yazısının daha iyi anlaşılmasını sağladı. Öyle ki bugün hemen bütün Hitit metinlerinin okunması mümkün olmuştur.

    Bilinen en eski Türk yazı-anıtlarından olan Orhun kitabeleri Moğolistan'da Baykal Gölü'nün güneyinde Orhun nehri vadisinde bulunmaktadır. M. S. 720 - 725 arasında dikilmiş Tonyukuk, 732'de dikilmiş Kültigin ve 735'te dikilmiş Bilge Kağan yazıtlarından ibarettir. Yazıtlar, sağdan sola doğru kazılmış dördü sesli, otuz dördü sessiz otuz sekiz harflik bir alfabe ile kaleme alınmıştı. Önce 1721'de Yenisey dolaylarını birlikte gezmiş olan Messerschmidt ve Starenberg bölgedeki bazı anıtların varlığından bahsetmişlerdi. Orhun'da araştırma yapan Rus bilgini Yadrintsev 1889'da Kültigin ve Bilge Kağan yazıtlarını buldu. Ancak bunları okumayı Danimarkalı Thomsen (1842 - 1927) başardı. Thomsen önce metinde çok geçen "Tengri", "Türk" ve "Kültigin" kelimelerini okudu ve bunlardan yararlanarak 1894'te bütün metni çözdü.

    Son ikiyüz yılda eski yazıtları okumakta elde ettiğimiz bütün başarılara ve çeşitli imkân, harf ile hece kombinezonlarını denemek için yararlandığımız elektronik beyinlere rağmen bugün Etrüsk ve Maya yazıtları gibi önemli birçok tarihi belgeyi çözememiş bulunuyoruz. Etrüsk yazıları sağdan sola doğru yazılan ve eski Yunan alfabesine dayanan otuz harflik bir işaret sistemi ile kaleme alınmıştır. Elimizdeki yazıtların kısalığı şimdilik çözümü imkânsız kılıyor. Maya yazıtları ise 800 kadar karmaşık hiyeroglif işaretten oluşmaktadır. Bugün ancak Maya sayı sistemini çözümleyebilmiş bulunuyoruz. Bunlar gibi daha okunamamış nice yazıt, meraklı bilgin veya amatör tarafından çözüleceği günü beklemektedir!





    Zagor YD30: Yeti' de Ramath ne diyordu_?

    "... Gobi'nin uzak bir köşesinde bulunan Taş Kitabedeki esrarengiz yazıları çözmek... "

    "... ve çok eski bir geleneğe göre Yedi Gücün formülünü elde etmek... "

    " Gobi'nin uzak bir köşesinde bulunan Taş Kitabedeki esrarengiz yazılar " kaç satır_? 7.

    Tonyukuk Yazıtı' ndaki I. taşın hem Batı hem de Doğu yüzünde 7 satır yer almaktadır.






    Yüksek Mühendis, Türük Bilge Kağan İline Bitig ' Türk Devleti Hakanının Halkı Hakkındaki Yazı ':

    _ Tonyukuk Yazıtı ' Taş I, Batı Tarafı '


    § 1. BİLGE ATUN-UQUQ BIN ÖZÜM, ; Ben kendim "Bilge Atun Uquq"um ["Bil Namdarı"yım],
    TABIĞAÇ İLİNE QILINTIM, ; -senin (yani sana tabi) Tabığaç memleketine (İl-Etiriş Qağan tarafından) tayin olundum.
    TÜRÜK BUDUN TABIĞAÇQA KÖRÜR ERTİ ; çünkü (ordaki) Türk Kavmi (yani, Büyük Okyanus kıyılarında beylikler kurmuş olan Oğuz beyleri halkı) Tabığaç [Barbarlar] çıkarına görev yapar (hizmet eder) idi.


    TÜRÜK BUDUN, QANIN BOLMAYIN, ; Hanı olmadığından dolayı, Türk Kavmi
    TABIĞAÇDA ADRILTI, -QANLANTI ; Tabığaçdan ayrıldı, -kendi hanı oldu.
    QANIN QODIP, TABIĞAÇQA YANA İÇİKTİ, ; Hanını bırakarak, yine Tabığaça (Tabığaç halkına) dahil oldu,
    -TENRİ ANÇA TİMİS ERİNÇ, "QAN BİRTİM"! ; Tanrı anca nasip etmiş erinç, "sana han verdim" dedikten sonra.


    QANININ QODIP ; Hakanını bırakarak
    İÇİKDİN, ; İÇİKDİN [barbarlara dahil oldun],
    İÇİKDÜK ÜÇÜN TENRİ ; İÇİKDÜK için Tanrı seni
    ÖLİTMİS ERİNÇ ; ÖLİTMİS [durağan hale getirmiş] erinç.
    TÜRÜK BUDUN ; Türük Kavmi
    ÖLTİ-ALQINTI, ; durağan hale gelerek asimile oldu,
    UYUQ BOLTI. ; ölü düştü.
    TÜRÜK İSİR BUDUN YİRİNTE ; Türük inancındaki kavim yerinde


    BUD QALMADI. ; BUD [millî irade] kalmadı.
    IDA-TAŞTA QALMIŞI, ; Hareketli [motive] taşlarda (yani, "dağlarda") kalmış olanları
    QOBARINIP YİTİYÜZ BOLTI, ; kabararak yediyüz oldu;
    iKİ ÜLİGİ ATLIĞ ERTİ, ; bunun üçte ikisi atlı idi,
    BİR ÜLİGİ YADAĞ ERTİ, ; üçte biri yaya idi.
    YİTİYÜZ KİSİG, ; Bu yediyüz kişinin


    -ODUZ OĞIMA OLIĞI ; -kazanılacak zaferin
    UŞUD ERTİ ; başkanının (yani, hakanın)
    OYUĞUL TİDİ- ; danışmanı olmak üzere-
    OYUĞMASI BIN ERTİM. ; danışmanı ben idim.
    § 2. BİLGE ATUN UQUQ, ; Ben, Bilge Atun Uquq,
    QAĞANIM UQISAYIN TİDİM, ; Hakanımın fikrini alayım dedim,
    SAQINTIM. ; -tedbirli oldum.
    "TURUQ BUQALI ; Çünkü "zayıf boğalı
    SEMİZ BUQALI ; semiz boğalıyı
    ARQADA BİLSER ; kendi arkasında bilir ise,


    SEMİZ BUQA ; semiz boğa bunu
    TURUQ BUQA ; zayıf boğa
    TİYİN BİLMEZ ERMİS", ; derecesinde bilmez imiş",
    TİYİN, ANÇA SAQINDIM. ; diyerek, anca sakındım.
    ANTA KİSRE, ; Ondan sonra,
    TENRİ BİLİG BİRTÜK ÜÇÜN, ; Tanrı bilgi verdiği için,
    ÖZÜM ÖK QAĞAN UQISDIM : bizzat kendim hakanımın fikrini aldım:
    "BİLGE ATUN-UQUQ, ; "Bilge Atun Uquq,
    BUYULA BUĞA TURQAN BİRLE, ; BUYULA BUĞA TURQAN ile beraber,


    İL-ETİRİS QAĞAN BOLAYIN." ; İl-Etiriş Hakanda bulunayın", demek sureti ile.
    § 3. BİRİYE TABIĞAÇIĞ, ; Berideki [güneydeki] Tabığaçları,
    ÖNRE QITANIĞ, ; öndeki [öndeki ve de doğudaki] Qıtanları,
    YIRAYA QĞUZUĞ ; yıradaki [uzaktaki ve de kuzeydeki] Oğuzları
    ÜKÜS ÖLİRTİ, ; kitleler halinde imha eden
    BİL ÖGİSİ-UÇUBISI ; regnumun iye-lideri (yani, kumandanı)
    BİN ÖK ERTİM. ; ise, ben idim.
    UÇUĞUY UQUZIN ; Uçuğuy Yış [İçki Türkistan] denilen yerin
    QARA QUMIĞ ; Qara Qumunda
    OLIRUR ERTİMİZ. ; oturur idik.


    _ Tonyukuk Yazıtı ' Taş I, Doğu Tarafı '

    İKİ BİN ERTİMİZ BİZ, ; İki bin idik biz,
    -İKİ SÜG BOLTI! ; -bundan iki ordu oldu ve
    "TÜRÜK BUDUN [OLUR]ĞALI, ; "Türük kavmi oturalı;
    TÜRÜK QAĞAN OLURĞALI, ; yani, Türük Hakanı (tahta) oturalı,
    USUNTUN BOLIQA [BALIQA] ; Usuntun Bolıqa,
    TALUY ÖGÜZKE TEGMİS ; Taluy Ögüze değmiş (olan hiç kimse)
    YOQ ERMİS", ; yok imiş", demek sureti ile,
    -QAĞANIMA ÖTİNİP SÜLETİDİM. ; -Hanımdan ötünerek sülemiş idim:
    USUNTUN BOLIQA [BALIQA], ; Usuntun Bolıqa,
    TALUY ÖGÜZKE TEGÜRTİM. ; Taluy Ögüze değdirdim.
    ÜÇ-OTUZ BOLIQ [BALIQ] ISIDI-USIN ; "27 bolıg (veya, balıq)" olarak registre edilen bu bölge,
    BUNTATU YURTDA ; böyle büyük bir yurtta
    YATU-QALUR ERTİ. ; bulunuyor idi.

    § 6. QIRQIZ'lar ile savaş

    TABIĞAÇ QAĞAN YAĞIMIZ ERTİ, ; Çin Hakanı düşmanımız idi,
    ON-OQ QAĞAN YAĞIMIZ ERTİ, ; On-Oq Hakanı düşmanımız idi,
    ARTUQ, QIRQIZ -KÜÇLİG QAĞAN, ; ve de Qırqızlar, güçlü hakan,
    YAĞIMIZ BOLTI. ; düşmanımız oldu.
    OL ÜÇ QAĞAN ÖGLESİP, ; O üç hakan nasihatlaşıp,
    "ALTUN YIS ÖZE QABISALIM", TİMİS ; "Altun Yışda birleşelim", demişler
    ANÇA ÖGLESMİS : ve şöyle bir düşünceye varmışlar:
    "ÖNRE TÜRÜK QAĞANĞARU ; "İlk önce Türük Hakanına
    SÜLELİM", TİMİS. ; süleyelim", demişler.
    "ANARU SÜLEMESER, ; "Eğer ona karşı sülemez isek,
    QAÇ NEN ERSER, OL BİZNİ, ; her ne hal ise; o bizi
    'QAĞANI ALP ERMİS, OYĞUÇISI ; -hakanı alp imiş, danışmanı
    BİLGE ERMİS', QAÇ-NEN ERSER, ; yurtsever imiş, her ne hal ise-
    ÖLÜRTEÇİ, ÖKÜK ; imha edecek", diyerek,
    -ÜÇEGÜN QABISIP SÜLELİM, ; "üçümüz birleşerek süleyelim,
    ANI YOQ-UQISALIM", TİMİS. ; onu yok edelim", demişler.
    TÜRGİS QAĞAN ANÇA TİMİS BUN : Türgis Hakanı anca demiş:
    "ON BUDUNIM ANTA ; "On Kavmim orada (Altun Yışda, -K.M.)
    ERUR", TİMİS ; bulunuyor", demiş.
    "TÜRÜK BUDUN ; "Türük Kavminin durumu
    YEME BULĞANÇ OL", TİMİS ; yine karışık", demiş;
    "OĞUZI YEME TARQANÇ OL", TİMİS. ; "Oğuzu ise, yine de dağınık durumda", demiş.

    OL SABIĞ İSİDİP, ; Bu haberi işitip,
    TÜN YEME, ; tün iken, yine de,
    UDUSIQIM KELMEZ ERTİ, ; uyuyacağım gelmemiş bulunuyor,
    OLURSIQIM KELMEZ ERTİ ; oturacağım da gelmemiş bulunuyor,
    -ANTA SAQINTIMA,...,SÜ ...TİDİM. ; -bu sakıncadan ötürü, ordu ile değdim.

    § 7. ÖKÜGİMİN YOLI BİR ERMİS. ; Ökügimin yolu bir tek imiş,
    TOMIS TİYİN İSİDİP, ; -"donmuş" diyerek işitip,
    'BU YOLIN YORISAR, ; "bu yoldan yürür isek,
    YARAMAÇI!' TİDİM. ; yaramıyacaktır", dedim.
    [US] YİRÇİ TİLEDİM, ; Usta rehber diledim,
    [ÜÇÜL ÖGİZ İRİ BOLTIM. ; Üçül Ögüz kişisi buldum.
    ÖZİM-OZ YİRİM ; Kendi kolonistlerimizin bulunduğu yerdeki
    ONI BİLTİRİNDE ; ON'lar biltirinde,
    İT-ÖG] İRİM US ; İT-ÖG kişileri grubundan,
    BİR-AT URUQI ERMİS, ; BİR-Namlılar hakimiyetindeki
    ONIN BARMIS. ; ON'lar imiş, meğer bunlar.
    ANAR YATUP, ; Onlarda yatarak,
    BİR-ATLUĞ BARMIS TİYİN, ; BİR-Namlıların bulunduğu yoldan
    OL YOLIN [İT-İL] YORISAR, ; At-İle gidilir ise,
    "ONÇ", TİDİM, SAQINDIM. ; "dur bakalım", diyerek, tedbirli oldum.
    QAĞANIMA ; Hakanıma





    İ ç t e n l i k l e...

    Sevgiyle...

  10. #40
    Ç. R. Düzenleme
    Üyelik Tarihi
    Nov 2015
    Mesajlar
    503

    Seviye: 40 
    Tecrübe: 1,794,875
    Sonraki Seviye: 2,111,327

    Beğenmiş
    2,397
    Beğenilmiş
    2,050
    Adı Geçen
    0 Konu
    Etiketlendiği
    0 Konu
    II:

    H.N. Orkun, Eski Türk Yazıtları:

    _ Tonyukuk Yazıtı ' Taş I, Batı Tarafı '


    1 Bilge Tonyukuk ben kendim Çin ülkesinde vücut buldum. [O zamanları] Türk milleti Çine tâbi idi.

    2 Türk milleti hansız olmasın (diye) (1) Çinden ayrıldı. Han sahibi oldu. [Fakat sonra] hanını koyup tekrar Çine teslim oldu. (2) [O zaman] Tanrı böyle demiş: (sana) han verdim.

    3 Hanını koyup hüküm altına girdin. Hüküm altına girdiği için Tanrı ölüm vermiş. Türk milleti öldü, mahvoldu (3), yokoldu. Müttehit (?) Türk milletinin yerinde

    4 Boy kalmadı. Ağaçta taşta kalmış olanları toplanıp yedi yüz (kişi) oldu. (Bunların üçte) iki kısmı atlı, (üçte) bir kısmı yaya idi. Yedi yüz kişiye

    5 Kumanda edenlerin büyüğü şad idi. İltihak et dedi. İltihak edenlerin (birisi de) ben idim: Bilge Tonyukuk. Hakanımı ilerleteyim (= hakanı ilerleteyim mi? İteyim mi) dedim. Düşündüm: (İnsan) zaif buğalarla, semiz buğaları uzaktan

    6 Bilmek istese semiz buğa, zaif buğa diye bilemez imiş diyerek böylece düşündüm. Ondan sonra Tanrı bilgi verdiği için bizzat o hakanı ilerlettim. Bilge Tonyukuk, Bov'a Bağa Tarkan.

    7 İle birlikte Elteriş hakan olayım. Cenupta Çinlileri, doğuda Kıtayları, şimalde Oğuzları pek çok öldürdü. Bilgide eşi, şöhrette eşi ben idim. [O zamanlar] Çugay-kuz da [ve] Kara-kum da oturur idik.


    (1) [2] Kanın bulmayın ibaresine bu şeklinde bir mana vermek imkânsızdır. Herhalde kanın sözü aslında başka bir tarzda olmak gerektir. Elimde maatteessüf yazının fotoğrafisi olmadığından bunu yazıt üzerinde araştırmak imkânını bulamadım. Maamafih cümlenin gelişinden bu sözün kanın değil kansız olması icap ettiği anlaşılmaktadır. Böyle olursa mana anlaşıldığı gibi diğer yazıtlardaki bu tarzda ibarelerle ayniyet hâsıl olmaktadır.

    (2) [2] İçik- sözü için Kâşgarî'de şu izahat vardır: [I, 167]

    (3) [3] Alkın- için Kâşgarî'ye de bakınız: I, 214.





    _ Tonyukuk Yazıtı ' Taş I, Doğu Tarafı '

    18 İki bin idik... oldu. Türk milleti oldu olalı, Türk hakanı oldu olalı Şantung şehirlerine, denize (kadar) değdiği yok imiş. (6) Hakanıma arzedip asker sevk ettirdim.

    19 Şantung şehrine, denize kadar (orduyu) eriştirdim. Yirmi üç şehir harap edildi (7). Usın Bundatu (?) yurtta yata kalır idi. Çin hakanı düşmanımız idi. On ok hakanı düşmanımız idi.

    20 [Bundan maada kuvvetli Kırgız hakanı düşmanımız] oldu. Bu üç hakan birlikte meşveret edip Altın ormanında toplaşalım demişler. Böylece meşveret etmişler. Doğudaki Türk hakanına karşı asker sevk edelim demişler. Ona karşı asker sevk etmez isek kaçınır isek o bizi (8)

    21 [Hakanı cesur imiş, müşaviri] bilge imiş. Kaçınır isek (bizi) öldürecektir. (Onun için) üçümüz birleşip asker sevk edelim; onu yok eyliyelim demiş. Türgiş hakan(ı da) şöyle demiş: Benim milletim de orada bulunacaktır demiş.

    22 Türk milleti gene kargaşalıktadır demiş. Oğuzlara da isyan edin demiş. Bu sözü işitip hemen gece uyuyasım gelmez idi. (Gündüz) oturasım gelmez idi. O vakit düşündüm.

    23 . . . . . . . dedim. Kögmen yolu bir imiş; (kardan) kapanmış (9) diye işitip bu yoldan gidilir ise yaramıyacak dedim. Kılavuz diledim. Az çölünden [bir] adam buldum.

    24 Kendim Az yer . . . . . imiş. Bir durak yeri imiş. Anıya varmış (?), orada yatıp bi atlı (ile) varılır diye o yolu yürür isek emindir dedim (10). Düşündüm; hakanıma.


    (6) [18] Türk budun olurgalı, türk kağan olurgalı Şandung balıka, taluy üğüzke teğmiş yok ermiş ibaresini Thomsen Türk milleti fütuhat için, Türk hükümdarı hükümdarlığı için Şantung şehirlerine, denize kadar ilerlemiş, yok olmuş diye tercüme etmektedir. Ben ise Türk milleti oldu olalı, Türk hakanı oldu olalı Şantung şehirlerine, denize (kadar) değdiği yok imiş diye tercüme ettim. Burada teğmiş yok ermiş değdiği yok imiş demektir. Eğer yok olmuş manası kastedilmiş olsa idi yok ermiş değil yok bolmış denirdi.

    (7) [19] Sı- için Kâşgarî'ye de bakınız: III, 188.

    (8) [20, 21, 29] Kaçnan erser ölürteçi - kök ibaresindeki kaçnan sözü yine ayni tarzda 29 uncu satırda da geçmektedir. Ben bu kökü kaçın- fiili ile alâkadar bularak tercüme etmekteyim.

    (9) [23] Tu- için Kâşgarî'ye de bakınız: III, 187

    (10) [24] Unç için bakınız: Turcica, 88 not. Aynı söz [için] Kâşgarî, III, 323.





    Aşikârdır ki, ne translitteratio ne de translatio ' özde ' farklıdır.


    ;................................................. .................................................. ..........................................

    Peki Ramath ne diyordu_?

    Efsane der ki "Yedi Gücün Tabletlerini okuyabilen bütün dünyaya hükmedecek!!."

    " ... Ve onun karşısında Gog ile Magog dize gelecek, İmparatorluklar dağılacak, krallar önünde eğilecek... "


    Yüksek Mühendis, Isub-Ura Bilge Öküli Çur:

    Bu yorum, Sümer, Asur ve Bizans gibi güçlü devletler arasında, nasıl olup da Urartu gibi küçücük krallıkların baki kalabilmiş olduğu gözönünde bulundurulur ise, elbette, önem kazanacaktır. Nitekim, ALTI YARIQ TİGİN'in eşetolojik tahakkuk metni -BİR ÖGE, IQI-YAĞUN ve OQUN-UÇI İL-İR hükümdarı AT-OY ÖGE için şöyle diyor (ALTI YARIQ TİGİN, 1978, s.113-114): "AT-OY ÖGE'ye, BİR KÖK'ünü temsil edebilmesi için, nur vahiy oldu". BİR yerine "Rab" diyen Tevrat ise, Hezekiel, Bap 38'de, aynı konuyu şu şekilde açıklıyor:

    "Ve bana Rabbin şu sözü geldi: Adem oğlu, Ma-Gog** (yani BİR KÖK) diyarından olan Roşun (yani, BİR ÖGE'nin), Meşekin (yani, IQI-YAGUN'un) ve Tubalın (yani, OQUN-UÇI İL-İR'in) beyi (yani, Sultanı) Gog'a (yani, KÖK'e) yönel (yani, Tanrıya yönel!) ve ona karşı peygamberlik et, ve de : Rab YHWH şöyle diyor: Roşun, Meşekin, ve Tubalın beyi Gog (KÖK), işte, ben sana karşıyım; ve seni geri çevireceğim, ve çenelerine çengeller takacağım (yani, Gog TÜRÜK BİL'e tabi olacak), seni ve bütün ordunu, atları ve atlıları, hepsi ağır esvap giyinmiş, büyük kalkanlı, ve küçük kalkanlı, hepsi kılıç kullanan büyük bir cumhuru, onlar ile beraber, hepsi kalkanlı ve miğferli Farsı, Kuşu, ve Putu; Gomeri (herhalde OĞIŞIM ER'i, yani Türkleri), ve bütün ordularını, kuzeyin sonlarından Toğarma evini (herhalde AT-OĞUR'ları), ve bütün ordularını, senin ile beraber çok kavimleri çıkaracağım".

    **Prototürkçede, Türkçenin sözsonu eklerinin sözbaşına da gelebildiği görülmektedir. Meselâ, LIN-XUA ("XUA'lanma" yerine), Dl-YAN ("YAN-DI" yerine), ma-qal (Arapçada da "maqal", "qal-ma" yerine) sözlerinde olduğu gibi. Buna göre, Ma-Gog de bir Prototürkçe terkiptir, Maqal sözünü "kalıcı ifade" şeklinde değerlendirebileceğimize göre, ma-gog "Bakî Gök" manasını verecektir.

    Tevrat devam ederek şöyle diyor: "Roşun, Meşekin, ve Tubalın beyi Gog, seni İsrail dağları üzerine getireceğim, ve sol elinden yayını ve sağ elinden oklarını vurup düşüreceğim. Sen, bütün orduların ile ve yanında olan kavimler ile, İsrail Dağları üzerinde düşeceksin (yani, öldürüleceksin); Geçitler Deresinde (veya Abarim Deresinde) ...Gogu ve bütün cumhurunu gömecekler; ve oraya Hamon-gog [Gog Cümhuru] Deresi denilecek". Ancak ÖKÜLİ ÇUR bitiğine göre, bu hadise d.ö. 551 'den öncesine değil, d.ö. 531'den sonrasına aittir. Tevratın Gog dediği ISUB-URA BİLGE ÖKÜLİ ÇUR, OT-OĞIN UB-UR (Pra-Mısır Başkenti) için savaşır iken, d.ö. 522'de, düşmana yalnız başına saldırıya geçerek ölü düşer.

    TİGİN QAN'ın (Kyros'un) d.ö. 529 yılında QANIM KÜL BİLGE QAĞAN'a (Mirşan, 1983, s. 260) yenilmesinden sonra İran tahtına geçen Kyros oğlu Kambysos d.ö. 525'de Mısır üzerine yürür iken, Gog ordusu (İskitler!) de Mısır Kralı Amasis'in (d.ö. 565-525 yıllarında hüküm sürmüştür) yardımına koşuyordu. Çünkü Amasis çok önceleri kendi temsilcisini Gog'a (ÖKÜLİ ÇUR'a) göndererek yardım istemişti. Bu şekilde Kyros'un ölümünden, Mısırın d.ö. 525'de tekrar İran topraklarına katılmasına kadar geçen 7 yıllık dönemi Tevrat "7 yıl silahlar ile ateş yakacaklar ve kendilerini yağma etmiş olanları yağma edecekler" (bab 39) şeklinde belirtiyor ki, böyle bir deyim, her halde, OT-OZ kavramını açıklamak için söylenmiş olmalı.

    Prof. Dr. A. Zeki Velidi Toğan*, Asur kitabelerinde, hükümdarlarının ismi Gog şeklinde yazılan, Sakaların d.ö. 665'de Kuzey Azerbaycana girdiklerini söylemekte ve Asur kaynaklarının, Gog'un Sarati ve Parati isminde iki oğlunun d.ö. 662'de Asur ülkesine taarruzundan bahsettiğini bildirmektedir. Necdet Sevinç** ise, Gürcü vak'a nüvislerinin d.ö. 4'üncü yüzyılda Bunturki (yani, BUN-TÜRKİ) ve Qıpçak isimli iki Türk kavminden bahsettiklerini ve bu iki Türk kavminin bu tarihte Kür boyuna yerleşmeleri ile ilgili rivayetleri naklettiklerini bildirmektedir.

    *Prof. Dr. A. Zeki Velidi Toğan, 1970; Umumi Türk Tarihine Giriş, Cilt 1, İstanbul sahife 166.
    ** Sevinç, N. 1983, Gaziantep'de Yer Adları ve Türk Boylar, Türk Aşiretleri. Türk Oymakları. Türk Dünyası Araştırmaları Yayını 7, İstanbul, sahife 2.




    ;................................................. .................................................. ..........................................


    Böylece " Gobi'nin uzak bir köşesinde bulunan Taş Kitabedeki esrarengiz yazıları " çözmüş ve de " Yedi Gücün formülünü " elde etmiş bulunuyoruz, değil mi_? Her hâlde. : )

    Gobi Çölü, Yüksek Mühendis' in pek çok eserinde geçer, ee.g.

    _ Akınış Mekaniği Altı Yarıq Tigin:


    Pekin kalasına işaret eden BÜKLİ ÇÖL AŞA ("Gobi Çülünü geçince") sözündeki BÜKLİ kelimesini BÜ-ÖK ELİ ("Pekin kişisi halkı") şeklinde yorumlamamız mümkün olabilmektedir. BÜ-ÜRÜK ("muhteşem ahiret") sözünü de BÖRÜK ("muhteşem") ve, bundan türemiş olması muhtemel olan, BÖRÜ ("kurt") şekillerinde yorumluyabllmekteylz.

    BÜKLİ pt Her tarafı, tamamı. İLGERÜ, KÜN-TOĞSlQDA, BÜKLİ QAĞANQA TEGİ SÜLEYİ-BİRMİŞ pt (ileri yönde -gün-doğsukda!- bütün qağanlıklara kadar ordu sürüvermiş, YT).

    BÜKLİ ÇÖL pt Göbi Çölü.

    _ Bolbollar:

    Boreas' ın [Yunanca "küzey yeli"] Türkçedeki karşılığı bora ve boran'dır [şiddetli karlı yel]. Onun en etkili şekilde hissolunduğu yer ise, elbette, Gobi Çölüdür (BÜKLİ ÇÖL!).

    YUĞÇI-SIĞITÇI, ; Matemci-ağıtçı olarak
    ÖNRE,KÜN-TOĞSUQDA BÜKLİ ; önce gün-doğsukdaki Gobi
    ÇÖLÜG İL, [RUM,QIRQIZ ; Çölü halkı,
    TABIĞAÇ, TÖPÜT, APAR,PU- ; Çin, Tibet, Avar, Roma, Kırgız;
    ÜÇ-OÇ URIQIN ; Üç-Oq ırkından
    OT-OZ TATAR, QITAN, TATABI ; Ot-Oz Tatar, Kıtan, Tatabi;
    BUNÇA BUDUN KELİPEN ; bunca kavimler gelerek
    SIĞTAMIS (-Ş), YUĞLAMIS (-Ş), ; ağıt tutmuş, yas tutmuş;
    ANTAĞ KÜLİG QAĞAN ERMİŞ! ; bu derece mes'ut hakan imiş!

    Giovanni Scognamillo, Dünyamızın Gizli Sahipleri adlı eserinde ne diyordu_?

    Churchward'ın öne sürdüğü ilk ırk ve kayıp uygarlık görüşünün oldukça geniş bir kısmı, Mu'nun çocuklarından saydığı Uygurlarla ilgilidir. Albay'a göre Uygur imparatorluğu, Mu'dan sonra, dünyanın tanıdığı en yüce imparatorluk olmuştur:

    «Doğu'da Pasifik Okyanusuna, Batı'da bugün Moskova'nın bulunduğu yere kadar uzanırdı; bir ara Orta Avrupa ve Atlas Okyanusu kıyılarına kadar genişlemişti... Uygur İmparatorluğu'nun en parlak döneminde dağlar alçacık, Gobi çölü de bol suların aktığı büyük bir yaylaymış. Uygurlar burada, Baykal gölünün güneyinde, başkentlerini kurmuşlar... Çok eski kaynaklara göre daha birçok büyük şehirler kurmuşlardı. Bunlar ya bütünüyle yok edildi ya da bugün Gobi çölünün kumları altında yatıyor. M.Ö. 500 tarihini taşıyan bazı Çin kaynakları Uygurları bize şöyle anlatırlar: Saçları sarı, gözleri maviydi, tenleri açık ve beyazdı; güney bölgelerinde yaşıyanların saçları ve gözleri ise koyuydu... Bir manastırda bulunan eski bir yazıta göre, Uygurların başkenti ve halkı İmparatorluğun bütün doğu bölgelerini kaplayan bir tayfun tarafından yok edilmişti.»

    Churchward'ın sözünü ettiği kaynaklar hiç bilinmiyorsa da Gobi çölünde, Kara Kota kalıntılarında bulunan 18.000 yıllık bir mezarla, Fransa'da Glozel'de 1925'te keşfedilen ve Uygur yazısıyle benzerlikler taşıyan tarih öncesi toprak çanaklar, Albay'ın birtakım gerçeklere de değinmiş olabileceği görüşünü desteklemektedir.





    ;................................................. .................................................. ..........................................

    N.B.:

    BÜKLİ [ÇÖLÜG İL, QAĞAN,...] ve benzeri kelimelerin, Orman[lı], Bozkır[lı], Dağ[lı], Kore, Mançurya, Tunguz, [Çöl Halkı, Kağanı] şeklinde yorumlanmaları [bize göre] şüphelidir, şöyle ki:

    BÜKLİ ÇÖLÜG İL' deki BÜKLİ, BÜK [E, İ]Lİ " Bük Ülkesi, Halkı,... " şeklinde ayrılamaz, zira aksi hâlde, [E, İ]L iki defa kullanılmış demektir, ki mantıksızdır.

    Ayrılabilirse de, bu defa BÜK [E, İ]Lİ QAĞAN " Bük Ülkesi, Halkı,... Kağanı " olur ki manasızdır.

    Orman, bozkır, dağ ve çöl, özde, ya karşıt ya da çelişik kelimelerdir, meselâ, orman ağaçlı bölge, bozkır ağaçsız bölgedir, dağ sulak ve soğuk, [kutup hariç] çöl, kurak ve sıcaktır, &c.

    Kısacası BÜKLİ ile kastedilen, yazıtlardan anlaşıldığı kadarıyla, [menşei bilinmeyen] doğulu bir kavimdir.

    Açıkçası, BÜKLİ kelimesinin ne olduğu bilinmemektedir.


    ;................................................. .................................................. ..........................................

    H.N. Orkun' un Eski Türk Yazıları' ndaki " Runik Türk Alfabesi " ve Yüksek Mühendis' in Alfabetik Yazı Başlangıcı ve Glozel Yazıtları' ndaki " Glozel alfabesinin ProtoTürk ve Kärnten harfleri ile mukayesesi " tablolarından, ProtoTürkçe & Glozel Yazıtlarının benzer oldukları aşikârdır.

    Özelde, Dr. Ergin Korur' un, Yazıtların Esrarı makalesinin & Giovanni Scognamillo'nun, Dünyamızın Gizli Sahipleri' ndeki bu pasajının, genelde de Filolojinin özü nedir_?

    Türkiye' de klasik mantığın duayenlerinden Prof. Dr. Necati Öner, Klasik Mantık adlı eserinde ne diyordu_?


    Analoji:

    Analoji (temsil) bir akıl yürütme yolu olarak, iki şey arasındaki benzerliğe dayanıp, birisi hakkında verilen bir hükmü diğeri hakkında da vermektir. Zihnin özelden özele yürüyüşüdür.

    Demek ki, Analoji, tümevarıma dayanan bir dedüksiyondur. Fakat varsayımsal (hypothétique) bir dedüksiyondur. Çünkü dayandığı genel fikir varsayılmış, fakat ispat edilmiş değildir. Bu sebeple analoji ile verilen hüküm, daima olumsal (probable) olarak kalır, zorunluluğu gerektirmez.

    Türkiye' de klasik mantığın duayenlerinden Prof. Dr. Necati Öner, Klasik Mantık adlı eserinde şu misali sunar: ' Klasik Mantık, karmaşık bir mevzudur, ki başlıbaşına ele alınması gerekir, bu yüzden de detaylarına girmiyoruz. Özetle ehemmiyet-i hâiz bir noktaya değinip geçeceğiz, zira anlaşılamazsa, analoji de anlaşılamaz. '

    Yer gezegeninin armosferi vardır ve üzerinde canlılar yaşar,
    Merihte de atmosfer vardır.
    _________________________________________________
    O halde Merihte de canlıların bulunması gerekir.

    Kendisine benzetilen ' müşebbeh-ün bih ' Yer, benzetilen ' müşebbeh ' Merih, ikisi arasındaki ortak anlam ' illet ' atmosfer, benzetme ' teşbih ' canlıların yaşaması, ki bu da hükümdür.

    Ne var ki öncüller özeldir ' i.e., tikeldir ', ki hüküm çıkmaz. Demek oluyor ki, zihindeki [hakiki] kıyas şudur:

    I. Şekil Kıyas:


    Atmosferi olan gezegende hayat vardır.
    Merih atmosferi olan bir gezegendir.
    _________________________________________________
    O halde Merihte hayat vardır.

    Tamam da ehemmiyet-i hâiz olan ne_? Şu:

    " Fakat varsayımsal (hypothétique) bir dedüksiyondur. " Neden_? Çünkü dayandığı genel fikir, i.e. -Atmosferi olan gezegende hayat vardır- varsayılmış, fakat ispat edilmiş değildir de ondan.

    Misal:

    Dr. Ergin Korur, Yazıtların Esrarı' nda ne diyordu_?


    Napoléon'un 1799'daki Mısır seferine katılan bir Fransız askeri Rosetta'da bir kalenin yıkıntıları arasında meşhur "Rosetta taşı"nı buldu. Bu taş, üzerinde Mısır hiyeroglif ve basitleştirilmiş demotik yazısı ile Yunanca olmak üzere, üç ayrı yazı bulunan yassı bir bazalt levha idi. Yunanca metinden yararlanarak bunun Mısır firavunu beşinci Ptoleme devrine ait, M.Ö. 196 yılında yayınlanmış bir emirname olduğu anlaşıldı.

    Peki buradaki " genel fikir " ne_? Rosetta taşı, üç ayrı dilde yazılmış, tek bir metindir, ' ki olumsal doğrudur. '

    Elhasıl bu " genel fikir " z o r u n l u doğru değilse, Rosetta taşı çözümlenememiş de olabilir, çözümlenebilmiş de.

    Yüksek Mühendis, Pra-Mısır Hieroglifleri adlı eserinde, her ne kadar demotik yazı için öyle olmasa da, Mısır hiyeroglifleri için öyle ' olumsal doğru ' olduğu kanaatindedir. : )






    İ ç t e n l i k l e...

    Sevgiyle...

FACEBOOK'TA PAYLAŞ

Konuya Mesaj Yazanlar: 1

profesyonel web tasarım
© Copyright 2021. Tüm Hakları Saklıdır. Çizgili Kitap | Çizgili Kitap Forum Kuralları