------------------------------------------------------------------------------- Object Addr code Symbol Mnemon Operand Comment ------------------------------------------------------------------------------- 0000 700047 BR main ; smalSiz: .EQUATE d#2 ; Declare the constants larSiz: .EQUATE d#30 maxInput:.EQUATE d#32767 maxWdg: .EQUATE d#27000 ; 0003 0000 numWdg: .BLOCK d#2 ; Declare the global variables 0005 0000 power: .BLOCK d#2 0007 0000 cubic: .BLOCK d#2 0009 0000 size: .BLOCK d#2 000B 0000 control: .BLOCK d#2 000D 0000 area: .BLOCK d#2 000F 0000 count: .BLOCK d#2 0011 0000 newWdg: .BLOCK d#2 ; linefeed:.EQUATE h#000A ; ;-----------void Product(int size, int time)-------------- ; retunVal:.EQUATE d#10 sizePar: .EQUATE d#8 time: .EQUATE d#6 product: .EQUATE d#2 contrl: .EQUATE d#0 ; 0013 68FFFC Product: ADDSP d#-4,i ;allocate locals 0016 080000 LOADA d#0,i 0019 120002 STOREA product,s ;product = 0 001C 120000 STOREA contrl,s ;contrl = 0 001F 0A0000 while: LOADA contrl,s ;while(contrl != time) 0022 BA0006 COMPA time,s 0025 88003D BREQ endWhile 0028 0A0002 LOADA product,s ;product = product + size 002B 1A0008 ADDA sizePar,s 002E 120002 STOREA product,s 0031 0A0000 LOADA contrl,s ;contrl = contrl + 1 0034 180001 ADDA d#1,i 0037 120000 STOREA contrl,s 003A 70001F BR while 003D 0A0002 endWhile:LOADA product,s 0040 12000A STOREA retunVal,s 0043 680004 ADDSP d#4,i ;pop locals 0046 C8 RTS ; ;---------------------------main method--------------------------- ; 0047 0801C5 main: LOADA Msg1,i ;cout << "Number of widgets? Enter zero 004A 12FFFE STOREA d#-2,s ; or negative number to quite. 004D 68FFFE ADDSP d#-2,i 0050 C002CB JSR PringMsg 0053 680002 ADDSP d#2,i 0056 E0000A CHARO linefeed,i 0059 E90003 DECI numWdg,d ;cin >> numWdge; ; 005C 080000 While1: LOADA d#0,i ; initialize numWdg, power, cubic, size, 005F 110005 STOREA power,d ; control, area to be 0 0062 110007 STOREA cubic,d 0065 110009 STOREA size,d 0068 11000B STOREA control,d 006B 11000D STOREA area,d 006E 090003 LOADA numWdg,d ;while(numWdg >= 0) ; 0071 A800A1 if1: BRV then ;if(numWdg >= maxInput) 0074 8001B2 BRLT endWhil1 0077 8801B2 BREQ endWhil1 007A 0801FF LOADA Msg2,i ;cout << "Your number of widget is " 007D 12FFFE STOREA d#-2,s 0080 68FFFE ADDSP d#-2,i 0083 C002CB JSR PringMsg 0086 680002 ADDSP d#2,i 0089 F10003 DECO numWdg,d ;cout << numWdg; 008C E0000A CHARO linefeed,i 008F 090003 LOADA numWdg,d 0092 B86978 COMPA maxWdg,i ;if(numWdg > maxWdg) ; 0095 A000B6 BRGT then2 0098 090003 LOADA numWdg,d ;if(numWdg <= maxWdg) 009B 110011 STOREA newWdg,d ; { newWdg = numWdg;} 009E 7000E3 BR else ; 00A1 08021A then: LOADA Msg3,i ;cout << "Sorry! the Number of widgets 00A4 12FFFE STOREA d#-2,s ; is too large." 00A7 68FFFE ADDSP d#-2,i 00AA C002CB JSR PringMsg 00AD 680002 ADDSP d#2,i 00B0 E0000A CHARO linefeed,i 00B3 700197 BR endif1 ; 00B6 090003 then2: LOADA numWdg,d ;newWdg = numWdg; 00B9 110011 STOREA newWdg,d 00BC 080000 LOADA d#0,i ;count = 0; 00BF 11000F STOREA count,d 00C2 7000C5 BR while3 ; 00C5 090011 while3: LOADA newWdg,d ;while(newWdg >= maxWdg) 00C8 B86978 COMPA maxWdg,i ; 00CB 7800E0 BRLE endWhil3 00CE 189688 ADDA d#-27000,i ;newWdg = newWdg - maxWdg; 00D1 110011 STOREA newWdg,d 00D4 09000F LOADA count,d 00D7 180001 ADDA d#1,i ;count = count + 1; 00DA 11000F STOREA count,d 00DD 7000C5 BR while3 ; ; 00E0 7000E3 endWhil3:BR else ; 00E3 080002 else: LOADA smalSiz,i ;size = smalSiz; 00E6 110009 STOREA size,d ; 00E9 090007 LOADA cubic,d 00EC B90011 COMPA newWdg,d ;while(cubic < newWdg) 00EF A0013A While2: BRGT endWhil2 00F2 88013A BREQ endWhil2 00F5 090009 LOADA size,d 00F8 12FFFC STOREA d#-4,s ;push params size in 00FB 12FFFA STOREA d#-6,s ;push params size in 00FE 68FFFA ADDSP d#-6,i 0101 C00013 JSR Product 0104 680006 ADDSP d#6,i ;pop params and retVal 0107 0AFFFE LOADA d#-2,s 010A 11000D STOREA area,d ;area = Product(size,size) 010D 09000D LOADA area,d 0110 12FFFC STOREA d#-4,s 0113 090009 LOADA size,d 0116 12FFFA STOREA d#-6,s 0119 68FFFA ADDSP d#-6,i 011C C00013 JSR Product 011F 680006 ADDSP d#6,i ;pop the params and retval 0122 0AFFFE LOADA d#-2,s 0125 110007 STOREA cubic,d ;cubic = Product(area,size) 0128 090009 LOADA size,d ;size = size + 1 012B 180001 ADDA d#1,i 012E 110009 STOREA size,d 0131 090007 LOADA cubic,d 0134 B90011 COMPA newWdg,d 0137 7000EF BR While2 ; 013A 090003 endWhil2:LOADA numWdg,d ;if(numWdg > maxWdg) 013D B86978 COMPA maxWdg,i 0140 A00146 BRGT prtMsg5 0143 700179 BR prtMsg6 ; ; 0146 080268 prtMsg5: LOADA Msg5,i ;cout << "You need "; 0149 12FFFE STOREA d#-2,s 014C 68FFFE ADDSP d#-2,i 014F C002CB JSR PringMsg 0152 680002 ADDSP d#2,i 0155 F1000F DECO count,d ;cout << count; 0158 0802A6 LOADA Msg8,i ;cout <<"boxes in size 30 and 1 box in size " 015B 12FFFE STOREA d#-2,s 015E 68FFFE ADDSP d#-2,i 0161 C002CB JSR PringMsg 0164 680002 ADDSP d#2,i 0167 090009 LOADA size,d ;size = size - 1; 016A 18FFFF ADDA d#-1,i 016D 110009 STOREA size,d 0170 F10009 DECO size,d ;cout << size; 0173 E0000A CHARO linefeed,i 0176 700197 BR endif1 ; ; 0179 080273 prtMsg6: LOADA Msg6,i ;cout << "The box size is " 017C 12FFFE STOREA d#-2,s 017F 68FFFE ADDSP d#-2,i 0182 C002CB JSR PringMsg 0185 680002 ADDSP d#2,i 0188 090009 LOADA size,d ;size = size - 1; 018B 18FFFF ADDA d#-1,i 018E 110009 STOREA size,d 0191 F10009 DECO size,d ;cout << size; 0194 E0000A CHARO linefeed,i ; ; 0197 0801C5 endif1: LOADA Msg1,i ;cout << "Number of widgets? Enter zero 019A 12FFFE STOREA d#-2,s ; or negative number to quite. 019D 68FFFE ADDSP d#-2,i 01A0 E0000A CHARO linefeed,i 01A3 C002CB JSR PringMsg 01A6 680002 ADDSP d#2,i 01A9 E0000A CHARO linefeed,i 01AC E90003 DECI numWdg,d ;cin >> numWdge; 01AF 70005C BR While1 ; 01B2 080284 endWhil1:LOADA Msg7,i ;cout << "Thank you for using this program!" 01B5 12FFFE STOREA d#-2,s 01B8 68FFFE ADDSP d#-2,i 01BB C002CB JSR PringMsg 01BE 680002 ADDSP d#2,i 01C1 E0000A CHARO linefeed,i 01C4 00 STOP ; 01C5 4E756D Msg1: .ASCII /Number of widgets? Enter zero or negative number to quit. quit./ 626572 206F66 207769 646765 74733F 20456E 746572 207A65 726F20 6F7220 6E6567 617469 766520 6E756D 626572 20746F 207175 69742E 01FE 00 .BYTE h#00 ; ; 01FF 596F75 Msg2: .ASCII /Your number of widgets is / 72206E 756D62 657220 6F6620 776964 676574 732069 7320 0219 00 .BYTE h#00 ; 021A 536F72 Msg3: .ASCII /Sorry! The number of widgets is too large./ 727921 202054 686520 6E756D 626572 206F66 207769 646765 747320 697320 746F6F 206C61 726765 2E 0245 00 .BYTE h#00 ; 0246 546861 Msg4: .ASCII /Thank you for using this program!/ 6E6B20 796F75 20666F 722075 73696E 672074 686973 207072 6F6772 616D21 0267 00 .BYTE h#00 ; 0268 596F75 Msg5: .ASCII /You need / 206E65 656420 20 0272 00 .BYTE h#00 ; 0273 546865 Msg6: .ASCII /The box size is / 20626F 782073 697A65 206973 20 0283 00 .BYTE h#00 ; 0284 546861 Msg7: .ASCII /Thank you for using this program!/ 6E6B20 796F75 20666F 722075 73696E 672074 686973 207072 6F6772 616D21 02A5 00 .BYTE h#00 ; 02A6 20626F Msg8: .ASCII / boxes in size 30 and 1 box in size / 786573 20696E 207369 7A6520 333020 616E64 203120 626F78 20696E 207369 7A6520 02CA 00 .BYTE h#00 ; ; ;---------------------print subroutine------------------------ ;print a string of ASCII bytes unitll in encounters a null byte ;(eight zero bits). ;Assumes one parameter, which contains the address of the message. ; MsgAddr: .EQUATE d#2 ;Address of message to print ; 02CB 620002 PringMsg:LOADB MsgAddr,s ;B = address of message 02CE 0C0000 LOADX d#0,i ;x = 0 02D1 080000 LOADA d#0,i ;A = 0 02D4 53 PrtMore: LDBYTA ,x ;Test next char from Mem[B + X] 02D5 8802DF BREQ halt ;if null then exit 02D8 E3 CHARO ,x ;esle pint 02D9 1C0001 ADDX d#1,i ;x = x + 1 for next character 02DC 7002D4 BR PrtMore 02DF C8 halt: RTS ; ; ; 02E0 .END ------------------------------------------------------------------------------- Symbol table -------------------------------------- Symbol Value Symbol Value -------------------------------------- Msg1 01C5 Msg2 01FF Msg3 021A Msg4 0246 Msg5 0268 Msg6 0273 Msg7 0284 Msg8 02A6 MsgAddr 0002 PringMsg 02CB Product 0013 PrtMore 02D4 While1 005C While2 00EF area 000D contrl 0000 control 000B count 000F cubic 0007 else 00E3 endWhil1 01B2 endWhil2 013A endWhil3 00E0 endWhile 003D endif1 0197 halt 02DF if1 0071 larSiz 001E linefeed 000A main 0047 maxInput 7FFF maxWdg 6978 newWdg 0011 numWdg 0003 power 0005 product 0002 prtMsg5 0146 prtMsg6 0179 retunVal 000A size 0009 sizePar 0008 smalSiz 0002 then 00A1 then2 00B6 time 0006 while 001F while3 00C5 -------------------------------------- No errors. Successful assembly.