OPERACJE ARYTMETYCZNE

Eliasz Giszter

PWSZ Gniezno

Elektronika i Telekomunikacja

Temat: PROSTE OPERACJE ARYTMETYCZNE

  1. 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.

  1. 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.

  1. 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 $

  1. 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.

  1. 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.

  1. Napisz program mnożący liczby reprezentowane w kodzie BCD.

Tego nie zrobiłem bo nie bardzo rozumiem polecenie.

  1. 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.


Wyszukiwarka

Podobne podstrony:
2 Operacje arytmetyczne
Podstawowe operacje arytmetyczne na liczbach binarnych
Podstawowe operacje arytmetyczn Nieznany
Operacje arytmetyczne
lec2 Operacje arytmetyczne 24
Systemy operacyjne
Blok operacyjny zasady postÄTpowania , wyglÄ d
Wykład 1 inżynierskie Wprowadzenie do zarządzania operacyjnego
Zabieg operacyjny zaburzenia homeostazy
Planowanie strategiczne i operac Konferencja AWF 18 X 07
leczenie operacyjne
4 Operacje na Plikach ppt

więcej podobnych podstron