Здравствуйте!! У меня вопрос. Как можно отобразить hex значение регистров в загрузчике? (Для вывода отладочной инфы во время загрузки..) Желательно без размещения таблицы символов т.к мне надо чтоб загрузчик был не слишком большой....
G_A_R_M_R, А на кой там таблица символов сдалась? Вот годовалый код дампа: Код (Text): Format equ "boot" use16 format binary as Format ; fill with 'filler' until $ mod 'modulo' == 'remainder' macro align modulo, filler, remainder { times modulo-1-($-(remainder+0)+modulo-1) mod modulo db filler+0 } start: match "boot",Format { jmp load_base align 512, 0x90, 3 OEM db "DUMPREGS" ;;; BIOS parameter block nBytesPerSec dw 512 ; +00/0b bytes per sector nSecPerClu db 1 ; +02/0d sectors per cluster nSecReserved dw 1 ; +03/0e sectors reserved nFAT db 2 ; +05/10 number of FATs nRootEntries dw 224 ; +06/11 number of root directory entries nSecTotal dw 2880 ; +08/13 total number of sectors MediaDesc db 0xf0 ; +0a/15 media descriptor nSecPerFAT dw 9 ; +0b/16 sectors per FAT ;;; valid when MediaDesc==0xf0|0xf8 (not a predefined disk format) nSecPerTrack dw 18 ; +0d/18 sectors per track nHeads dw 2 ; +0f/1a number of heads nSecHidden dd 0 ; +11/1c number of hidden sectors ;;; valid when nSecTotal==0 nSecTotal32 dd 0 ; +15/20 big total number of sectors Int13DriveNo db 0 ; +19/24 int 13 drive number Int13HeadNo db 0 ; +1a/25 int 13 head number EBPB_Sig db 0x29 ; +1b/26 extended BPB signature ;;; valid when EBPB_Sig==0x29 VolumeSerial dd 0 ; +1c/27 volume serial number VolumeLabel db "DUMPREGS " ; +20/2b volume label VolumeFS db "FAT12 " ; volume file system } load_base: push bx call @f @@: pop bx lea bx,[bx-(@b-start)] virtual at bx r: .ip rw 1 .es rw 1 .cs rw 1 .ss rw 1 .ds rw 1 .ax rw 1 .cx rw 1 .dx rw 1 .bx rw 1 .bp rw 1 .sp rw 1 .si rw 1 .di rw 1 .result rb 1 end virtual mov [cs:r.ip],bx mov [cs:r.es],es mov [cs:r.cs],cs mov [cs:r.ss],ss mov [cs:r.ds],ds mov ds,[cs:r.cs] mov [r.ax],ax mov [r.cx],cx mov [r.dx],dx pop [r.bx] mov [r.bp],bp mov [r.sp],sp mov [r.si],si mov [r.di],di lea di,[r.result] mov es,[r.cs] macro dumpval x { mov dx,x call convert } macro dumpreg [x] { mov word[di],`x mov byte[di+2],'=' add di,3 dumpval [r.#x] mov byte[di],' ' inc di } macro dumppair [s,o] { mov word[di],`s mov byte[di+2],':' mov word[di+3],`o mov byte[di+5],'=' add di,6 dumpval [r.#s] mov byte[di],':' inc di dumpval [r.#o] mov byte[di],' ' inc di } dumpreg ax,bx,cx,dx,bp mov word[di-1],0x0a0d inc di dumppair cs,ip,ss,sp,ds,si,es,di mov word[di-1],0x0a0d inc di mov bp,sp mov cx,0x10 @@: dumpval [bp] mov word[di],0x0a0d add di,2 add bp,2 test bp,0xff jz @f dec cx jnz @b @@: lea si,[r.result] sub di,si mov ah,0x0e mov bx,0x0007 @@: lodsb int 0x10 dec di jnz @b xor ah,ah int 0x16 cmp ax,0x0938 je int18 cmp ax,0x0a39 je int19 retf int18: int 0x18 int19: int 0x19 convert: mov cl,4 call @f @@: call @f @@: rol dx,cl mov al,0x0f and al,dl add al,'0' cmp al,'9' jna @f add al,'a'-'9'-1 @@: stosb ret match "boot",Format { align 512,, -2 db 0x55,0xaa }