; Program wypisuje wartosci 32-bitowych rejestrow procesora jakie sa tuz po ; uruchomieniu programu typu .exe ; ; autor: Bogdan D. ; kontakt: bogdandr (at) op (dot) pl ; ; nasm -o999 -o rej32e.obj -f obj rej32e.asm ; alink rej32e.obj -c- -oEXE -m- ; ; 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 section stack stack ; program typu .exe powinien miec stos resb 200h section '.text' ; poczatek sekcji kodu programu ..start: jmp short kod adres dd $-2 kod: push eax mov eax, [cs:adres] mov [cs:t_rej+60], eax ; zapisujemy EIP pop eax mov [cs:t_rej+52], esp mov [cs:t_rej+0], eax ; prawdziwy eax pushfd pop eax mov [cs:t_rej+56], eax ; flagi mov [cs:t_rej+4], ebx mov [cs:t_rej+8], ecx mov [cs:t_rej+12], edx mov [cs:t_rej+16], cs mov [cs:t_rej+20], ds mov [cs:t_rej+24], es mov [cs:t_rej+28], ss mov [cs:t_rej+32], fs mov [cs:t_rej+36], gs mov [cs:t_rej+40], esi mov [cs:t_rej+44], edi mov [cs: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=$"