サンプルプログラム(1〜nまでの総和をとるプログラム)


000001          ;
000002          ; Sample Program 1 recursive addition   
000003          ;
000004          ;
000005          ; Usage: kiteasm -Ttext 900 -Tconst 9f0 -Tdata 000 testadd
000006          ;
000007          _MAIN:
000008 0000 C100                ld        #0x00            ; DECIMAL = 0
000009 0001 1400                st        DECIMAL          ;
000010 0002 C108                ld        #0x08            ; SP = 0x800
000011 0003 BC00                swp                        ;
000012 0004 9C00                not                        ; test!
000013 0005 9C00                not                        ; test!
000014 0006 9500                eor       #0x00            ; test!
000015 0007 9100                or        #0x00            ; test! 
000016 0008 99FF                and       #0xff            ; test!
000017 0009 B000                rol                        ; test!
000018 000A B400                ror                        ; test!
000019 000B F004                mv        sp, acc          ;
000020 000C C800                in                         ; in
000021 000D D400                push                       ; SP--;(SP) = ACC
000022 000E 2016                call      radd             ; call radd
000023 000F D000                pop                        ; ACC = (SP); SP++
000024 0010 CC00                out                        ; out
000025 0011 D400                push                       ; SP--;(SP) == ACC
000026 0012 2025                call      hex2dec          ; call hex2dec      
000027 0013 D000                pop                        ; ACC = (SP); SP++
000028 0014 CC00                out                        ; out
000029 0015 F800                halt                       ; halt
000030                        ;
000031 0016 F009        radd:   mv        ixr, sp          ; IXR = SP
000032 0017 C201                ld        ixr, 1           ; ACC = (IXR+1)
000033 0018 D400                push                       ; SP--;(SP) == ACC
000034 0019 9100                or        #0               ; if ACC == 0 then radd0
000035 001A 5021                jpz       radd0            ; 
000036 001B 8C00                dec       acc, acc         ; ACC--
000037 001C D400                push                       ; SP--;(SP) == ACC
000038 001D 2016                call      radd             ; call radd
000039 001E D000                pop                        ; ACC == (SP)
000040 001F F009                mv        ixr, sp          ; IXR = SP;SP++
000041 0020 8200                add       ixr, 0           ; ACC = ACC + (IXR)
000042 0021 F009        radd0:  mv        ixr, sp          ; IXR = SP
000043 0022 C602                st        ixr, 2           ; (IXR+2) = ACC
000044 0023 8805                inc       sp, sp           ; SP ++
000045 0024 E000                ret                        ; return
000046                        ;
000047 0025 C800        hex2dec:in                         ; in
000048 0026 8809                inc       ixr, sp          ; IXR = SP + 1
000049 0027 880A                inc       ixr, ixr         ; ACC = (IXR)
000050 0028 C2FF                ld        ixr, -1          ;
000051 0029 D400                push                       ; SP--;(SP) == ACC
000052 002A 0700                ld        CONST            ; ACC = (CONST)
000053 002B F008                mv        ixr,acc          ; IXR = ACC
000054 002C D000                pop                        ; ACC == (SP);SP++
000055 002D 8602        hex0:   sub       ixr, 2           ; if (acc - 1000 < 0) then hex1
000056 002E 4035                jpc       hex1             ;
000057 002F D400                push                       ; (DECIMAL)++
000058 0030 0400                ld        DECIMAL          ;
000059 0031 8800                inc        acc             ;
000060 0032 1400                st        DECIMAL          ;        
000061 0033 D000                pop                        ;
000062 0034 302D                jp        hex0             ; goto hex0
000063 0035 8202        hex1:   add       ixr, 2           ; ACC = ACC + (IXR+2)
000064 0036 D400                push                       ; (DECIMAL) >> 4 
000065 0037 0400                ld        DECIMAL          ;
000066 0038 B000                rol                        ;
000067 0039 B000                rol                        ;
000068 003A B000                rol                        ;
000069 003B B000                rol                        ;
000070 003C 1400                st        DECIMAL          ;         
000071 003D D000                pop
000072                        ;
000073 003E 8601        hex2:   sub       ixr, 1           ; if (acc - 100 < 0) then hex3
000074 003F 4046                jpc       hex3             ; 
000075 0040 D400                push                       ; (DECIMAL)++
000076 0041 0400                ld        DECIMAL          ;
000077 0042 8101                add       #0x01            ;
000078 0043 1400                st        DECIMAL          ;
000079 0044 D000                pop                        ;
000080 0045 303E                jp        hex2             ; goto hex2
000081 0046 8201        hex3:   add       ixr, 1           ; ACC = ACC + (IXR+1)
000082 0047 D400                push                       ; (DECIMAL) >> 4
000083 0048 0400                ld        DECIMAL          ;
000084 0049 A400                asl                        ;
000085 004A A400                asl                        ;
000086 004B A400                asl                        ;
000087 004C A400                asl                        ;
000088 004D 1400                st        DECIMAL          ;
000089 004E D000                pop                        ;
000090                        ;
000091 004F 8600        hex4:   sub       ixr, 0           ; if (acc - 10 < 0) then hex5
000092 0050 4057                jpc       hex5             ;
000093 0051 D400                push                       ; (DECIMAL)++
000094 0052 0400                ld        DECIMAL          ;
000095 0053 85FF                sub       #-1              ;
000096 0054 1400                st        DECIMAL          ;
000097 0055 D000                pop                        ;
000098 0056 304F                jp        hex4             ; goto hex4
000099 0057 8200        hex5:   add       ixr, 0           ; ACC = ACC + (IXR)
000100 0058 D400                push                       ; (DECIMAL) >> 4
000101 0059 0400                ld        DECIMAL          ;
000102 005A A000                lsl                        ;
000103 005B A000                lsl                        ;
000104 005C A000                lsl                        ;
000105 005D A000                lsl                        ;
000106 005E F009                mv        ixr, sp          ;
000107 005F 8200                add       ixr, 0           ; ACC = ACC + (IXR)
000108 0060 C602                st        ixr, 2           ;
000109 0061 8805                inc       sp, sp           ; SP++
000110 0062 E000                ret                        ; return
000111                        
000112                        
000113                                .const
000114 0700 0701        CONST:        .word         D10
000115 0701 000A        D10:          .word          10
000116 0702 0064        D100:         .word         100
000117 0703 03E8        D1000:        .word        1000
000118                        
000119                        
000120                                .data
000121 0400 0000        DECIMAL:      .word           0
000122                        
000123                        
000124                        
000125                        
000126                        


このプログラムを用いて,通常動作モードで動作検証しましょう


ホーム もどる 辞書

This is my e-mail address:

arch_www < www@cs.kumamoto-u.ac.jp >
Copyright (C) KITE Microprocessor Project, 1996