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

📄 extra.asm

📁 MCS51系列单片机的汇编器
💻 ASM
📖 第 1 页 / 共 4 页
字号:
        mov     a, r0        ajmp    phexsp;skip the next instructionssskip:	mov	r0, #23ssskip2:acall	space_h	djnz	r0, ssskip2        mov     dptr,#sskip1        acall   pstr_h	mov	a, sp	add	a, #249	mov	r0, a		;set r0 to point to pc on stack	mov	a, @r0	mov	lastpc, r6	;keep r6/r7 safe in lastpc	mov	r6, a		;put user's pc into r6/r7	inc	r0	mov	a, @r0	mov	(lastpc+1), r7	mov	r7, a	mov	a, r2	push	acc	mov	a, r3	push	acc	mov	a, r4	push	acc        setb    psw.1           ;tell it to use a compact format        acall   disasm		;run disasm to show 'em what was skipped	pop	acc	mov	r4, a	pop	acc	mov	r3, a	pop	acc	mov	r2, a        mov     a, sp        add     a, #249        mov     r0, a           ;set r0 to point to pc on stack	mov	a, r6        mov     r6, lastpc	;restore r6/r7	mov	lastpc, a	;update lastpc with next inst addr	mov	@r0, a		;also update user's pc!!	inc	r0	mov	a, r7	mov	r7, (lastpc+1)	mov	(lastpc+1), a	mov	@r0, a	ajmp	step1sschacc:        mov     a, sp	add	a, #251	mov	r0, a		;r0 points to acc on stack        mov     dptr, #chaccs1        acall   pstr_h        lcall   ghex        jc      chacc2	jb	psw.5, chacc2        mov     @r0, a        acall   newline_h        ajmp    step1chacc2: mov     dptr, #abort        acall   pstr_h        ajmp    step1;stuff some of the disassembler tables, strings, etc since we have a;bit of space before the beginning of the editor command code       ;opcode offset table (gives #bytes for the instruction       ;and the number of the routine to print the operands)opot1:  .db     0xAD, 0x06, 0x6F, 0x39, 0x39, 0x46, 0x49, 0x49 ;0        .db     0x63, 0x06, 0x6F, 0x39, 0x39, 0x46, 0x49, 0x49 ;1        .db     0x63, 0x06, 0xAD, 0x39, 0x16, 0x0E, 0x11, 0x11 ;2        .db     0x63, 0x06, 0xAD, 0x39, 0x16, 0x0E, 0x11, 0x11 ;3        .db     0x66, 0x06, 0x1A, 0x1F, 0x16, 0x0E, 0x11, 0x11 ;4        .db     0x66, 0x06, 0x1A, 0x1F, 0x16, 0x0E, 0x11, 0x11 ;5        .db     0x66, 0x06, 0x1A, 0x1F, 0x16, 0x0E, 0x11, 0x11 ;6        .db     0x66, 0x06, 0x22, 0x69, 0x16, 0x1F, 0x92, 0x92 ;7        .db     0x66, 0x06, 0x22, 0xA1, 0x4D, 0x83, 0x86, 0x86 ;8        .db     0x9B, 0x06, 0x96, 0x9D, 0x16, 0x0E, 0x11, 0x11 ;9        .db     0x26, 0x06, 0x22, 0x5D, 0x4D, 0xAD, 0x8E, 0x8E ;A        .db     0x26, 0x06, 0x42, 0x3D, 0x2F, 0x2B, 0x37, 0x37 ;B        .db     0x46, 0x06, 0x42, 0x3D, 0x39, 0x0E, 0x11, 0x11 ;C        .db     0x46, 0x06, 0x42, 0x3D, 0x39, 0x57, 0x11, 0x11 ;D        .db     0xA5, 0x06, 0x11, 0x11, 0x39, 0x0E, 0x11, 0x11 ;E        .db     0xA9, 0x06, 0x89, 0x89, 0x39, 0x1A, 0x89, 0x89 ;Fmnot1:  ;mnunonic offset table (gives offset into above table)        .db     0x5A, 0x0E, 0x48, 0x73  ;nop, ajmp, ljmp, rr        .db     0x2B, 0x2B, 0x2B, 0x2B  ;inc, inc, inc, inc        .db     0x30, 0x00, 0x43, 0x75  ;jbc, acall, lcall rrc        .db     0x21, 0x21, 0x21, 0x21  ;        .db     0x2E, 0x0E, 0x67, 0x6E  ; etc...        .db     0x06, 0x06, 0x06, 0x06  ;        .db     0x38, 0x00, 0x6A, 0x70  ;        .db     0x0A, 0x0A, 0x0A, 0x0A  ;        .db     0x33, 0x0E, 0x5D, 0x5D  ;        .db     0x5D, 0x5D, 0x5D, 0x5D  ;        .db     0x3B, 0x00, 0x12, 0x12  ;        .db     0x12, 0x12, 0x12, 0x12  ;        .db     0x41, 0x0E, 0x8F, 0x8F  ;        .db     0x8F, 0x8F, 0x8F, 0x8F  ;        .db     0x3E, 0x00, 0x5D, 0x35  ;        .db     0x4C, 0x4C, 0x4C, 0x4C  ;        .db     0x7C, 0x0E, 0x12, 0x4F  ;        .db     0x24, 0x4C, 0x4C, 0x4C  ;        .db     0x4C, 0x00, 0x4C, 0x4F  ;        .db     0x80, 0x80, 0x80, 0x80  ;        .db     0x5D, 0x0E, 0x4C, 0x2B  ;        .db     0x57, 0x92, 0x4C, 0x4C  ;        .db     0x12, 0x00, 0x1C, 0x1C  ;        .db     0x15, 0x15, 0x15, 0x15  ;        .db     0x63, 0x0E, 0x19, 0x19  ;        .db     0x84, 0x88, 0x88, 0x88  ;        .db     0x60, 0x00, 0x78, 0x78  ;        .db     0x1F, 0x27, 0x8B, 0x8B  ;        .db     0x53, 0x0E, 0x53, 0x53  ;        .db     0x19, 0x4C, 0x4C, 0x4C  ;        .db     0x53, 0x00, 0x53, 0x53  ;        .db     0x1C, 0x4C, 0x4C, 0x4C  ;mnot2:  .db     0x2B, 0x21, 0x06, 0x0A  ;inc, dec, add, addc        .db     0x5D, 0x12, 0x8F, 0x4C  ;orl, anl, xlr, mov        .db     0x4C, 0x80, 0x4C, 0x15  ;mov, subb, mov, cjne        .db     0x88, 0x27, 0x4C, 0x4C  ;xch, djnz, mov, mov;---------------------------------------------------------;;                                                         ;;                  External Memory Editor                 ;;                                                         ;;---------------------------------------------------------;;register usage:; R4,    Flags:;         bit0: 0=display CODE memory, 1=display DATA memory;         bit1: 0=editing disabled, 1=editing enabled;         bit2: 0=editing in hex, 1=editing in ascii;         bit3: 0=normal, 1=in middle of hex entry (value in r5); R6/R7, current memory location;.org	locat+0x800.db	0xA5,0xE5,0xE0,0xA5	;signiture.db	254,vtedit_key,0,0	;id (254=user installed command).db	0,0,0,0			;prompt code vector.dB	0,0,0,0			;reserved.db	0,0,0,0			;reserved.db	0,0,0,0			;reserved.db	0,0,0,0			;user defined.db	255,255,255,255		;length and checksum (255=unused).db	"Memory Editor (VT100)",0.org	locat+0x0840            ;executable code begins here	mov	r4, #0	acall	redrawmain:	mov	a, r4	clr	acc.3	mov	r4, amain2:	lcall   cin_filter	acall	input_ck_2ndcmd1:	cjne	a, #27, cmd2		;quit	ajmp	quitcmd2:	cjne	a, #11, cmd3		;up	ajmp	cmd_upcmd3:	cjne	a, #10, cmd4		;down	ajmp	cmd_downcmd4:	cjne	a, #8, cmd5		;left	ajmp	cmd_leftcmd5:	cjne	a, #21, cmd6		;right	ajmp	cmd_rightcmd6:	cjne	a, #12, cmd7		;redraw	acall	redraw	ajmp	maincmd7:	cjne	a, #17, cmd8		;quit	ajmp	quitcmd8:	cjne	a, #3, cmd9		;code memory	mov	a, r4	anl	a, #11111110b	mov	r4, a	acall	cursor_home	mov	dptr, #str_code	acall	pstr_hh	acall	redraw_data	ajmp	maincmd9:	cjne	a, #4, cmd10		;data memory	mov	a, r4	orl	a, #00000001b	mov	r4, a	acall	cursor_home	mov	dptr, #str_data	acall	pstr_hh	acall	redraw_data	ajmp	maincmd10:	cjne	a, #7, cmd11		;goto memory loc	ajmp	cmd_gotocmd11:	cjne	a, #5, cmd12		;toggle editing	ajmp	cmd_editcmd12:	cjne	a, #6, cmd13		;fill memory	ajmp	cmd_fillcmd13:	cjne	a, #1, cmd14		;edit in ascii	mov	a, r4	jnb	acc.1, main	setb	acc.2	mov	r4, a	acall	erase_commands	acall	print_commands	acall	redraw_cursor	ajmp	maincmd14:	cjne	a, #24, cmd15		;edit in hex        mov     a, r4        jnb     acc.1, main        clr     acc.2        mov     r4, a        acall   erase_commands        acall   print_commands        acall   redraw_cursor        ajmp    maincmd15:	cjne    a, #25, cmd16           ;page up	ajmp	cmd_pgupcmd16:	cjne    a, #26, cmd17           ;page down	ajmp	cmd_pgdowncmd17:cmd_data:	;the input character wasn't any particular command, so		;maybe it's some input data being typed for edit mode	mov	b, a			;keep a copy of user data in b	mov	a, r4	jb	acc.1, cmd_data2cmd_abort:	ajmp	main			;ignore if not in edit modecmd_data2:	jnb	acc.2, input_hexinput_ascii:	mov	a, b	acall	ascii_only	cjne	a, b, cmd_abort		;check that input is an ascii char	mov	dph, r7	mov	dpl, r6	lcall	smart_wr		;write the char to memory	ajmp	cmd_rightinput_hex:	mov	a, b	lcall	upper	lcall	asc2hex	jc	cmd_abort		;ignore if not hex	mov	r0, a			;keep hex value of input in r0        mov     dph, r7			;load dptr with address        mov     dpl, r6	mov	a, r4	jb	acc.3, input_hex_2ndinput_hex_1st:	mov	a, r0	mov	r5, a	mov	a, r4	setb	acc.3		;remember that we're waiting for 2nd char	mov	r4, a	acall	redraw_cursor	ajmp	main2input_hex_2nd:	mov	a, r5			;get data from memory	swap	a			;shift nibbles	anl	a, #11110000b		;just in case	add	a, r0			;add in this input to lower part	lcall	smart_wr		;write back to memory	mov	a, r4	clr	acc.3	mov	r4, a	ajmp	cmd_rightinput_ck_2nd:	;the main input routine will always call here when a new	;byte is entered... so we can do something special if we	;were waiting for the second character and it is not a	;legal hex character	push	acc	mov	a, r4	jb	acc.1, inck2d	;if editing is disabled, don't do anything	clr	acc.3inck2b:	mov	r4, ainck2c:	pop	acc	retinck2d:	jnb	acc.3, inck2b	;if we get here, we were actually waiting for the 2nd char	pop	acc	push	acc	lcall	upper	lcall	asc2hex	jnc	inck2c		;proceed normally if it is valid	;if we get here, we did not get a hex legal char	pop	acc	push	acc	cjne	a, #esc_char, inck2e        mov     a, r4        clr     acc.3        mov     r4, a        acall   redraw_cursor	pop	acc	pop	acc		;don't return and do the quit cmd	pop	acc		;just quit this entry and wait for next cmd	ajmp	maininck2e: mov     dph, r7                 ;load dptr with address        mov     dpl, r6	mov	a, r5        lcall   smart_wr                ;write to memory	mov	a, r4	clr	acc.3	mov	r4, a	acall	redraw_cursor	sjmp	inck2c; R4,    Flags:;         bit0: 0=display CODE memory, 1=display DATA memory;         bit1: 0=editing disabled, 1=editing enabled;         bit2: 0=editing in hex, 1=editing in ascii;         bit3: 0=normal, 1=in middle of hex entry (value in r5)cmd_fill:	mov	a, r4	anl	a, #00000010b	jnz	cmd_fill_ok	ajmp	main			;don't allow if not in editing modecmd_fill_ok:	acall	erase_commands        mov     a, r4        push    acc	mov	dptr, #fill_prompt1	acall	pcstr_hh	lcall	ghex16	jc	cmd_fill_abort	jb	psw.5, cmd_fill_abort	mov	r0, dpl	mov	r1, dph	mov	dptr, #fill_prompt2	acall	pstr_hh	lcall	ghex16	jc	cmd_fill_abort	jb	psw.5, cmd_fill_abort	mov	r4, dpl	mov	r5, dph	mov	dptr, #fill_prompt3	acall	pcstr_hh	lcall	ghex	jc	cmd_fill_abort	jb	psw.5, cmd_fill_abort	mov	r2, a	mov	a, r4	mov	r6, a	mov	a, r5	mov	r7, a	pop	acc	mov	r4, a	mov	dpl, r0	mov	dph, r1	;now r4 is restored to its normal value, dptr holds the	;first location to fill, and r6/r7 holds the last location to	;fill, and r2 has the fill value.cmd_fill_loop:	mov	a, r2	lcall	smart_wr	mov	a, r6	cjne	a, dpl, cmd_fill_next	mov	a, r7	cjne	a, dph, cmd_fill_next	;when we get here, we're done!	acall	erase_commands	acall	print_commands	acall	redraw_data	ajmp	maincmd_fill_next:	inc	dptr	sjmp	cmd_fill_loopcmd_fill_abort:        pop     acc        mov     r4, a        acall   erase_commands        acall   print_commands	acall	redraw_cursor	ajmp	mainfill_prompt1:        .db     "Fill",31,131,"; First: ",0fill_prompt2:        .db     "  Last: ",0fill_prompt3:        .db     " ",168,": ",0 cmd_edit:	acall	erase_commands	mov	a, r4	xrl	a, #00000010b	mov	r4, a        acall   print_commands        acall   redraw_cursor        ajmp    maincmd_goto:	acall	erase_commands	mov	dptr, #goto_prompt	acall	pcstr_hh	mov	a, r4	push	acc	lcall	ghex16	pop	acc	mov	r4, a	jc	cmdgt_abort	jb	psw.5, cmdgt_abort        mov     r6, dpl        mov     r7, dph        acall   cursor_home        mov     a, #20        acall   cursor_down	acall	print_commands	acall	redraw_data	ajmp	maincmdgt_abort:        acall   cursor_home        mov     a, #20        acall   cursor_down	acall	print_commands	acall	redraw_cursor	ajmp	maingoto_prompt:	.db	31,131,31,129,": ",0cmd_up:	acall	blank_it        mov     a, r6        clr     c        subb    a, #16        mov     r6, a        mov     a, r7        subb    a, #0        mov     r7, a	mov	a, r6	cpl	a	anl	a, #11110000b	jz	cmd_up_scroll        mov     a, #1        acall   cursor_up        acall   invert_it        ajmp    maincmd_up_scroll:	acall	redraw_data	ajmp	maincmd_pgup:	dec	r7	acall	redraw_data	ajmp	maincmd_pgdown:	inc	r7	acall	redraw_data	ajmp	maincmd_down:	acall	blank_it        mov     a, r6        add     a, #16        mov     r6, a        mov     a, r7        addc    a, #0        mov     r7, a	mov	a, r6	anl	a, #11110000b	jz	cmd_down_scroll	mov	a, #1	acall	cursor_down	acall	invert_it	ajmp	maincmd_down_scroll:	acall	redraw_data	ajmp	maincmd_left:	acall	blank_it	mov	a, #3	acall	cursor_left	mov	a, r6	clr	c	subb	a, #1	mov	r6, a	mov	a, r7	subb	a, #0	mov	r7, a	mov	a, r6	orl	a, #11110000b

⌨️ 快捷键说明

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