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

📄 flags.asm

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

 ;-----------------------------
 ; Test for flags 
 ;-----------------------------

 org 0x0000

 ; add
 ldi r0 0x00
 wrps
 ldi r0 0xaa
 ldi r1 0x56
 ldi r2 0x03
 add r1
 rdps
 cmp r2
 jmpa ne error

 ldi r0 0x00
 wrps
 ldi r0 0x55
 ldi r1 0x55
 ldi r2 0x0c
 add r1
 rdps
 cmp r2
 jmpa ne error

 ; adc
 ldi r0 0x00
 wrps
 ldi r0 0xaa
 ldi r1 0x56
 ldi r2 0x03
 adc r1
 rdps
 cmp r2
 jmpa ne error
 
 ldi r0 0x00
 wrps
 ldi r0 0x55
 ldi r1 0x55
 ldi r2 0x0c
 adc r1
 rdps
 cmp r2
 jmpa ne error

 ; sub 
 ldi r0 0x00
 wrps
 ldi r0 0xaa
 ldi r1 0x56
 ldi r2 0x02
 sub r1
 rdps
 cmp r2
 jmpa ne error
 
 ldi r0 0x00
 wrps
 ldi r0 0x55
 ldi r1 0x55
 ldi r2 0x03
 sub r1
 rdps
 cmp r2
 jmpa ne error

 ;subr
 ldi r0 0x00
 wrps
 ldi r0 0x56
 ldi r1 0xaa
 ldi r2 0x02
 subr r1
 rdps
 cmp r2
 jmpa ne error
 
 ldi r0 0x00
 wrps
 ldi r0 0x55
 ldi r1 0x55
 ldi r2 0x03
 subr r1
 rdps
 cmp r2
 jmpa ne error

 ;sbc
 ldi r0 0x00
 wrps
 ldi r0 0xaa
 ldi r1 0x56
 ldi r2 0x02
 sbc r1
 rdps
 cmp r2
 jmpa ne error
 
 ldi r0 0x00
 wrps
 ldi r0 0x55
 ldi r1 0x55
 ldi r2 0x03
 sbc r1
 rdps
 cmp r2
 jmpa ne error

 ;inc
 ldi r0 0x00
 wrps
 ldi r1 0x56
 ldi r2 0x00
 inc r1
 rdps
 cmp r2
 jmpa ne error
 
 ldi r0 0x00
 wrps
 ldi r1 0x7f
 ldi r2 0x0c
 inc r1
 rdps
 cmp r2
 jmpa ne error

 ldi r0 0x04
 wrps
 ldi r1 0xff
 ldi r2 0x03
 inc r1
 rdps
 cmp r2
 jmpa ne error

 ;dec
 ldi r0 0x00
 wrps
 ldi r1 0x56
 ldi r2 0x02
 dec r1
 rdps
 cmp r2
 jmpa ne error
 
 ldi r0 0x00
 wrps
 ldi r1 0x00
 ldi r2 0x0c
 dec r1
 rdps
 cmp r2
 jmpa ne error
 
 ldi r0 0x04
 wrps
 ldi r1 0xff
 ldi r2 0x06
 dec r1
 rdps
 cmp r2
 jmpa ne error

 ldi r0 0x04
 wrps
 ldi r1 0x01
 ldi r2 0x03
 dec r1
 rdps
 cmp r2
 jmpa ne error

 ; xor
 ldi r0 0x00
 wrps
 ldi r0 0xaa
 ldi r1 0x55
 ldi r2 0x04
 xor r1
 rdps
 cmp r2
 jmpa ne error

 ldi r0 0x00
 wrps
 ldi r0 0xaa
 ldi r1 0xaa
 ldi r2 0x01
 xor r1
 rdps
 cmp r2
 jmpa ne error

 ldi r0 0x1f
 wrps
 ldi r0 0xaa
 ldi r1 0x55
 ldi r2 0x1e
 xor r1
 rdps
 cmp r2
 jmpa ne error

 ;not
 ldi r0 0x00
 wrps
 ldi r1 0x00
 ldi r2 0x04
 not r1
 rdps
 cmp r2
 jmpa ne error

 ldi r0 0x1a
 wrps
 ldi r2 0xff 
 ldi r1 0x1b
 not r2
 rdps
 cmp r1
 jmpa ne error

 ; shr 
 ldi r0 0x00
 wrps
 ldi r2 0xaa 
 ldi r1 0x00
 shr r2
 rdps
 cmp r1
 jmpa ne error

 ldi r0 0x18
 wrps
 ldi r3 0x36 
 ldi r1 0x18
 shr r3
 rdps
 cmp r1
 jmpa ne error

 ldi r0 0x18
 wrps
 ldi r4 0x55 
 ldi r1 0x1a
 shr r4
 rdps
 cmp r1
 jmpa ne error

 ldi r0 0x18
 wrps
 ldi r4 0x01
 ldi r1 0x1b
 shr r4
 rdps
 cmp r1
 jmpa ne error

 ; shl 
 ldi r0 0x18
 wrps
 ldi r5 0x36 
 ldi r1 0x18
 shl r5
 rdps
 cmp r1
 jmpa ne error

 ldi r0 0x00
 wrps
 ldi r5 0x55
 ldi r1 0x04
 shl r5
 rdps
 cmp r1
 jmpa ne error

 ldi r0 0x00
 wrps
 ldi r5 0x80
 ldi r1 0x03
 shl r5
 rdps
 cmp r1
 jmpa ne error

 ; asr
 ldi r0 0x00
 wrps
 ldi r0 0xaa
 ldi r1 0x04
 asr 
 rdps
 cmp r1
 jmpa ne error
 
 ldi r0 0x18
 wrps
 ldi r0 0x36
 ldi r1 0x18
 asr 
 rdps
 cmp r1
 jmpa ne error
 
 ldi r0 0x18
 wrps
 ldi r0 0x55
 ldi r1 0x1a
 asr 
 rdps
 cmp r1
 jmpa ne error
 
 ldi r0 0x18
 wrps
 ldi r0 0x01
 ldi r1 0x1b
 asr 
 rdps
 cmp r1
 jmpa ne error

 ; ror
 ldi r0 0x00
 wrps
 ldi r0 0xaa
 ldi r1 0x00
 ror
 rdps
 cmp r1
 jmpa ne error
 
 ldi r0 0x18
 wrps
 ldi r0 0x36
 ldi r1 0x18
 ror
 rdps
 cmp r1
 jmpa ne error
 
 ldi r0 0x18
 wrps
 ldi r0 0x55
 ldi r1 0x1e
 ror
 rdps
 cmp r1
 jmpa ne error
 
 ldi r0 0x18
 wrps
 ldi r0 0x01
 ldi r1 0x1e
 ror 
 rdps
 cmp r1
 jmpa ne error

 ; rorc
 ldi r0 0x00
 wrps
 ldi r0 0xaa
 ldi r1 0x00
 rorc
 rdps
 cmp r1
 jmpa ne error
 
 ldi r0 0x1a
 wrps
 ldi r0 0x36
 ldi r1 0x1c
 rorc
 rdps
 cmp r1
 jmpa ne error
 
 ldi r0 0x18
 wrps
 ldi r0 0x55
 ldi r1 0x1a
 rorc
 rdps
 cmp r1
 jmpa ne error
 
 ldi r0 0x18
 wrps
 ldi r0 0x01
 ldi r1 0x1b
 rorc
 rdps
 cmp r1
 jmpa ne error

 ; inca
 ldi r0 0x00
 wrps
 pmov a1 0x0000
 ldi r1 0x00
 inca a1 
 rdps
 cmp r1
 jmpa ne error

 ldi r0 0x00
 wrps
 pmov a1 0xffff
 ldi r1 0x03
 inca a1 
 rdps
 cmp r1
 jmpa ne error

 ldi r0 0x18
 wrps
 pmov a1 0x7fff
 ldi r1 0x1c
 inca a1 
 rdps
 cmp r1
 jmpa ne error

 ; deca
 ldi r0 0x00
 wrps
 pmov a1 0x0000
 ldi r1 0x04
 deca a1 
 rdps
 cmp r1
 jmpa ne error
 
 ldi r0 0x00
 wrps
 pmov a1 0xffff
 ldi r1 0x06
 deca a1 
 rdps
 cmp r1
 jmpa ne error
 
 ldi r0 0x18
 wrps
 pmov a1 0x8000
 ldi r1 0x1a
 deca a1 
 rdps
 cmp r1
 jmpa ne error

 ; make sure the following instructions doesn't affect the flags
 ldi r0 0x1f
 ldi r2 0x1f
 ldi r1 0x3a
 wrps
 ldi r0 0x00
 pmov a2 0x3000
 str a2
 sto a2 0x03
 sta r0 0x3005
 ldr a2
 ldo a2 0x03
 lda r0 0x3005
 umul r1
 ldi r1 0x32
 udiv r1
 psh r0
 pop r0
 jmpr al next_ins1
next_ins1:
 jmpa al next_ins2 
next_ins2:
 mov r0 r2
 mov r2 r0
 rdps
 cmp r2
 jmpa ne error

 ldi r0 0x00
 ldi r2 0x00
 ldi r1 0x3a
 wrps
 ldi r0 0x00
 pmov a2 0x3000
 str a2
 sto a2 0x03
 sta r0 0x3005
 ldr a2
 ldo a2 0x03
 lda r0 0x3005
 umul r1 
 ldi r1 0x32
 udiv r1
 psh r0
 pop r0
 jmpr al next_ins3
next_ins3: 
 jmpa al next_ins4
next_ins4:
 mov r0 r2
 mov r2 r0
 rdps
 cmp r2
 jmpa ne error


 jmpr 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 + -