Program.txt

Implementacja w ASM`51. Jak zaimplementować działanie?

Je¶li nie jest już po terminie to masz program Rozszerzenie txt zmień na asm


ORG 0
MILION EQU 32 ;w ramie od adresu 32 na d?ugości trzech bajtów b?d? mia? zapisany milion
MOV R6,#0
MOV R7,#0 ;w tych dwóch rejestrach b?d? zapami?tywa? wynik dzielenia 1000000/2 x f
;ale samo dzielenie zast?pi? cyklicznym odejmowaniem
MOV R2,#0 ;ustawiam na pobranie pierwszej wartosci z tablicy czyli 352
POCZATEK:
MOV DPTR,#TABLICA ;pobieram do DPTR adres TABLICY z probkami
MOV A,R2 ;przenosz? to do akumulatora bo wartośae jaka w nim jest wplywa na faktyczny adres
MOVC A,@A+DPTR ;pobieram pierwszy bajt z TABLICY, jest to bardziej znacz?ca cz?śae wartości 352
MOV R4,A ;i zapamietuj? j? w R4
INC R2 ;to z DPTR daje dost?p do nastepnego bajtu
MOV A,R2
MOVC A,@A+DPTR ;pobra?em mniej znacz?c? cz?śae wyra?enia 352
MOV R5,A ;i teraz 352 mam w R4 i R5
INC R2 ;ustawiam na nastepny bajt w TABLICY
ADD A,R5 ;teraz t? wartośae 352 musz? pomno?yc przez 2 a robi? to tak ?e dodaj? j? do siebie
MOV R5,A
MOV A,R4
ADDC A,R4
MOV R4,A ;po 5 ostatnich rozkazach w R4 i R5 mam 2x352 czyli 704

MOV MILION,#0FH
MOV MILION+1,#42H
MOV MILION+2,#40H
CLR C
ODEJM: MOV A,MILION+2
SUBB A,R5
MOV MILION+2,A
MOV A,MILION+1
SUBB A,R4
MOV MILION+1,A
MOV A,MILION
SUBB A,#0
MOV MILION,A
JC KONIEC_ODEJMOWANIA ;jesli zostanie ustawiony znacznik C to znaczy z? ostatnie odejmowanie da?o wynik ujemny
;i to juz jest koniec odejmowania dla danych wartości
MOV A,R7 ;ka?de odejmowanie zwi?ksza o jeden R6 i R7 gdzie jest wynik dzielenia, a w zasadzie jest to liczba odj?ae
ADD A,#1
MOV R7,A
MOV A,R6
ADDC A,#0
MOV R6,A
SJMP ODEJM ;skacz? do dalszego odejmowania
KONIEC_ODEJMOWANIA: ;teraz to co mam z dzielenia/odejmowania musz? odj?ae od 65536 czyli w hex od 01 00 00 i umieściae w DPTR
CLR A
CLR C
SUBB A,R7
MOV DPL,A
CLR C
SUBB A,R6
MOV DPH,A ;tu koncz? odejmowanie od 65536,

MOV R6,#0
MOV R7,#0 ;zeruj? rejestry pod przysz?y wynik
MOV A,R2 ;jeśli tu b?dzie wartośae=6 to znaczy ?e ju? policzyliśmy wszystkie (3) elementy tablicy i jest koniec programu
CJNE A,#6,POCZATEK

SJMP $ ;koniec programu i zap?tlenie go

TABLICA:
DW 352,268,152 ;ka?da z tych wartości zajmuje dwa bajty poniewa? zadeklarowana jest jako DW

;Objasnienia: 1000000 w HEX wynosi 0F 42 40 i zajmuje trzy bajty
;W R2 mam numer kolejnej próbki z TABLICY


END


Pobierz plik - link do postu