⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arith.asm

📁 这是一篇关于8位RISC CPU设计的文章
💻 ASM
字号:

 ;----------------------------------------------------
 ; Test for add, adc, sun, sbc, subr, inc, dec, inca, deca
 ;----------------------------------------------------

 org 0x0000

 ; add

 ldi r0 0xaa
 ldi r1 0x55
 ldi r2 0xff
 add r1
 cmp r2
 jmpa ne error

 ldi r1 0x01
 ldi r2 0x00
 add r1
 cmp r2
 jmpa ne error

 ldi r1 0x01
 ldi r0 0x26
 ldi r2 0x27

loop1:
 add r1
 cmp r2
 jmpa ne error
 inc r2
 jmpr ne loop1


 ldi r1 0x02
 ldi r0 0x78
 ldi r2 0x7a

loop2:
 add r1
 cmp r2
 jmpa ne error
 inc r2
 inc r2
 jmpr ne loop2

 ldi r1 0x34
 ldi r0 0x68
 ldi r2 0x9c
 ldi r3 0x00
 
 ; check all the registers

 ldi r0 0x27
 ldi r1 0x13
 ldi r2 0x3a
 ldi r3 0x74
 ldi r4 0xe8
 ldi r5 0xd0
 ldi r6 0xa0
 ldi r7 0x40

 add r1
 cmp r2
 jmpa ne error
 
 add r2
 cmp r3
 jmpa ne error

 add r3
 cmp r4
 jmpa ne error

 add r4
 cmp r5
 jmpa ne error

 add r5
 cmp r6
 jmpa ne error

 add r6
 cmp r7
 jmpa ne error

 
 ldi r1 0x80
 add r7
 cmp r1
 jmpa ne error

 cmp r0
 jmpa ne error

 ldi r0 0xff
 ldi r1 0x01
 ldi r2 0x00
 add r1
 cmp r2
 jmpa ne error

 ; adc

 ldi r0 0xff
 ldi r1 0x01
 ldi r2 0x00
 adc r1
 jmpa cc error

 ldi r0 0xff
 ldi r1 0x01
 ldi r2 0x01
 adc r1
 cmp r2
 jmpa ne error

 ldi r0 0x00
 wrps
 ldi r0 0xfe
 ldi r1 0x01
 adc r1
 jmpa cs error

 ; sub

 ldi r0 0xff
 ldi r1 0x01
 ldi r2 0xfe
 sub r1
 cmp r2
 jmpa ne error

 ldi r0 0xaa
 ldi r1 0x55
 ldi r2 0x55
 sub r1
 cmp r2
 jmpa ne error

 ldi r0 0x55
 ldi r1 0xaa
 ldi r2 0xab
 sub r1
 cmp r2
 jmpa ne error


 ldi r1 0x02
 ldi r0 0x26
 ldi r2 0x24
loop3:
 sub r1
 cmp r2
 jmpa ne error
 dec r2
 dec r2
 jmpr ne loop3

 ; subr
 ldi r0 0x01
 ldi r1 0xff
 ldi r2 0xfe
 subr r1
 cmp r2
 jmpa ne error
 
 ldi r0 0x55
 ldi r1 0xaa
 ldi r2 0x55
 subr r1
 cmp r2
 jmpa ne error
 
 ldi r0 0xaa
 ldi r1 0x55
 ldi r2 0xab
 subr r1
 cmp r2
 jmpa ne error
 
 ; sbc

 ldi r0 0x00
 wrps
 ldi r0 0xaa
 ldi r1 0x55
 ldi r2 0x55
 sbc r1
 cmp r2
 jmpa ne error
 
 ldi r0 0x02
 wrps
 ldi r0 0xaa
 ldi r1 0x55
 ldi r2 0x54
 sbc r1
 cmp r2
 jmpa ne error

 ; inc
 ldi r1 0x55
 ldi r2 0x59
 inc r1
 inc r1
 inc r1
 inc r1
 mov r0 r1 
 cmp r2
 jmpa ne error

 ldi r0 0x27
 ldi r1 0x26
 ldi r2 0x26
 ldi r3 0x26
 ldi r4 0x26
 ldi r5 0x26
 ldi r6 0x26
 ldi r7 0x26

 inc r1
 inc r2
 inc r3
 inc r4
 inc r5
 inc r6
 inc r7

 cmp r1
 jmpa ne error
 cmp r2
 jmpa ne error
 cmp r3
 jmpa ne error
 cmp r4
 jmpa ne error
 cmp r5
 jmpa ne error
 cmp r6
 jmpa ne error
 cmp r7
 jmpa ne error

 ; dec 
 ldi r1 0x59
 ldi r2 0x55
 dec r1
 dec r1
 dec r1
 dec r1
 mov r0 r1
 cmp r2
 jmpa ne error
 
 ldi r0 0x25
 ldi r1 0x26
 ldi r2 0x26
 ldi r3 0x26
 ldi r4 0x26
 ldi r5 0x26
 ldi r6 0x26
 ldi r7 0x26
 
 dec r1
 dec r2
 dec r3
 dec r4
 dec r5
 dec r6
 dec r7
 
 cmp r1
 jmpa ne error
 cmp r2
 jmpa ne error
 cmp r3
 jmpa ne error
 cmp r4
 jmpa ne error
 cmp r5
 jmpa ne error
 cmp r6
 jmpa ne error
 cmp r7
 jmpa ne error

 ; inca/deca 
 pmov a1 0x1234
 pmov a2 0x1234
 pmov a3 0x1234

 inca a1
 inca a1
 deca a1
 deca a1
 deca a1

 inca a2
 inca a2
 deca a2
 deca a2
 deca a2
 
 inca a3
 inca a3
 deca a3
 deca a3
 deca a3
 
 ldi r0 0x33
 cmp r2
 jmpa ne error
 cmp r4
 jmpa ne error
 cmp r6
 jmpa ne error

 ldi r0 0x12
 cmp r3 
 jmpa ne error
 cmp r5
 jmpa ne error
 cmp r7
 jmpa ne error
 
 pmov a0 0x1234
 inca a0
 inca a0
 deca a0
 deca a0
 deca a0
 cmp r2
 jmpa ne error
 mov r0 r1
 cmp r3
 jmpa ne error
 
 jmpa al finish
error:
  ldi r0 0xa2
  sta r0 0x1234
  jmpr al skip

finish:
  ldi r0 0x55
  sta r0 0xffff

skip:
  nop
  nop
  end
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -