LABORATORIUM PODSTAW SYSTEMÓW MIKROPROCESOROWYCH
Imię i Nazwisko: Czopek Michał Gajdziński Radosław |
Grupa: ED 5.3 |
||||
Data wyk. ćwicz. |
Numer ćwiczenia 3B |
Temat ćwiczenia: Operacje arytmetyczne |
Ocena: |
ZADANIE NR.1
LJMP START
ORG 100H
START:
LCALL LCD_CLR
CLR A ;zeruj A
CLR C ;zeruj C
LCALL WAIT_KEY
MOV R0,A
LCALL WRITE_HEX
MOV A,#'-'
LCALL WRITE_DATA
MOV A,#10H
LCALL WRITE_HEX
MOV A,#'='
LCALL WRITE_DATA
MOV A,R0
ADD A,#0F6H ;A <- 0-1 = -1
LCALL WRITE_HEX
SJMP $
W zapisie uzupełnienia do 2 wszystkie ujemne liczby mają najstarszy bit ustawiony na 1, natomiast najstarszy bit liczb dodatnich ustawiony jest na 0. Liczby w kodzie uzupełnienia do 2 są z zakresu -128...127. Przy dodawaniu liczb z tego zakresu, których suma jest większa od 127 powstaje problem, gdyż suma tych liczb odczytywana jest jako liczba ujemna. Aby zasygnalizować to zdarzenie używa się specjalnej flagi OV, która sygnalizuje wystąpienie tego problemu
ZADANIE NR.2
Lp |
MNEM |
AC |
B |
wyświetlacz |
1 |
LJMP 0100H |
00 |
00 |
|
2 |
LCALL 810CH |
00 |
00 |
|
3 |
LCALL 811CH |
21 |
00 |
|
4 |
MOV B,#0AH |
09 |
00 |
|
5 |
DIVA B |
09 |
0A |
|
6 |
SWAP A |
00 |
09 |
|
7 |
ADD A,B |
00 |
09 |
|
8 |
MOV R0,A |
09 |
09 |
|
9 |
LCALL 8104H |
09 |
09 |
|
10 |
MOV A,#2BH |
09 |
09 |
09 |
11 |
LCALL 8102H |
09 |
09 |
09 |
12 |
LCALL 811CH |
09 |
09 |
09+ |
13 |
MOV B,#0AH |
07 |
09 |
09+ |
14 |
DIV AB |
07 |
0A |
09+ |
15 |
SWAP A |
00 |
07 |
09+ |
16 |
ADD A,B |
00 |
07 |
09+ |
17 |
MOV R1,A |
07 |
07 |
09+ |
18 |
LCALL 8104H |
07 |
07 |
09+ |
19 |
MOV A,#30H |
07 |
07 |
09+07 |
20 |
LCALL 8102H |
3D |
07 |
09+07 |
21 |
MOV A,R0 |
09 |
07 |
09+07= |
22 |
ADD a,R1 |
09 |
07 |
09+07= |
23 |
DA a |
10 |
07 |
09+07= |
24 |
LCALL 8104H |
16 |
07 |
09+07= |
25 |
SJMP 012FH |
09 |
07 |
09+07= |
PROGRAM DO MNOŻENIA DWÓCH LICZB BCD
LJMP START
ORG 100H
START:
LCALL LCD_CLR
LCALL WAIT_KEY ;pobierz pierwszy czynnik
PUSH ACC
LCALL NKB_BCD ;wypisz na LCD
MOV A,#'*' ;znak iloczynu
LCALL WRITE_DATA ;wyświetl jako znak
LCALL WAIT_KEY ;pobierz drugi czynnik
PUSH ACC
LCALL NKB_BCD ;wypisz na LCD
MOV A,#'=' ;znak równości
LCALL WRITE_DATA ;wyświetl jako znak
POP ACC
POP B
MUL AB ;pomnóż czynniki
LCALL BIN1_BCD1 ;wypisz wynik na LCD
SJMP $
;************************************************************************
;Podprogram zamiany NKB na BCD
NKB_BCD:
MOV B,#10 ;zamień liczby na BCD
DIV AB ;dzieląc przez 10
SWAP A
ADD A,B
LCALL WRITE_HEX ;wypisz na LCD
RET
ZADANIE NR.3;
;PROGRAM WYSWIETLA NAJPIERW LICZBE DZIESIETNA PODANA Z
;KLAWIATURY A NASTEPNIE ZMIENIA JE NA POSTAĆ NKB
MASKAA EQU 11110000B
MASKAB EQU 00001111B
LJMP START
ORG 100H
START:
LCALL LCD_CLR
LCALL WAIT_KEY ;pobierz pierwszy czynnik (cyfra dziesiątek)
MOV B,A
LCALL WAIT_KEY ;pobierz drugi czynnik (cyfra jednostek)
XCH A,B
SWAP A
ORL A,B
MOV R0,A
LCALL WRITE_HEX ;wyświetl liczbę dziesiętnie
MOV A,R0
ANL A,#MASKAB
MOV B,A
MOV A,R0
ANL A,#MASKAA
MOV R1,B
MOV B,#10
SWAP A
MUL AB
ADD A,R1
SJMP $
START
Zeruj A
Zeruj C
Wczytaj liczbę do ACC
Przepisz ACC do R0
Wypisz znak(-)
Przepisz wartość z R0 do ACC
Sumuj ACC z R0
START
Pobierz 1 czynnik i połóż na stosie
Podprogram NKB_BCD
Pobierz 2 czynnik i
połóż nastosie
Wyświetl wynik
Wyświetl znak (+)
Wyświetl znak (=)
Pobierz ze stosu do B i ACC
Pomnóż ACC iB
Podprogram NKB_BCD
Podprogram zamiany liczby NKB na BCD i wyświetlanie jej na LCD
Podprogram NKB_BCD