Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *-----------------------------------------------------------
- * Title : Smalamálsverkefni 2
- * Written by : Guðmundur Óli Norland
- * Date : 02/11/2018
- * Description: Tölvuhögun
- *-----------------------------------------------------------
- START: ORG $1000
- LEA stringn,A1 ; Hlöðum upphafsstrengnum í A1
- MOVE.B #14,D0 ; Skipun 14 birtir núll-enda streng
- TRAP #15
- MOVE.B #4,D0 ; Skipun 4 les tölu frá lyklaborðinu og geymir í D1
- TRAP #15
- MOVE.B D1,(n) ; Geymum í minninu sem við tókum frá
- BSR.W nFact ; Förum í undir-rútínu, return address á stakkinn
- BSR.W displayN ; Förum í undir-rútínu, return address á stakkinn
- LEA stringnf,A1 ; Hlöðum strengnum fyrir nf í A1
- MOVE.B #14,D0
- TRAP #15 ; Birtum skilaboðin
- MOVE.L (nf),D1 ; nf í D1 fyrir birtingu
- MOVE.B #3,D0 ; Skipun 3 birtir tölu geymd í D1.L
- TRAP #15
- BRA END
- nFact:
- MOVEM D0-D7/A0-A6,-(SP) ; vistum öll gisti á stakknum (A7 = SP)
- CMP.B #0,(n) ; ef n<0 gefum við villu
- BLT NEGATIVE
- CMP.B #9,(n) ; ef n>9 gefum við villu
- BGT OVERMAX
- MOVE.B #1,D2 ; i
- MOVE.B #1,D3 ; nF, gerum þetta því 0!=1
- LOOP:
- CMP.L D1,D2 ; berum saman n og i
- BGT nfEND ; hættum þegar i > n
- MULU.W D2,D3 ; margföldum i og nf og geymum í D3, 9! er yfir word og getum því ekki reiknað 10! eða stærra
- ADDI.B #1,D2 ; i++
- BRA LOOP
- nfEND:
- MOVE.L D3,(nf) ; geymum í minninu sem við tókum frá
- MOVEM (SP)+,D0-D7/A0-A6 ; endurheimtum öll gögn af stakknum
- RTS ; sækjum return addressið úr stakkinum
- displayN:
- MOVEM D0-D1,-(SP) ; vistum gisti á stakknum (A7 = SP)
- MOVE.B (n),D1
- MOVE.B #3,D0
- TRAP #15 ; birtum n
- MOVEM (SP)+,D0-D1 ; endurheimtum gögn af stakkinum
- RTS ; sækjum return addressið úr stakkinum
- NEGATIVE:
- ;; vistum ekki gisti því þetta er error rútína
- BSR.W displayN ; Förum í undir-rútínu
- LEA negativeStr,A1 ; hlöðum villuskilaboðunum í A1
- MOVE.B #14,D0
- TRAP #15 ; birtum skilaboðin
- BRA END ; forritið endar
- OVERMAX:
- ;; vistum ekki gisti því þetta er error rútína
- BSR.W displayN ; Förum í undir-rútínu
- LEA overmaxStr,A1 ; hlöðum villuskilaboðunum í A1
- MOVE.B #14,D0
- TRAP #15 ; birtum skilaboðin
- END SIMHALT ; halt simulator
- ; Tökum frá minni fyrir n og nFact
- n DS.L 1
- nF DS.L 1
- ; Strengir til að birta
- stringn DC.B 'Sláðu inn tolu: ',0
- stringnf DC.B '! = ',0
- negativeStr DC.B '! Er ekki skilgreint',0
- overmaxStr DC.B '! er of hatt gildi fyrir thetta forrit',0
- END START
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement