Advertisement
OneTrueKill

oef 8.1

Nov 19th, 2019
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. ; oef 8.1
  2. $include(c8051f120.inc)
  3.  
  4.  
  5. cseg at 0000H
  6.  
  7. main: clr EA
  8. mov WDTCN,#0DEH
  9. mov WDTCN,#0ADH
  10. setb EA ; crossbar moet hier niet geset worden
  11. mov A,#254D
  12. mov B,#5D ;b hulp register voor bv vermenigvuldigingen en delingen
  13.  
  14. push Acc
  15. push B
  16.  
  17. call verm
  18.  
  19. pop B ;functie cleanup zorgt dat deze wijst naar de B boven de Call => pop en in B
  20. pop A ; analoog met pop B => op deze 2 plaatsen staan de resultaten van de mul
  21.  
  22. jmp $ ;oneindige loop
  23.  
  24. verm:
  25. //voorbereiding
  26. push 000H ; alles dat je nodig hebt op de stack gooien om later terug te zetten ;000H = R0
  27. mov R0, SP ; R0 als secundaire stack pointer zetten
  28. push Acc
  29. push B
  30. //effectieve code
  31. 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
  32. dec R0 ; wijst naar de push 0000H die we hierboven deden
  33. dec R0 ; wijst naar de push B in main => inhoud is nodig ==> R0 bevat adress
  34.  
  35. mov B,@R0 ; de inhoud van wat er op de stack zit wordt in B gestoken
  36.  
  37. dec R0 ; wijst naar de A van main
  38.  
  39. mov A,@R0 ; inhoud van het de stack waar R0 naar wijst word opgehaald en in A gestoken
  40.  
  41. mul AB ; A en B worden vermenigvuldigt low byte zit nu in A en high byte in B (little endian)
  42.  
  43. mov @R0, A ; de oude waarde van A word vervangen door de nieuwe waarde
  44. inc R0 ; verplaatsen naar B
  45. mov @R0, B ; de oude waarde van B word vervangen door de nieuwe waarde
  46.  
  47. //Cleanup alles die gebruikt is terugzetten => via de stackpointer => top stack is de laatste push dus B
  48. pop B ; top van de stack was met push B => terug in B steken
  49. 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
  50. pop 000H ; zelfde voor 000H/R0
  51.  
  52. ret ; terug naar main
  53.  
  54. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement