HEX -> display

Тема в разделе "WASM.OS.DEVEL", создана пользователем G_A_R_M_R, 23 дек 2010.

  1. G_A_R_M_R

    G_A_R_M_R New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2010
    Сообщения:
    6
    Здравствуйте!!
    У меня вопрос. Как можно отобразить hex значение регистров в загрузчике? (Для вывода отладочной инфы во время загрузки..)
    Желательно без размещения таблицы символов т.к мне надо чтоб загрузчик был не слишком большой....
     
  2. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    G_A_R_M_R,

    А на кой там таблица символов сдалась? Вот годовалый код дампа:
    Код (Text):
    1. Format equ "boot"
    2. use16 format binary as Format
    3.  
    4. ; fill with 'filler' until $ mod 'modulo' == 'remainder'
    5. macro align modulo, filler, remainder {
    6.         times modulo-1-($-(remainder+0)+modulo-1) mod modulo db filler+0
    7. }
    8.  
    9. start:
    10. match "boot",Format {
    11.                 jmp load_base
    12.  
    13.                 align   512, 0x90, 3
    14. OEM             db "DUMPREGS"
    15. ;;; BIOS parameter block
    16. nBytesPerSec    dw      512     ; +00/0b bytes per sector
    17. nSecPerClu      db      1       ; +02/0d sectors per cluster
    18. nSecReserved    dw      1       ; +03/0e sectors reserved
    19. nFAT            db      2       ; +05/10 number of FATs
    20. nRootEntries    dw      224     ; +06/11 number of root directory entries
    21. nSecTotal       dw      2880    ; +08/13 total number of sectors
    22. MediaDesc       db      0xf0    ; +0a/15 media descriptor
    23. nSecPerFAT      dw      9       ; +0b/16 sectors per FAT
    24. ;;; valid when MediaDesc==0xf0|0xf8 (not a predefined disk format)
    25. nSecPerTrack    dw      18      ; +0d/18 sectors per track
    26. nHeads          dw      2       ; +0f/1a number of heads
    27. nSecHidden      dd      0       ; +11/1c number of hidden sectors
    28. ;;; valid when nSecTotal==0
    29. nSecTotal32     dd      0       ; +15/20 big total number of sectors
    30. Int13DriveNo    db      0       ; +19/24 int 13 drive number
    31. Int13HeadNo     db      0       ; +1a/25 int 13 head number
    32. EBPB_Sig        db      0x29    ; +1b/26 extended BPB signature
    33. ;;; valid when EBPB_Sig==0x29
    34. VolumeSerial    dd      0       ; +1c/27 volume serial number
    35. VolumeLabel     db      "DUMPREGS   " ; +20/2b volume label
    36. VolumeFS        db      "FAT12   " ; volume file system
    37. }
    38. load_base:      push    bx
    39.                 call    @f
    40. @@:             pop     bx
    41.                 lea     bx,[bx-(@b-start)]
    42.  
    43. virtual at bx
    44. r:
    45.   .ip rw 1
    46.   .es rw 1
    47.   .cs rw 1
    48.   .ss rw 1
    49.   .ds rw 1
    50.   .ax rw 1
    51.   .cx rw 1
    52.   .dx rw 1
    53.   .bx rw 1
    54.   .bp rw 1
    55.   .sp rw 1
    56.   .si rw 1
    57.   .di rw 1
    58.   .result rb 1
    59. end virtual
    60.  
    61.         mov [cs:r.ip],bx
    62.         mov [cs:r.es],es
    63.         mov [cs:r.cs],cs
    64.         mov [cs:r.ss],ss
    65.         mov [cs:r.ds],ds
    66.         mov ds,[cs:r.cs]
    67.         mov [r.ax],ax
    68.         mov [r.cx],cx
    69.         mov [r.dx],dx
    70.         pop [r.bx]
    71.         mov [r.bp],bp
    72.         mov [r.sp],sp
    73.         mov [r.si],si
    74.         mov [r.di],di
    75.         lea di,[r.result]
    76.         mov es,[r.cs]
    77.  
    78. macro dumpval x
    79. {
    80.   mov dx,x
    81.   call convert
    82. }
    83.  
    84. macro dumpreg [x]
    85. {
    86.   mov word[di],`x
    87.   mov byte[di+2],'='
    88.   add di,3
    89.   dumpval [r.#x]
    90.   mov byte[di],' '
    91.   inc di
    92. }
    93.  
    94. macro dumppair [s,o]
    95. {
    96.   mov word[di],`s
    97.   mov byte[di+2],':'
    98.   mov word[di+3],`o
    99.   mov byte[di+5],'='
    100.   add di,6
    101.   dumpval [r.#s]
    102.   mov byte[di],':'
    103.   inc di
    104.   dumpval [r.#o]
    105.   mov byte[di],' '
    106.   inc di
    107. }
    108.         dumpreg ax,bx,cx,dx,bp
    109.         mov word[di-1],0x0a0d
    110.         inc di
    111.         dumppair cs,ip,ss,sp,ds,si,es,di
    112.         mov word[di-1],0x0a0d
    113.         inc di
    114.         mov bp,sp
    115.         mov cx,0x10
    116. @@:     dumpval [bp]
    117.         mov word[di],0x0a0d
    118.         add di,2
    119.         add bp,2
    120.         test bp,0xff
    121.         jz @f
    122.         dec cx
    123.         jnz @b
    124. @@:     lea si,[r.result]
    125.         sub di,si
    126.         mov ah,0x0e
    127.         mov bx,0x0007
    128. @@:     lodsb
    129.         int 0x10
    130.         dec di
    131.         jnz @b
    132.         xor ah,ah
    133.         int 0x16
    134.         cmp ax,0x0938
    135.         je  int18
    136.         cmp ax,0x0a39
    137.         je  int19
    138.         retf
    139. int18:  int 0x18
    140. int19:  int 0x19
    141.  
    142. convert:
    143.         mov cl,4
    144.         call @f
    145. @@:     call @f
    146. @@:     rol dx,cl
    147.         mov al,0x0f
    148.         and al,dl
    149.         add al,'0'
    150.         cmp al,'9'
    151.         jna @f
    152.         add al,'a'-'9'-1
    153. @@:     stosb
    154.         ret
    155.  
    156. match "boot",Format {
    157.         align 512,, -2
    158.         db 0x55,0xaa
    159. }
     
  3. G_A_R_M_R

    G_A_R_M_R New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2010
    Сообщения:
    6
    Спасибо.....Это довольно интересный код...