Created
October 28, 2012 22:01
-
-
Save b-adams/3970088 to your computer and use it in GitHub Desktop.
Multiplication function
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
------------------------------------------------------------------------------- | |
Object | |
Addr code Symbol Mnemon Operand Comment | |
------------------------------------------------------------------------------- | |
0000 04002B BR main | |
mainFram:.EQUATE 6 ;Size of main's local variables | |
en: .EQUATE 0 ;main local variable #2d | |
em: .EQUATE 2 ;main local variable #2d | |
prod: .EQUATE 4 ;main local vairbale #2d | |
0003 0A506C prompt: .ASCII "\nPlease enter two numbers to multiply: \x00" | |
656173 | |
652065 | |
6E7465 | |
722074 | |
776F20 | |
6E756D | |
626572 | |
732074 | |
6F206D | |
756C74 | |
69706C | |
793A20 | |
00 | |
002B 24 main: NOP0 | |
002C 680006 SUBSP mainFram,i ;allocate #prod #em #en | |
002F 410003 STRO prompt,d | |
0032 330002 DECI em,s ;input original m | |
0035 330000 DECI en,s ;input original n | |
;Prepare argument N for mult | |
0038 C30000 LDA en,s | |
003B E3FFFA STA argN,s | |
;Prepare argument M for mult | |
003E C30002 LDA em,s | |
0041 E3FFFC STA argM,s | |
;Call mult | |
0044 680006 SUBSP frame,i ;allocate #return #paramM #paramN | |
0047 160066 CALL mult | |
004A 600006 ADDSP frame,i ;deallocate #paramN #paramM #return | |
;Save returned value | |
004D C3FFFE LDA retval,s | |
0050 E30004 STA prod,s | |
;Display result | |
0053 3B0002 DECO em,s | |
0056 50002A CHARO '*',i | |
0059 3B0000 DECO en,s | |
005C 50003D CHARO '=',i | |
005F 3B0004 DECO prod,s | |
0062 600006 ADDSP mainFram,i ;deallocate #en #em #prod | |
0065 00 STOP | |
;procedure mult | |
;callER data | |
frame: .EQUATE 6 ;size of mult's arguments and return | |
argN: .EQUATE -6 ;mult argument | |
argM: .EQUATE -4 ;mult argument | |
retval: .EQUATE -2 ;mult return | |
;callEE data | |
lframe: .EQUATE 6 ;size of mult's local variables | |
dec: .EQUATE 0 ;mult local variable #2d | |
inc: .EQUATE 2 ;mult local variable #2d | |
product: .EQUATE 4 ;mult local variable #2d | |
retAddr: .EQUATE 6 ;mult return address #2h | |
paramN: .EQUATE 8 ;mult formal parameter #2d | |
paramM: .EQUATE 10 ;mult formal parameter #2d | |
return: .EQUATE 12 ;mult return value #2d | |
;Entry point for mult | |
0066 24 mult: NOP0 | |
0067 680006 SUBSP lframe,i ;allocate #product #inc #dec | |
;product=0 | |
006A C00000 LDA 0,i | |
006D E30004 STA product,s | |
;inc = n | |
0070 C30008 LDA paramN,s | |
0073 E30002 STA inc,s | |
;dec = m | |
0076 C3000A LDA paramM,s | |
0079 E30000 STA dec,s | |
007C 24 loop: NOP0 | |
007D C30000 LDA dec,s | |
0080 0A00AD BREQ done ;Nothing more to multiply | |
0083 22 RORA ;Put parity of dec into C | |
0084 14008E BRC odd ;if dec%2==1 | |
0087 04008A BR even ;if dec%2==0 | |
;In case of a 0, nothing to do | |
008A 24 even: NOP0 | |
008B 04009B BR always | |
;In case of a 1, the product goes up by inc | |
008E 24 odd: NOP0 | |
;product = product + inc | |
008F C30004 LDA product,s | |
0092 730002 ADDA inc,s | |
0095 E30004 STA product,s | |
0098 04009B BR always | |
009B 24 always: NOP0 | |
;dec = dec/2 | |
009C C30000 LDA dec,s | |
009F 1E ASRA | |
00A0 E30000 STA dec,s | |
;inc = 2*inc | |
00A3 C30002 LDA inc,s | |
00A6 1C ASLA | |
00A7 E30002 STA inc,s | |
00AA 04007C BR loop | |
00AD 24 done: NOP0 | |
;return product | |
00AE C30004 LDA product,s | |
00B1 E3000C STA return,s | |
00B4 600006 ADDSP lframe,i ;deallocate #dec #inc #product | |
00B7 58 RET0 | |
00B8 .END | |
------------------------------------------------------------------------------- | |
Symbol table | |
-------------------------------------- | |
Symbol Value Symbol Value | |
-------------------------------------- | |
always 009B argM FFFC | |
argN FFFA dec 0000 | |
done 00AD em 0002 | |
en 0000 even 008A | |
frame 0006 inc 0002 | |
lframe 0006 loop 007C | |
main 002B mainFram 0006 | |
mult 0066 odd 008E | |
paramM 000A paramN 0008 | |
prod 0004 product 0004 | |
prompt 0003 retAddr 0006 | |
return 000C retval FFFE | |
-------------------------------------- |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment