Eliasz Giszter
PWSZ Gniezno
Elektronika i Telekomunikacja
Temat: PROSTE OPERACJE ARYTMETYCZNE
Napisz program, który będzie dodawał dwie liczby. Liczby mają być wczytywane z klawiatury (wykorzystaj podprogram WAIT_KEY) a wynik i znaki +, = powinny być wyświetlane na wyświetlaczu LCD.
LJMP START
ORG 100H
START:
MOV A,#0
MOV R3,#0
MOV R4,#0
LCALL LCD_CLR
LCALL WAIT_KEY
MOV R3,A
LCALL WRITE_HEX
MOV A,#'+'
LCALL WRITE_DATA
LCALL WAIT_KEY
MOV R4,A
LCALL WRITE_HEX
MOV A, R4
ADD A,R3
MOV R3,A
MOV A,#'='
LCALL WRITE_DATA
MOV A,R3
MOV B,#10
DIV AB
JZ 012EH ;JEZELI COS NIZEJ PISZEMY TO TRZEBA ZMIENIC TA WARTOSC
MOV A,R3
ADD A,#6
JNZ 0131H
MOV A,R3
LCALL WRITE_HEX
MOV A,#20
LCALL DELAY_100MS
LJMP START
Do naszego programu użyliśmy wbudowanych podprogramów zestawu DSM-81. Niestety programy te jak się później okazało są ułomne, mianowicie przed każdym uruchomieniem pod programu trzeba gdzieś przechowywać akumulator gdyż nawet LCD_CLR usuwa zawartość A.
Napisz program, który będzie realizował konwersję liczby binarnej mniejszej od 100 na liczbę w kodzie BCD. Liczba binarna ma być wpisana do akumulatora a wynik wyświetlony na wyświetlaczu LCD.
ORG 100H
START:
LCALL LCD_CLR
LCALL WAIT_KEY
MOV B,#10
MUL AB
MOV R7,A
LCALL WAIT_KEY
ADD A,R7
MOV B,#10
DIV AB
SWAP A
ADD A,B
LCALL WRITE_HEX
LJMP $
W tym programie trzeba było trochę pomyśleć i przeanalizować różnice między BCD a liczbami dziesiętnymi i binarnymi.
Napisz program realizujący odejmowanie dwóch liczb jednobajtowych. Wynik odejmowania ma być wyświetlany na wyświetlaczu.
LJMP START
ORG 100H
START:
LCALL LCD_CLR
MOV R2,#250
MOV A,#120
SUBB A,R2
LCALL WRITE_HEX
LJMP $
Napisz program realizujący mnożenie dwóch liczb binarnych jednobajtowych umieszczonych w rejestrach A i B. Wynik mnożenia wyświetl na wyświetlaczu LCD.
LJMP START
ORG 100H
START:
LCALL LCD_CLR
MOV B,#20
MOV A,#15
MUL AB
MOV R4,A
MOV A,B
LCALL WRITE_HEX
MOV A,R4
LCALL WRITE_HEX
LJMP $
Jak widać wynik naszego mnożenia jest większy od pojemności rejestru A więc część wyniku została wpisana do B.
Napisz program, który będzie dodawał numery kolejno wciskanych klawiszy i wynik wyświetlał na wyświetlaczu. Liczby powinny być przedstawione w kodzie BCD.
LJMP START
ORG 100H
START:
LCALL LCD_CLR
MOV R5,#0
LCALL WAIT_KEY
MOV R5,A
LCALL WRITE_HEX
LOOP:
LCALL WAIT_KEY
ADD A,R5
MOV R5,A
LCALL LCD_CLR
MOV A,R5
LCALL BIN_BCD
LCALL WYSW
LJMP LOOP
LJMP $
BIN_BCD:
;Procedura konwersji liczby 8-bitowej BIN na BCD (3-cyfrowa).
;WEJSCIE: ACC - liczba binarna do przekodowania.
;WYJSCIE: ACC - liczba w postaci BCD (cyfry dziesiatek i
;jednosci),
; B - cyfra setek
MOV B,#100 ;dzielenie przez 100 (cyfra setek)
DIV AB ;podziel
PUSH ACC ;przechowaj cyfre setek
MOV A,B ;wpisz reszte z dzielenia przez 100 do ACC
MOV B,#10 ;dzielenie przez 10 (cyfra dziesiatek)
DIV AB ;podziel
SWAP A ;przestaw cyfre dziesiatek na gorna tetrade
ORL A,B ;zloz cyfre dziesiatek i jednosci
POP B ;odtworz cyfre setek
RET
WYSW:
MOV R4,A
MOV A,B
LCALL WRITE_HEX
MOV A,R4
LCALL WRITE_HEX
RET
W tym programie napisałem dwa podprogramy w tym jeden używający stosu. Stosowanie podprogramów poprawia nam czytelność programu i umożliwia sprawne dokonanie zmian czy ulepszenie w przyszłości.
Napisz program mnożący liczby reprezentowane w kodzie BCD.
Tego nie zrobiłem bo nie bardzo rozumiem polecenie.
Napisz program, złożony z podprogramów, który będzie korzystał ze stosu. Niech wyświetla liczbę zawartą w akumulatorze najpierw w formacie dziesiętnym a następnie w postaci szesnastkowej wykorzystując do tego celu procedurę zamiany liczby binarnej większej od 100 na liczbę w kodzie BCD.
LJMP START
ORG 100H
START:
LCALL LCD_CLR
MOV A,#253
MOV R5,A
LCALL BIN_BCD
LCALL WYSW
MOV A,#'d'
LCALL WRITE_DATA
MOV R7,#4
PETLA:
MOV A,#' '
LCALL WRITE_DATA
DJNZ R7,PETLA
MOV A,R5
LCALL WRITE_HEX
MOV A,#'h'
LCALL WRITE_DATA
LJMP $
;PROCEDURYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
BIN_BCD:
;A - cyfry dziesiatek i jednosci),
; B - cyfra setek
MOV B,#100
DIV AB
PUSH ACC
MOV A,B
MOV B,#10
DIV AB
SWAP A
ORL A,B
POP B
RET
WYSW:
MOV R4,A
MOV A,B
LCALL WRITE_HEX
MOV A,R4
LCALL WRITE_HEX
RET
Program napisany na podobnych procedurach co zad 5.