📄 example_asm.txt
字号:
;----------------------------------- ; 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 + -