coś takiego , jeszcze tylko BIN dopracowac... i chyba bedzie ok . Moze ktos na to zerknac i dać jakies swoje sugestie/uwagi ??
Kod: Zaznacz cały
BCD EQU 20H ; komórka zawierająca daną w kodzie BCD
BIN EQU 21H ; komórka zawierająca daną w kodzie NB (wynik wykonaniaprogramu)
LJMP START
ORG 100H
START:
POB_ARG_1: ; pobiera pierwsza cyfre z liczby dwucyfrowej
LCALL WAIT_KEY ; pobranie pierwszej czesci liczby dwucyfrowej z klawiatury
MOV R3, A ; zapamietaj w R1
SUBB A, #10 ; odejmij od pobranej liczby 10. Jesli liczba jest <=9 to C=1
JNC POB_ARG_1 ; jesli jednak C=0, znaczy liczba >9 to wracaj i pobieraj do skutku
POB_ARG_2: ; pobiera pierwsza cyfre z liczby dwucyfrowej
LCALL WAIT_KEY ; pobranie drugiej czesci liczby dwucyfrowej z klawiatury
MOV R4, A ;zapamietaj w R2
SUBB A, #10 ; odejmij od pobranej liczby 10. Jesli liczba jest <=9 to C=1
JNC POB_ARG_2 ; jesli jednak C=0, znaczy liczba >9 to wracaj i pobieraj do skutku
MOV A, R3 ; skopiuj zawartosc R1 do akumulatora
SWAP A ; zamiana połówek akumulatora
ADD A, R4 ; dodaj zawarosc R2 do akumulatora
MOV R6, A
LCALL WRITE_HEX ; wyswietl na LCD zawartosc akumulatora
MOV A, # 'D'
LCALL WRITE_DATA
MOV A, # '=' ; wpisanie znaku "=" do akumulatora
LCALL WRITE_DATA ; wyswietl znak "=" jako daną na LCD
MOV BCD, R6 ; przeniesienie zapamietanej liczby bcd do rejestru r6
MOV A,BCD
MOV R0,#BCD ; do R0 adres komórki z daną wejściową
MOV R1,#BIN ; do R1 adres komórki z daną wyjściową
ACALL BCD DO BIN ; zamień na postać binarną
MOV A,BIN
LCALL WRITE_HEX
MOV A, #'H'
LCALL WRITE_DATA
MOV A, #'E'
LCALL WRITE_DATA
MOV A, #'X'
LCALL WRITE_DATA
LJMP $
BCD DO BIN:
MOV @R1,#0 ; wyczyść komórkę BIN
MOV A,@R0 ; BCD do ACC
SWAP A ; zamień połówki
ANL A,#0FH ; wyzeruj mniej znaczącą cyfrę
JZ BCD DO BIN1 ; jeśli starsza cyfra jest zerem to skocz dalej
MOV R2,A ; w R2 ilość powtórzeń
CLR C
BCD DO BIN2:
MOV A,@R1 ; BIN do ACC
ADDC A,#10
MOV @R1,A ; wynik do BIN
DJNZ R2,BCD DO BIN2 ; dodawaj 10 tyle razy ,ile wynosi starsza cyfra
BCD DO BIN1:
MOV A,@R0 ;BCD do ACC
ANL A,#0FH ; wyzeruj starszą cyfrę
ADD A,@R1 ; dodaj do BIN
MOV @R1,A ; wynik do BIN
RET