2-eukl~1, wisisz, wydzial informatyki, studia zaoczne inzynierskie, podstawy programowania, l2


LABORATORIUM PODSTAW SYSTEMÓW MIKROPROCESOROWYCH

Imię i Nazwisko: Adamczuk Mariusz

Grupa: ED 5.3

Data wyk. ćwicz. 23.11.98

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 $

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic

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

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

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



Wyszukiwarka