™ ® ©
Politechnika Lubelska |
Laboratorium podstaw systemów mikroprocesorowych |
|||
w Lublinie |
Ćwiczenie nr 3B |
|||
Nazwisko: Garbacz Kuźma |
Imię: Tomasz Jacek |
Semestr V |
Grupa ED 5.3 |
Rok akademicki 1997/98 |
Temat ćwiczenia: Operacje arytmetyczne. |
Data wykonania 07.11.97 |
Ocena: |
1. Cel ćwiczenia :
Zapoznanie się z podstawowymi instrukcjami arytmetycznymi i zastosowaniem ich do działania na liczbach.
;************************************************
;LEKCJA 3B - PROSTE OPERACJE ARYTMETYCZNE
;PRZYKťAD 1 - LICZBY UJEMNE U2
;************************************************
LJMP START
ORG 100H
START:
LCALL LCD_CLR
CLR A ;zerowanie akumulatora
CLR C ; zerowanie flagi C
SUBB A,#1 ;odjęcie 1 od akumulatora
MOV R0,A ;przepisanie zawartości akumulatora do R0
LCALL WRITE_HEX
MOV A,R0 ;A <- R0=-1
ADD A,#1 ;A <- A+1 = -1+1 = 0
LCALL WRITE_HEX
SJMP $
Program ukazuje zastosowanie instrukcji odejmowania i zapisu liczb ujemnych w kodzie U2.
LJMP START
ORG 100H
START:
LCALL LCD_CLR
CLR A ;zeruj A
LCALL WAIT_KEY
MOV B,#10 ;wprowadzanie
MUL AB ;dziesiątek
MOV R3,A ;odjemnej
LCALL WAIT_KEY ;wprowadzanie
MOV R4,A ;jednostek
ADD A,R3 ;odjemnej
MOV R5,A
MOV B,#10
DIV AB ;zamiana
SWAP A ;na
ADD A,B ;kod BCD
MOV R0,A
LCALL WRITE_HEX
MOV A,#'-'
LCALL WRITE_DATA
MOV A,#16 ; wypisanie na wyświetlaczu
LCALL WRITE_HEX ; cyfry 10
MOV A,#'='
LCALL WRITE_DATA
MOV R1,#10
MOV A,R5 ;
CLR C ;odejmowanie
SUBB A,#10 ;od akumulatora liczby 10
MOV R0,31H
MOV @R0,A ;
DEC R0 ;
LCALL HEX_BCD ;zamiana wyniku z postaci HEX na BCD
INC R0 ;
MOV A,@R0
LCALL WRITE_HEX
INC R0
MOV A,@R0
LCALL WRITE_HEX
SJMP $
Powyższy program powoduje odjęcie od liczby dwucyfrowej wczytanej z klawiatury liczby 10 i wyświetlenie na wyświetlaczu LCD całego procesu.
;************************************************
;LEKCJA 3B - PROSTE OPERACJE ARYTMETYCZNE
;PRZYKťAD 2 - KALKULATOR BCD
;************************************************
LJMP START
ORG 100H
START:
LCALL LCD_CLR
LCALL WAIT_KEY ;pobierz pierwszy czynnik
MOV B,#10 ;zamień liczbę na BCD
DIV AB ;dzieląc przez 10
SWAP A
ADD A,B
MOV R0,A ;zapamiętaj w R0 (BCD)
LCALL WRITE_HEX ;wypisz na LCD
MOV A,#'+' ;znak sumy
LCALL WRITE_DATA ;wyświetl jako znak
LCALL WAIT_KEY ;pobierz drugi czynnik
MOV B,#10 ;zamień liczbę na BCD
DIV AB ;dzieląc przez 10
SWAP A
ADD A,B
MOV R0,A ;zapamiętaj w R1 (BCD)
LCALL WRITE_HEX ;wypisz na LCD
MOV A,#'=' ;znak równości
LCALL WRITE_DATA ;wyświetl jako znak
MOV A,R0 ;pierwszy czynnik do A
ADD A,R1 ;dodaj drugi czynnik
DA A ;poprawka dodawania
;liczb BCD
LCALL WRITE_HEX ;wypisz wynik na LCD
SJMP $
Program umożliwia zaobserwowanie operacji wykonywanych na liczbach zapisanych
w formacie BCD. Listing programu zawiera instrukcję poprawki dziesiętnej DA, używanej
przy operacji dodawania liczb BCD w celu otrzymania wyniku w tym samym formacie.
;**********************************
;Program ** Konwersja BCD\BIN **
;**********************************
LJMP START
ORG 100H
START:
MOV A,@R0
ANL A,#0F0H
SWAP A
MOV B,#10
MUL AB
XCH A,B
MOV A,@R0
ANL A,#0FH
ADD A,B
MOV @R0,A
SJMP $
Program powoduje zamianę liczby formatu spakowane BCD zawartej pod adresem wskazywanym przez rejestr R0, na liczbę w formacie BIN, która jest wprowadzana pod ten sam adres (zaw.R0).