Cel programu: Odejmowanie dwóch liczb (1-10 cyfr) w systemie dziesiętnym lub binarnym z obsługą pożyczki i sygnalizacją błędów.
; Inicjalizacja systemu
CLO
IN 00
CMP AL, 31
JZ system_dziesietny
; Domyślnie system binarny
MOV AL, 2
SUB BL, AL).MOV CL, C1 – wskazuje na pierwszą cyfrę).PUSH/POP.JMP, JZ) modyfikują IP.PUSH BL i POP AL do tymczasowego zapisu wyniku odejmowania.CALL/RET) automatycznie korzystają ze stosu do przechowywania adresów powrotu, ale w tym kodzie nie ma procedur.IN 00 ; Pobierz wybór użytkownika
CMP AL, 31 ; Czy to '1' (ASCII 49)?
JZ system_dziesietny ; Skocz do systemu dziesiętnego
MOV AL, 2 ; Domyślnie system binarny
CMP, JZ – porównanie i skok warunkowy.'1' to wartość heksadecymalna 0x31.petla_wprowadzania:
IN 00 ; Pobierz cyfrę
CMP AL, 0D ; Czy to ENTER (ASCII 13)?
JZ krok ; Zakończ wprowadzanie
CMP CL, DL ; Czy przekroczono 10 cyfr?
JZ blad_przekroczenia
DL przechowuje adres końcowy (np. CB dla pierwszej liczby).MOV AL, 90; OUT 01).SUB BL, AL ; Odejmij cyfry
CMP AL, 0
JS pozyczka ; Jeśli wynik ujemny, obsłuż pożyczkę
Pożyczka: gdy wynik jest ujemny (np. 0-1), dodajemy wartość systemu (2 lub 10) i zmniejszamy poprzednią cyfrę:
pozyczka:
ADD AL, DL ; DL = 2 (binarny) lub 10 (dziesiętny)
DEC CL ; Cofnij się do poprzedniej cyfry
DEC BL ; Zmniejsz poprzednią cyfrę o 1
wypisz_wynik:
ADD AL, 30 ; Konwersja na ASCII (np. 5 → '5')
MOV [CL], AL ; Zapisz wynik w pamięci
5 + 0x30 = '5' (ASCII 53).0-1), dodajemy 2 (wartość systemu) do wyniku (otrzymujemy 1) i zmniejszamy poprzednią cyfrę o 1.
PUSH i POP w obliczeniach?PUSH BL zapisuje wynik odejmowania na stosie, aby zwolnić rejestr BL do innych operacji. POP AL odczytuje go później.
90 w rejestrze AL i wyświetla ją na porcie 01 (czerwona dioda).
JMP od przerwania INT?JMP zmienia tylko Instruction Pointer (IP), nie zapisuje stanu procesora. Przerwanie INT zapisuje stan (m.in. IP) na stosie i wykonuje procedurę obsługi przerwania.
C1-CB, D1-DB i E0-EF są poprawnie zdefiniowane? Należy upewnić się, że się nie nakładają.
3-5 w systemie dziesiętnym), ale nie wyświetla wartości ujemnej. Należy sprawdzić, czy tak ma być.
CMP, JZ, SUB itp.).15 - 7 w systemie binarnym → wynik 1000.Powodzenia na obronie! 🚀