📄 example.asm
字号:
;-----------------------------------
; AN EXAMPLE ASSEMBLER PROGRAM
;-----------------------------------
;----------------------------------------------
; define all the constants before using them
;----------------------------------------------
define off 0x00
define on 0xff
define bad 0xaa
define good 0x55
define rst_vector 0x1000
define nmi_vector 0x1500
define div0_vector 0x1700
define int3_vector 0x1800
;--------------------------------------------------------------
; vector table - (4 bytes per vector, jmpa takes only 3 bytes)
;--------------------------------------------------------------
org 0x0000 ; reset
jmpa al 0x1000
org 0x0004 ; nmi
jmpa al nmi_vector
org 0x0008 ; div 0
jmpa al div0_vector
org 0x000c ; int 3
jmpa al int3_vector
;-----------------------
; nmi service routine
;-----------------------
org nmi_vector
psh r1
psh r2
ldi r1 on
ldi r2 off
lda r0 0xfff0
cmp r1
jmpr eq turn_off
sta r1 0xfff0
jmpr al s_end
turn_off:
sta r2 0xfff0
s_end:
pop r2
pop r1
ret
;------------------------
; some xyz subroutine
;------------------------
org 0x3600
some_xyz:
ldi r0 0x23
sta r0 0xffe0
ret
;-----------------------------
; move_string subroutine
;------------------------------
org 0x4000
move_string:
psh r1
psh r4
psh r5
psh r6
psh r7
pmov a2 src_str ; source string
pmov a3 dst_str ; destination string
ldi r1 0x00 ; end of the string
loop_moves_sub:
ldr a2
cmp r1
jmpr eq end_moves_sub
str a3
inca a2
inca a3
jmpr al loop_moves_sub
end_moves_sub:
pop r7
pop r6
pop r5
pop r4
pop r1
ret
;------------------
; main program
;------------------
org rst_vector
ldi r0 0xaa
ldi r1 0xaa
ldi r2 0xff
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
jmps al some_xyz
ldi r0 good
jmpa al finish
;-------------------
; define the data
;-------------------
src_str:
dcb "source_string"
dcb 0x00
dst_str:
dcb "destin_string"
dcb 0x00
no_strings_attached:
dcb "this is string one"
dcb "this is string two"
dcb "THIS IS STRING three"
other_bytes1:
dcb 0x21 0x34 0x44 0x78 0xff
other_bytes2:
dcb 12 255 145 0
table1:
dmem 10 ; allocate 10 bytes and initialized it with 0
table2:
dmem 300(0x11) ; allocate 300 byes and initialize it with 0x11
dmem 22(02) ; allocate 22 bytes and initialize it with 02
dmem 0x10(0xff) ; allocate 16 bytes and initialize it with 0xff
; back to program
error:
ldi r0 bad
finish:
sta r0 0xffff
end ; not necessary to have a "end" directive. End of file also represents
; end of program.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -