WItam. Mam pewien problem. Musze na zaliczenie napisac program, który wyświetla date, godzine, info o pojemności Hdd, info o myszcze, info o grafice (jaki typ, vga czy inny) oraz info o procesorze. Mam napisany program, ale nie wiem jak zrobić 2 ostatnie rzeczy(grafa i proc). Czy byłby w stanie ktoś mi pomóc?? Tylko proszę o nie odsyłanie do google, szukajki czy kursów online, bo szukałem, ale nic pomocnego nie znalazłem.
To jest kod:
.model tiny
.stack 512
.data
data db "data: $"
czas db 10,13,"godzina: $"
infoa db 10,13, 'Naped A $'
infob db 'Naped B $'
zainst db 'wykryty',10,13, '$'
niezainst db 'niewykryty',10,13, '$'
jedna db "Jest podlaczona jedna stacja dyskow o pojemnosci $"
dwie db "Sa podlaczone dwie stacje dyskow$"
trzy db "Sa podlaczone trzy stacje dyskow$"
cztery db "Sa podlaczone cztery stacje dyskow$"
mb db " MB$"
PojemnoscDysku dw ?
dziesietnie db 10 dup ('0'), '$'
jest db 10,13, "Wykryto mysz, $"
niema db 10,13, "Nie wykryto myszy, $"
jed db "inne niz dwa$"
dwu db "dwa przyciski$"
trz db "trzy przyciski$"
.code
start:
mov ax, @data
mov ds, ax
mov dx, offset data
mov ah, 09h
int 21h
mov ah, 2Ah ;pobieranie daty, pojawia sie w rejestrze cx - rok, dh miesiac, dl dzien miesiaca
int 21h
xor ax, ax
mov al, dl
call liczba
mov al, '.'
call znak
xor ax, ax
mov al, dh
call liczba
mov al, '.'
call znak
mov ax, cx
call liczba
mov ax, @data
mov ds, ax
mov dx, offset czas
mov ah, 09h
int 21h
mov ah, 2ch ;pobieranie godziny, w rejestrze CH - bierzaca godzina, cl minuta, dh sekunda
int 21h
xor ax, ax
mov al, ch
call liczba
mov al, ':'
call znak
xor ax, ax
mov al, cl
call liczba
mov al, ':'
call znak
xor ax, ax
mov al, dh
call liczba
mov ax, @data
mov ds, ax
mov dx, offset infoa
mov ah, 09h
int 21h
mov al, 10h
out 70h, al
out 0edh, al
in al, 71h
or al, 11110000b
jnz azainst
mov ax, @data
mov ds, ax
mov dx, offset niezainst
mov ah, 09h
int 21h
dalej:
mov ax, @data
mov ds, ax
mov dx, offset infob
mov ah, 09h
int 21h
mov al, 10h
out 70h, al
out 0edh, al
in al, 71h
or al, 00001111b
jnz bzainst
mov ax, @data
mov ds, ax
mov dx, offset niezainst
mov ah, 09h
int 21h
azainst:
mov ax, @data
mov ds, ax
mov dx, offset zainst
mov ah, 09h
int 21h
jmp dalej
bzainst:
mov ax, @data
mov ds, ax
mov dx, offset niezainst
mov ah, 09h
int 21h
mov al, 14h
out 70h, al
out 0edh, al
in al, 71h
or al, 00000000b
jnz jeden
or al, 10000000b
jnz dwa
or al, 01000010b
jnz tr
or al, 11000011b
jnz czter
koniec:
mov ah,4ch
int 21h
jeden:
mov ax, @data
mov ds, ax
mov dx, offset jedna
mov ah, 09h
int 21h
jmp pojemnosc
dwa:
mov ax, @data
mov ds, ax
mov dx, offset dwie
mov ah, 09h
int 21h
jmp pojemnosc
tr:
mov ax, @data
mov ds, ax
mov dx, offset trzy
mov ah, 09h
int 21h
jmp pojemnosc
czter:
mov ax, @data
mov ds, ax
mov dx, offset cztery
mov ah, 09h
int 21h
jmp pojemnosc
dalej2:
xor ax, ax ; AX = 0
int 33h ; sprawdzamy, czy jest mysz
or ax, ax
jnz mysz_ok
mov ax, @data
mov ds, ax
mov dx,offset niema
mov ah, 09h
int 21h
dalej3:
xor ax, ax
int 33h
cmp bx, 0000h
je mniej
cmp bx, 0002h
je dwad
cmp bx, 0003h
je trzy2
mysz_ok:
mov ax, @data
mov ds, ax
mov dx,offset jest
mov ah, 09h
int 21h
jmp dalej3
mniej:
mov ax, @data
mov ds, ax
mov dx, offset jed
mov ah, 09h
int 21h
jmp dalej4
dwad:
mov ax, @data
mov ds, ax
mov dx, offset dwu
mov ah, 09h
int 21h
jmp dalej4
trzy2:
mov ax, @data
mov ds, ax
mov dx, offset trz
mov ah, 09h
int 21h
dalej4:
mov ah,4ch
int 21h
liczba:
push ax
push bx
push cx
push dx
mov bl, 10
div bl
mov cl, ah
xor ah, ah
div bl
mov dl, ah
call cyfra
mov dl, cl
call cyfra
pop dx
pop cx
pop bx
pop ax
ret
cyfra:
push ax
push dx
add dl, '0'
mov ah, 02h
int 21h
pop dx
pop ax
ret
znak:
push ax
push dx
mov dl, al
mov ah, 02h
int 21h
pop dx
pop ax
ret
jmp pojemnosc
pojemnosc:
mov ax,@data
mov ds,ax
mov ah,36h ; funkcja 36h przerwania 21h zwraca parametry
mov dl,0 ; niezbedne do obliczenia pojemnooci i ilooci
int 21h ; wolnego miejsca na dysku
cmp ax,0FFFFh ; czy parametry odczytane poprawnie?
jne ParametryDyskuPoprawne
ParametryDyskuPoprawne:
mov di,dx
mul cx ; ax (liczba sektorów) * cx (rozmiar sektora)
mov bx, 1024
div bx
push ax ; parametr ax (liczba sektorów * rozmiar sektora)
; bedzie jeszcze potrzebny przy wyliczaniu
; wolnego miejsca, dlatego odk3adamy go na stos
; Obiczanie pojemnooci dysku.
mul di ; pojemnooa = ax (obliczone wczeoniej) * dx
; gdzie dx - ca3kowita liczba bloków na dysku
; Zapisanie obliczonej pojemnooci dysku do zmiennej
mov si,offset PojemnoscDysku
mov ds:si,ax
inc si
inc si
mov ds:si,dx
pop ax ; podniesienie ze stosu od3o?onego wczeoniej
; parametru (liczba sektorów * rozmiar sektora)
mov ax,pojemnoscdysku
call wyp ;; wypisanie wyniku
pojkoniec:
mov ah,4ch
int 21h
wyp PROC ;; Procedura wypisywania na ekran liczby z AX
push ax
push bx
push cx
push dx
push di
mov cx, 10
mov di, 10
mov bx, 9
zamiana:
mov dx, 0
div di
add dl, '0'
mov dziesietnie[bx], dl
dec bx
loop zamiana
mov cx, 9
mov bx, 0
zera:
cmp dziesietnie[bx], '0'
jne wypisz
inc bx
loop zera
wypisz:
lea dx, dziesietnie
add dx, bx
mov ah, 09h
int 21h
mov ax, @data
mov ds, ax
mov dx, offset mb
mov ah, 09h
int 21h
pop di
pop dx
pop cx
pop bx
pop ax
jmp dalej2
wyp ENDP
dkoniec:
endp
end start
Będe wdzięczny za jakąkolwiek pomoc :)