Small operating system made in assembly language
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
.model tiny |
|
|
.486 |
|
|
smart |
|
|
.code |
|
|
|
|
|
org 0h |
|
|
|
|
|
include ..\include\mem.h |
|
|
|
|
|
start: |
|
|
|
|
|
jmp tsr |
|
|
offsets dd 0 |
|
|
db 'KEYBOARD' |
|
|
tsr: |
|
|
pushf |
|
|
db 2eh,0ffh,1eh |
|
|
dw offsets |
|
|
cli |
|
|
cmp cs:isstate,1 |
|
|
je endofforce |
|
|
mov cs:isstate,1 |
|
|
mov cs:eaxr,eax |
|
|
in al,60h |
|
|
cmp al,68 |
|
|
je F10 |
|
|
cmp al,87 |
|
|
je F11 |
|
|
cmp al,88 |
|
|
je F12 |
|
|
endof: |
|
|
mov cs:isstate,0 |
|
|
mov eax,cs:eaxr |
|
|
endofforce: |
|
|
sti |
|
|
iret |
|
|
isstate db 0 |
|
|
infos db 40 dup (0) |
|
|
feax dd 0 |
|
|
|
|
|
F10: |
|
|
push cs |
|
|
pop ds |
|
|
mov si,offset com |
|
|
mov ah,5 |
|
|
int 49h |
|
|
pop ax |
|
|
pop ax |
|
|
pop ax |
|
|
push gs |
|
|
push gs |
|
|
push gs |
|
|
pop ds |
|
|
pop es |
|
|
pop fs |
|
|
push gs |
|
|
push size exe |
|
|
sti |
|
|
mov cs:[isstate],0 |
|
|
retf |
|
|
|
|
|
com db 'COMMANDE.CE',0 |
|
|
|
|
|
F11: |
|
|
push ax di es |
|
|
push cs |
|
|
pop es |
|
|
mov di,offset infos |
|
|
mov ah,34 |
|
|
int 47h |
|
|
mov al,cs:[di+7] |
|
|
inc al |
|
|
cmp al,9 |
|
|
jbe notabove |
|
|
mov al,0 |
|
|
notabove: |
|
|
mov ah,0 |
|
|
int 47h |
|
|
pop es di ax |
|
|
jmp endof |
|
|
|
|
|
|
|
|
f12: |
|
|
pushad |
|
|
pushf |
|
|
push ds |
|
|
mov cs:[eaxr],eax |
|
|
mov cs:[ebxr],ebx |
|
|
mov cs:[ecxr],ecx |
|
|
mov cs:[edxr],edx |
|
|
mov cs:[esir],esi |
|
|
mov cs:[edir],edi |
|
|
mov cs:[espr],esp |
|
|
mov cs:[ebpr],ebp |
|
|
mov cs:[csr],cs |
|
|
mov cs:[dsr],ds |
|
|
mov cs:[esr],es |
|
|
mov cs:[fsr],fs |
|
|
mov cs:[gsr],gs |
|
|
mov cs:[ssr],ss |
|
|
push cs |
|
|
pop ds |
|
|
mov si,offset sep |
|
|
call Showstr |
|
|
mov si,offset reg |
|
|
mov di,offset regdata |
|
|
mov bx,7 |
|
|
showregs: |
|
|
cmp byte ptr cs:[si+6],":" |
|
|
jne endshowregs |
|
|
call Showstr |
|
|
cmp byte ptr cs:[si+4]," " |
|
|
je segsss |
|
|
mov edx,cs:[di] |
|
|
mov cx,32 |
|
|
call Showhex |
|
|
add di,4 |
|
|
jmp showmax |
|
|
segsss: |
|
|
mov dx,cs:[di] |
|
|
mov cx,16 |
|
|
call Showhex |
|
|
add di,2 |
|
|
showmax: |
|
|
add si,9 |
|
|
mov bp,dx |
|
|
push si |
|
|
mov si,offset beginds |
|
|
call showstr |
|
|
mov si,bp |
|
|
mov cx,8 |
|
|
mov al,0 |
|
|
letshow: |
|
|
mov dl,ds:[si] |
|
|
inc si |
|
|
call showhex |
|
|
inc al |
|
|
cmp al,10 |
|
|
jb letshow |
|
|
mov si,offset ende |
|
|
call showstr |
|
|
mov si,offset begines |
|
|
call showstr |
|
|
mov si,bp |
|
|
mov cx,8 |
|
|
mov al,0 |
|
|
letshow2: |
|
|
mov dl,es:[si] |
|
|
inc si |
|
|
call showhex |
|
|
inc al |
|
|
cmp al,10 |
|
|
jb letshow2 |
|
|
mov si,offset ende |
|
|
call showstr |
|
|
pop si |
|
|
jmp showregs |
|
|
endshowregs: |
|
|
mov si,offset sep |
|
|
call Showstr |
|
|
xor ax,ax |
|
|
int 16h |
|
|
pop ds |
|
|
popf |
|
|
popad |
|
|
jmp endof |
|
|
begines db ' es[',0 |
|
|
beginds db ' ds[',0 |
|
|
ende db '] ',0 |
|
|
|
|
|
|
|
|
;==============================Affiche le nombre nb hexa en EDX de taille CX et couleur BL============== |
|
|
ShowHex: |
|
|
push ax bx cx edx si di |
|
|
mov di,cx |
|
|
sub cx,32 |
|
|
neg cx |
|
|
shl edx,cl |
|
|
shr di,2 |
|
|
mov ah,09h |
|
|
and bx,1111b |
|
|
Hexaize: |
|
|
rol edx,4 |
|
|
mov si,dx |
|
|
and si,1111b |
|
|
mov al,[si+offset tab] |
|
|
push cx |
|
|
mov cx,1 |
|
|
cmp al,32 |
|
|
jb control2 |
|
|
mov ah,09h |
|
|
int 10h |
|
|
control2: |
|
|
mov ah,0Eh |
|
|
int 10h |
|
|
pop cx |
|
|
dec di |
|
|
jnz Hexaize |
|
|
pop di si edx cx bx ax |
|
|
ret |
|
|
Tab db '0123456789ABCDEF' |
|
|
|
|
|
;==============================Affiche une chaine DS:SI de couleur BL============== |
|
|
showstr: |
|
|
push ax bx cx si |
|
|
mov cx,1 |
|
|
again: |
|
|
lodsb |
|
|
or al,al |
|
|
jz fin |
|
|
and bx,0111b |
|
|
cmp al,32 |
|
|
jb control |
|
|
mov ah,09h |
|
|
int 10h |
|
|
control: |
|
|
mov ah,0Eh |
|
|
int 10h |
|
|
jmp again |
|
|
fin: |
|
|
pop si cx bx ax |
|
|
ret |
|
|
|
|
|
|
|
|
;================================================ |
|
|
;Routine de d<EFBFBD>bogage |
|
|
;================================================ |
|
|
regdata: |
|
|
eaxr dd 0 |
|
|
ebxr dd 0 |
|
|
ecxr dd 0 |
|
|
edxr dd 0 |
|
|
esir dd 0 |
|
|
edir dd 0 |
|
|
espr dd 0 |
|
|
ebpr dd 0 |
|
|
csr dw 0 |
|
|
dsr dw 0 |
|
|
esr dw 0 |
|
|
fsr dw 0 |
|
|
gsr dw 0 |
|
|
ssr dw 0 |
|
|
|
|
|
reg db 0Dh,0Ah,"eax : ",0 |
|
|
db 0Dh,0Ah,"ebx : ",0 |
|
|
db 0Dh,0Ah,"ecx : ",0 |
|
|
db 0Dh,0Ah,"edx : ",0 |
|
|
db 0Dh,0Ah,"esi : ",0 |
|
|
db 0Dh,0Ah,"edi : ",0 |
|
|
db 0Dh,0Ah,"esp : ",0 |
|
|
db 0Dh,0Ah,"ebp : ",0 |
|
|
db 0Dh,0Ah,"cs : ",0 |
|
|
db 0Dh,0Ah,"ds : ",0 |
|
|
db 0Dh,0Ah,"es : ",0 |
|
|
db 0Dh,0Ah,"fs : ",0 |
|
|
db 0Dh,0Ah,"gs : ",0 |
|
|
db 0Dh,0Ah,"ss : ",0 |
|
|
|
|
|
sep db 0Ah,0Dh,'********************',0Ah,0Dh,0 |
|
|
|
|
|
end start
|
|
|
|