Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; oef 8.1
- $include(c8051f120.inc)
- cseg at 0000H
- main: clr EA
- mov WDTCN,#0DEH
- mov WDTCN,#0ADH
- setb EA ; crossbar moet hier niet geset worden
- mov A,#254D
- mov B,#5D ;b hulp register voor bv vermenigvuldigingen en delingen
- push Acc
- push B
- call verm
- pop B ;functie cleanup zorgt dat deze wijst naar de B boven de Call => pop en in B
- pop A ; analoog met pop B => op deze 2 plaatsen staan de resultaten van de mul
- jmp $ ;oneindige loop
- verm:
- //voorbereiding
- push 000H ; alles dat je nodig hebt op de stack gooien om later terug te zetten ;000H = R0
- mov R0, SP ; R0 als secundaire stack pointer zetten
- push Acc
- push B
- //effectieve code
- dec R0 ; wijst naar de push B van hierboven na push wijst het naar push A ===> we willen de eerste A en B van main hebben
- dec R0 ; wijst naar de push 0000H die we hierboven deden
- dec R0 ; wijst naar de push B in main => inhoud is nodig ==> R0 bevat adress
- mov B,@R0 ; de inhoud van wat er op de stack zit wordt in B gestoken
- dec R0 ; wijst naar de A van main
- mov A,@R0 ; inhoud van het de stack waar R0 naar wijst word opgehaald en in A gestoken
- mul AB ; A en B worden vermenigvuldigt low byte zit nu in A en high byte in B (little endian)
- mov @R0, A ; de oude waarde van A word vervangen door de nieuwe waarde
- inc R0 ; verplaatsen naar B
- mov @R0, B ; de oude waarde van B word vervangen door de nieuwe waarde
- //Cleanup alles die gebruikt is terugzetten => via de stackpointer => top stack is de laatste push dus B
- pop B ; top van de stack was met push B => terug in B steken
- pop Acc ; pop verwijdert dus nu staat de pointer naar de push A van het begin van de functie => pop en steek het in A
- pop 000H ; zelfde voor 000H/R0
- ret ; terug naar main
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement