; Program wypisuje wartosci 32-bitowych rejestrow procesora jakie sa tuz po ; uruchomieniu programu typu .com ; ; Autor: Bogdan D. ; kontakt: bogdandr (at) op (dot) pl ; ; nasm -o999 -o rej32.com -f bin rej32.asm ; ; Copyright (C) 2005-2007 Bogdan 'bogdro' Drozdowski, bogdandr @ op . pl ; ; Ten program jest wolnym oprogramowaniem; mozesz go rozpowszechniac ; i/lub modyfikowac zgodnie z licencja GNU Lesser General Public License ; (GNU LGPL) w wersji wydanej przez Fundacje Wolnego Oprogramowania; ; wedlug wersji 3 Licencji lub (jesli wolisz) jednej z pozniejszych wersji. ; ; Ten program jest udostepniany z nadzieja, ze bedzie uzyteczny, lecz ; BEZ JAKIEJKOLWIEK GWARANCJI; nawet domyslnej gwarancji PRZYDATNOSCI ; HANDLOWEJ albo PRZYDATNOSCI DO OKRESLONYCH ZASTOSOWAN. W celu uzyskania ; blizszych informacji - Licencja GNU Lesser General Public License. ; ; Z pewnoscia wraz z niniejszym programem otrzymales tez egzemplarz ; Licencji GNU Lesser General Public License; jesli nie - napisz do ; Fundacji Wolnego Oprogramowania: ; Free Software Foundation ; 51 Franklin Street, Fifth Floor ; Boston, MA 02110-1301 ; USA org 100h ; teoria: ; cs = ds = es = ss = paragraph address of psp ; ip = 100h (.com) ; sp = 0fffeh (a zero word has been pushed onto stack) start: jmp short kod adres dw $-2 kod: push eax mov ax, [adres] mov word [t_rej+60], ax ; zapisujemy EIP pop eax mov [t_rej+52], esp mov [t_rej+0], eax ; prawdziwy eax pushfd pop eax mov [t_rej+56], eax ; flagi ; zapisujemy reszte rejestrow ; do tablicy mov [t_rej+4], ebx mov [t_rej+8],ecx mov [t_rej+12],edx mov [t_rej+16],cs mov [t_rej+20],ds mov [t_rej+24],es mov [t_rej+28],ss mov [t_rej+32],fs mov [t_rej+36],gs mov [t_rej+40],esi mov [t_rej+44],edi mov [t_rej+48],ebp mov ax, cs mov ds, ax ; DS = CS, abysmy mogli ; wyswietlac napisy ; dla wszystkich wpisow w tablicy: ;wyswietlamy odpowiedni napis, po czym ; uruchamiamy procedure wyswietlajaca ; zawartosc komorki tablicy, na ktora ; wskazuje SI mov edx, piszeax mov ah, 9 int 21h ; wyswietlamy napis xor si, si ; SI = 0 call piszrej ; wyswietlamy rejestr mov edx, piszebx mov ah, 9 int 21h mov si, 4 ; SI = 4 call piszrej mov edx, piszecx mov ah, 9 int 21h mov si, 8 ; SI = 8 call piszrej mov edx, piszedx mov ah, 9 int 21h mov si, 12 call piszrej mov edx, piszcs mov ah, 9 int 21h mov si, 16 call piszrej mov edx, piszds mov ah, 9 int 21h mov si, 20 call piszrej mov edx, piszes mov ah, 9 int 21h mov si, 24 call piszrej mov edx, piszss mov ah, 9 int 21h mov si, 28 call piszrej mov edx, piszfs mov ah, 9 int 21h mov si, 32 call piszrej mov edx, piszgs mov ah, 9 int 21h mov si, 36 call piszrej mov edx, piszesi mov ah, 9 int 21h mov si, 40 call piszrej mov edx, piszedi mov ah, 9 int 21h mov si, 44 call piszrej mov edx, piszebp mov ah, 9 int 21h mov si, 48 call piszrej mov edx, piszesp mov ah, 9 int 21h mov si, 52 call piszrej mov edx, piszeip mov ah, 9 int 21h mov si, 60 call piszrej mov edx, piszfl mov ah, 9 int 21h mov si, 56 call piszrej mov ax, 4c00h int 21h ; =========================================== ; procedura wyswietlajaca odpowiednia wartosc ; z tablicy. SI pokazuje, ktora. piszrej: mov ebx, [t_rej+si] ; EBX = nasza wartosc mov eax, ebx shr eax, 28 call pc ; wyswietlamy bity 28-31 mov eax, ebx shr eax, 24 and al, 0fh call pc ; wyswietlamy bity 24-27 mov eax, ebx shr eax, 20 and al, 0fh call pc ; wyswietlamy bity 20-23 mov eax, ebx shr eax, 16 and al, 0fh call pc mov eax, ebx shr eax, 12 and al, 0fh call pc mov eax, ebx shr eax, 8 and al, 0fh call pc mov eax, ebx shr eax, 4 and al, 0fh call pc ; wyswietlamy bity 4-7 mov eax, ebx and al, 0fh call pc ; wyswietlamy bity 0-3 ret ; =============================================== ; procedura wyswieltajaca pojedyncza cyfre 0-9 lub A-F pc: cmp al, 9 ; sprawdz, czy cyfra > 9 ja hex or al, '0' ; z 0-9 mamy '0'-'9' jmp short pz hex: add al, 'A'-10 ; z 10-15 mamy 'A'-'F' pz: mov ah, 0eh int 10h ; wyswietl znak ret ; =============================================== ; nasze zmienne: tablica i napisy t_rej times 16 dd 0 piszeax db "EAX=$" piszebx db 10, 13, "EBX=$" piszecx db 10, 13, "ECX=$" piszedx db 10, 13, "EDX=$" piszcs db 10, 13, "CS=$" piszds db 10, 13, "DS=$" piszes db 10, 13, "ES=$" piszfs db 10, 13, "FS=$" piszgs db 10, 13, "GS=$" piszss db 10, 13, "SS=$" piszedi db 10, 13, "EDI=$" piszesi db 10, 13, "ESI=$" piszebp db 10, 13, "EBP=$" piszesp db 10, 13, "ESP=$" piszeip db 10, 13, "EIP=$" piszfl db 10, 13, "Flagi=$"