|
Laboratorium Podstaw Systemów Mikroprocesorowych |
Ćwiczenie nr 3B
OPERACJE ARYTMETYCZNE
Wykonawcy:
Marcin Grabowiecki Jacek Gawęda Sebastian |
Data wykonania:
97.11.07 |
Celem ćwiczenia jest zapoznanie się ze sposobem wykonywania podstawowych operacji arytmetycznych na liczbach jednobajtowych oraz metod konwersji formatów stosowanych do reprezentacji danych.
Zadanie nr1
LJMP START
ORG 100H
START:
LCALL LCD_CLR
CLR A
CLR C
SUBB A,#1
MOV R0,A
LCALL WRITE_HEX
MOV A,R0
LCALL WRITE_HEX
MOV A,R0
ADD A,#1
LCALL WRITE_HEX
SJMP $
Efektem działania programu jest pojawienie się „FF00”
Modyfikacja programu polegająca na odejmowaniu liczby 10 od wartości pobranej z klawiatury:
LJMP START
ORG 100H
START:
LCALL LCD_CLR wyczyść wyświetlacz
LCALL WAIT_KEY pobierz liczbę z klawiatury do akumulatora
MOV R0,A wpisz tą liczbę do rejestru R0
LCALL WRITE_HEX wyświetl tą liczbę
MOV A,#'-' wpisz do akumulatora liczbę odpowiadającą „-” w ASCII
LCALL WRITE_DATA wyświetl ten znak
MOV A,#'1' wpisz do akumulatora liczbę odpowiadającą „1” w ASCII
LCALL WRITE_DATA wyświetl ten znak
MOV A,#'0' wpisz do akumulatora liczbę odpowiadającą „0” w ASCII
LCALL WRITE_DATA wyświetl ten znak
CLR A wyzeruj A
CLR C wyzeruj C
SUBB A,#10 odejmij od akumulatora 10
MOV R1,A przenieś wartość akumulatora do R1
MOV A,#'=' wpisz do akumulatora liczbę odpowiadającą „=” w ASCII
LCALL WRITE_DATA wyświetl ten znak
MOV A,R0 R0:=A
ADD A,R1 A:=A+R1
LCALL WRITE_HEX wyświetl A
LJMP $ zapętl się
Efektem działania programu jest wyświetlenie wyniku odejmowania 10 od liczby wprowadzonej z klawiatury.
Wynik wyświetlany jest w kodzie szestnastkowym.
Zadanie nr 2
LJMP START
ORG 100H
START:
LCALL LCD_CLR
LCALL WAIT_KEY ;pobierz pierwszy czynnik
MOV B,#10 ;zamień liczbę na BCD B = #10
DIV AB ;dzieląc przez 10
SWAP A
ADD A,B
MOV R1,A ;zapamiętaj w R1 (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 ten pobiera z klawiatury dwie liczby i dodaje je. Liczby są wyświetlane w kodzie BCD.
Nie możliwe jest mnożenie liczb bezpośrednio w kodzie BCD. Aby tego dokonać należy dokonać konwersji liczb BCD na binarne a następnie pomnożyć je.
Niestety brak czasu nie pozwolił na napisanie tego programu.
2