Cześć.
Mam do zrobienia program wykonujący mnożenie na intelu 8080.
- użytkownik wprowadza z klawiatury liczbę w systemie dziesiętnym
- program sobie mnoży
- wynik ma być również wyświetlony w systemie dziesiętnym
Jak z pierwszymi dwoma punktami nie miałem problemów tak problem pojawia się przy trzecim. Kompletnie nie wiem jak się za to zabrać.
Intel 8080 ma 6 rejestrów 8 bitowych, które łącza się w pary 16bitowe: BC, DE, HL
Próbowałem liczbę hex np. ABCD showaną w jednym 16bit rejestrze rozbić na 4 rejestry i wtedy je konwertować dla 16^3 itp. ale nic mi z tego nie wyszło.
Tak szczerze to błądzę po omacku próbując różnych dziwnych rzeczy i nic mi z tego nie wychodzi.
Pozwolę sobie zawołać @Gynvael Coldwind, może on jest w stanie mi pomóc. :D
To jest kod który udało mi się wyprodukwoać do tej pory. (input od usera i mnożenie działa, program aktualnie wypisuje wynik w hex).
RST są z emulatora którego używamy na uczelni.
ORG 800H
LXI H,TXT_START
RST 3
LXI H,TXT_LICZBA1
RST 3
CALL WPISZ_LICZBE
LXI H,TXT_LICZBA2
RST 3
MOV L,A
CALL WPISZ_LICZBE
MOV H,A
LXI B,0
LXI D,0
MOV E,L
MOV C,H
lxi h,0
MNOZENIE
DAD D
DCX B
MOV A,B
CPI 0
JNZ MNOZENIE
MOV A,C
CPI 0
JNZ MNOZENIE
JMP WYPISZ
WPISZ_LICZBE
RST 2
SUI 48
MOV B,A
JM HALT
RST 2
SUI 48
JM JEDNOCYFROWA
MOV C,A
RST 2
SUI 48
JM DWUCYFROWA
MOV D,A
JP TRZYCYFROWA
JEDNOCYFROWA
MOV A,B
RET
DWUCYFROWA
MOV A,B
MVI E,9
PETLA_DZ
ADD B
DCR E
JNZ PETLA_DZ
ADD C
RET
TRZYCYFROWA
MOV A,B
MVI E,99
MVI H,9
PETLA_SETKI
ADD B
DCR E
JNZ PETLA_SETKI
MOV B,A
MOV A,C
PETLA_DZIESIETNE
ADD C
DCR H
JNZ PETLA_DZIESIETNE
ADD B
ADD D
RET
HALT
HLT
WYPISZ
XCHG
LXI H,ENTER
RST 3
LXI H,TXT_WYNIK
DAA
RST 3
MOV A,D
RST 4
MOV A,E
RST 4
HLT
ENTER DB 10,13,'@'
TXT_START DB 'MNOZENIE ASEMBLER',10,13,'@'
TXT_LICZBA1 DB 10,13,'PODAJ PIERWSZA LICZBE: @'
TXT_LICZBA2 DB 10,13,'PODAJ DRUGA LICZBE: @'
TXT_WYNIK DB 'WYNIK: @'
RST 0 - start systemu
RST 1 - wydruk znaku z akumulatora
RST 2 - wczytanie znaku z klaw do akumulatora
RST 3 - wydruk łancucha z HL do '@'
RST 4 - wydruk dwoch znakow hex z akumulatora