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

📄 anasm.asm

📁 这是汇编器的源代码
💻 ASM
📖 第 1 页 / 共 5 页
字号:

	jmp near .end
.op_mov@seg_reg@var@no_offset
	mov al,1
	call add_offset2offset_table

	add word[pointer_write],2
	add word[act_offset],2

	jmp near .end
.op_mov@seg_reg@reg
	mov si,word[pointer_write]

	shl dl,3
	or dl,al
	or dl,11000000b
	mov byte[gs:si],8eh
	inc si
	mov byte[gs:si],dl
	add word[pointer_write],2
	add word[act_offset],2

	jmp near .end
.op_mov@reg_var_byte
	mov dl,al

	cmp dl,0xff
	je near .op_mov@reg_var_byte@var

	mov si,buffer_bef2
	call translate_8bit_reg
	cmp al,0xff
	jne near .op_mov@reg_var_byte@reg

	call format_numbers_8bit
	jnc near .op_mov@reg_var_byte@num

	mov di,op_byte
	cmpsd
	jne near .error_opcode

	call test_clips
	and al,al
	jnz near .error_no_clips

	call format_address_16bit
	cmp ax,0xffff
	jne .op_mov@reg_var_byte@addr@var

	call look4label
	and al,al
	jnz near .error_label

	mov si,word[pointer_write]
	shl dl,3
	or dl,6
	mov byte[gs:si],8ah
	inc si
	mov byte[gs:si],dl
	inc si
	add word[pointer_write],2
	add word[act_offset],2

	cmp bx,-1
	je .op_mov@reg_var_byte@no_offset

	call .asm@offset

	jmp near .end
.op_mov@reg_var_byte@no_offset
	mov al,1
	call add_offset2offset_table

	add word[pointer_write],2
	add word[act_offset],2

	jmp near .end
.op_mov@reg_var_byte@addr@var
	mov si,word[pointer_write]
	mov byte[gs:si],al
	inc si
	mov byte[gs:si],8ah
	inc si

	shl dl,3
	or dl,ah
	mov byte[gs:si],dl
	add word[pointer_write],3
	add word[act_offset],3

	jmp near .end
.op_mov@reg_var_byte@var
	add si,4
	call test_clips
	and al,al
	jnz near .error_no_clips

	call format_address_16bit
	cmp ax,0xffff
	jne .op_mov@reg_var_byte@addr@reg

	call look4label
	and al,al
	jnz near .error_label

	mov si,buffer_bef2
	call translate_8bit_reg
	cmp al,0xff
	jne .op_mov@reg_var_byte@var@reg

	call format_numbers_8bit
	jc near .error_opcode

	mov si,word[pointer_write]
	mov word[gs:si],0x06c6
	add si,2
	add word[pointer_write],2
	add word[act_offset],2
	push ax

	cmp bx,-1
	je near .asm_set5@var_byte@no_offset
	jmp near .asm_set5@var_byte@offset
.op_mov@reg_var_byte@addr@reg
	mov bx,ax
	mov si,buffer_bef2
	call translate_8bit_reg
	cmp al,0xff
	je near .error_opcode

	mov si,word[pointer_write]
	mov byte[gs:si],bl
	inc si
	mov byte[gs:si],88h
	inc si

	shl al,3
	or al,bh
	mov byte[gs:si],al
	add word[pointer_write],3
	add word[act_offset],3

	jmp near .end
.op_mov@reg_var_byte@var@reg
	shl al,3
	or al,00000110b
	mov si,word[pointer_write]
	mov byte[gs:si],88h
	inc si
	mov byte[gs:si],al
	inc si
	add word[pointer_write],2
	add word[act_offset],2

	cmp bx,-1
	je .op_mov@reg_var_byte@var@no_offset

	call .asm@offset

	jmp near .end
.op_mov@reg_var_byte@var@no_offset
	mov al,1
	call add_offset2offset_table

	add word[pointer_write],2
	add word[act_offset],2

	jmp near .end
.op_mov@reg_var_byte@num
	mov si,word[pointer_write]
	add dl,0xb0
	mov byte[gs:si],dl
	inc si
	mov byte[gs:si],al
	add word[pointer_write],2
	add word[act_offset],2

	jmp near .end
.op_mov@reg_var_byte@reg
	mov si,word[pointer_write]

	shl dl,3
	or dl,al
	or dl,11000000b
	mov byte[gs:si],8ah
	inc si
	mov byte[gs:si],dl
	add word[pointer_write],2
	add word[act_offset],2

	jmp near .end
.op_mov@reg_var_word
	mov dl,al

	mov si,buffer_bef2
	call translate_seg_reg
	cmp al,0xff
	jne near .op_mov@reg_var_word@seg

	mov si,buffer_bef1
	cmp dl,0xff
	je near .op_mov@reg_var_word@var

	mov si,buffer_bef2
	call translate_16bit_reg
	cmp al,0xff
	jne near .op_mov@reg_var_word@reg

	call format_numbers_16bit
	jnc near .op_mov@reg_var_word@num

	push si
	mov di,op_word
	cmpsd
	pop si
	jne near .op_mov@reg_var_word@var_num

	add si,4

	call test_clips
	and al,al
	jnz near .error_no_clips

	call format_address_16bit
	cmp ax,0xffff
	jne near .op_mov@reg_var_word@addr@var

	call look4label
	and al,al
	jnz near .error_label

	mov si,word[pointer_write]
	shl dl,3
	or dl,6
	mov byte[gs:si],8bh
	inc si
	mov byte[gs:si],dl
	inc si
	add word[pointer_write],2
	add word[act_offset],2

	cmp bx,-1
	je .op_mov@reg_var_word@no_offset

	call .asm@offset

	jmp near .end
.op_mov@reg_var_word@no_offset
	mov al,1
	call add_offset2offset_table

	add word[pointer_write],2
	add word[act_offset],2

	jmp near .end
.op_mov@reg_var_word@var_num
	call look4label
	and al,al
	jnz near .error_label

	mov si,word[pointer_write]
	add dl,0xb8
	mov byte[gs:si],dl
	inc si
	inc word[pointer_write]
	inc word[act_offset]

	cmp bx,-1
	je .op_mov@reg_var_word@var_num@no_offset

	call .asm@offset

	jmp near .end
.op_mov@reg_var_word@var_num@no_offset
	mov al,1
	call add_offset2offset_table

	add word[pointer_write],2
	add word[act_offset],2

	jmp near .end
.op_mov@reg_var_word@addr@var
	mov si,word[pointer_write]
	mov byte[gs:si],al
	inc si
	mov byte[gs:si],8bh
	inc si

	shl dl,3
	or dl,ah
	mov byte[gs:si],dl
	add word[pointer_write],3
	add word[act_offset],3

	jmp near .end
.op_mov@reg_var_word@var
	add si,4
	call test_clips
	and al,al
	jnz near .error_no_clips

	call format_address_16bit
	cmp ax,0xffff
	jne .op_mov@reg_var_word@addr

	call look4label
	and al,al
	jnz near .error_label

	mov si,buffer_bef2
	call translate_16bit_reg
	cmp al,0xff
	jne .op_mov@reg_var_word@var@reg

	call format_numbers_16bit
	jc near .error_opcode

	mov si,word[pointer_write]
	mov word[gs:si],0x06c7
	add si,2
	add word[pointer_write],2
	add word[act_offset],2
	push ax

	cmp bx,-1
	je near .asm_set5@var_word@no_offset
	jmp near .asm_set5@var_word@offset
.op_mov@reg_var_word@addr
	mov bx,ax
	mov si,buffer_bef2
	call translate_16bit_reg
	cmp al,0xff
	je near .error_opcode

	mov si,word[pointer_write]
	mov byte[gs:si],bl
	inc si
	mov byte[gs:si],89h
	inc si

	shl al,3
	or al,bh
	mov byte[gs:si],al
	add word[pointer_write],3
	add word[act_offset],3

	jmp near .end
.op_mov@reg_var_word@var@reg
	shl al,3
	or al,00000110b
	mov si,word[pointer_write]
	mov byte[gs:si],89h
	inc si
	mov byte[gs:si],al
	inc si
	add word[pointer_write],2
	add word[act_offset],2

	cmp bx,-1
	je .op_mov@reg_var_word@reg@no_offset

	call .asm@offset

	jmp near .end
.op_mov@reg_var_word@reg@no_offset
	mov al,1
	call add_offset2offset_table

	add word[pointer_write],2
	add word[act_offset],2

	jmp near .end
.op_mov@reg_var_word@num
	mov si,word[pointer_write]
	add dl,0xb8
	mov byte[gs:si],dl
	inc si
	mov word[gs:si],ax
	add word[pointer_write],3
	add word[act_offset],3

	jmp near .end
.op_mov@reg_var_word@reg
	mov si,word[pointer_write]

	shl dl,3
	or dl,al
	or dl,11000000b
	mov byte[gs:si],8bh
	inc si
	mov byte[gs:si],dl
	add word[pointer_write],2
	add word[act_offset],2

	jmp near .end
.op_mov@reg_var_word@seg
	cmp dl,0xff
	jne .op_mov@reg_var_word@seg_reg
	mov dl,al

	mov si,buffer_bef1
	mov di,op_word
	cmpsd
	jne near .error_opcode

	call test_clips
	and al,al
	jnz near .error_no_clips

	call look4label
	and al,al
	jnz near .error_label

	mov si,word[pointer_write]
	shl dl,3
	or dl,6
	mov byte[gs:si],8ch
	inc si
	mov byte[gs:si],dl
	inc si
	add word[pointer_write],2
	add word[act_offset],2

	cmp bx,-1
	je .op_mov@reg_var_word@seg@no_offset

	call .asm@offset

	jmp near .end
.op_mov@reg_var_word@seg@no_offset
	mov al,1
	call add_offset2offset_table

	add word[pointer_write],2
	add word[act_offset],2

	jmp near .end
.op_mov@reg_var_word@seg_reg
	shl al,3
	or al,dl
	or al,11000000b

	mov si,word[pointer_write]
	mov byte[gs:si],8ch
	inc si
	mov byte[gs:si],al
	add word[pointer_write],2
	add word[act_offset],2

	jmp near .end
.op_mov@reg_var_dword
	mov dl,al

	cmp dl,0xff
	je near .op_mov@reg_var_dword@var

	mov si,buffer_bef2
	call translate_32bit_reg
	cmp al,0xff
	jne near .op_mov@reg_var_dword@reg

	call format_numbers_32bit
	jnc near .op_mov@reg_var_dword@num

	push si
	mov di,reg_dr
	cmpsw
	pop si
	je near .op_mov@reg_var_dword@reg_dr

	push si
	mov di,reg_cr
	cmpsw
	pop si
	je near .op_mov@reg_var_dword@reg_cr

	mov di,op_dword
	mov cx,5
	rep cmpsb
	jne near .error_opcode

	call test_clips
	and al,al
	jnz near .error_no_clips

	call format_address_16bit
	cmp ax,0xffff
	jne .op_mov@reg_var_dword@addr@var

	call look4label
	and al,al
	jnz near .error_label

	mov si,word[pointer_write]
	shl dl,3
	or dl,6
	mov word[gs:si],0x8b66
	add si,2
	mov byte[gs:si],dl
	inc si
	add word[pointer_write],3
	add word[act_offset],3

	cmp bx,-1
	je .op_mov@reg_var_dword@no_offset

	call .asm@offset

	jmp near .end
.op_mov@reg_var_dword@no_offset
	mov al,1
	call add_offset2offset_table

	add word[pointer_write],2
	add word[act_offset],2

	jmp near .end
.op_mov@reg_var_dword@addr@var
	mov si,word[pointer_write]
	mov byte[gs:si],al
	inc si
	mov word[gs:si],0x8b66
	add si,2

	shl dl,3
	or dl,ah
	mov byte[gs:si],dl
	add word[pointer_write],4
	add word[act_offset],4

	jmp near .end
.op_mov@reg_var_dword@reg_dr
	add si,2
	lodsb
	and al,al
	jz near .error_opcode
	cmp al,'7'
	jg near .error_opcode
	cmp al,'0'
	jl near .error_opcode
	push ax
	lodsb
	and al,al
	pop ax
	jnz near .error_opcode

	call ascii_char2hex

	shl al,3
	or al,dl
	or al,11000000b
	mov si,word[pointer_write]
	mov word[gs:si],0x210f
	add si,2
	mov byte[gs:si],al
	add word[pointer_write],3
	add word[act_offset],3

	jmp	near .end
.op_mov@reg_var_dword@reg_cr
	add si,2
	lodsb
	and al,al
	jz near .error_opcode
	cmp al,'4'
	jg near .error_opcode
	cmp al,'0'
	jl near .error_opcode
	push ax
	lodsb
	and al,al
	pop ax
	jnz near .error_opcode

	call ascii_char2hex

	shl al,3
	or al,dl
	or al,11000000b
	mov si,word[pointer_write]
	mov word[gs:si],0x200f
	add si,2
	mov byte[gs:si],al
	add word[pointer_write],3
	add word[act_offset],3

	jmp	near .end
.op_mov@reg_var_dword@var
	add si,5
	call test_clips
	and al,al
	jnz near .error_no_clips

	call format_address_16bit
	cmp ax,0xffff
	jne .op_mov@reg_var_dword@addr

	call look4label
	and al,al
	jnz near .error_label

	mov si,buffer_bef2
	call translate_32bit_reg
	cmp al,0xff
	jne .op_mov@reg_var_dword@var@reg

	call format_numbers_32bit
	jc near .error_opcode

	mov si,word[pointer_write]
	mov byte[gs:si],66h
	inc si
	mov word[gs:si],0x06c7
	add si,2
	add word[pointer_write],3
	add word[act_offset],3
	push eax

	cmp bx,-1
	je near .asm_set5@var_dword@no_offset
	jmp near .asm_set5@var_dword@offset
.op_mov@reg_var_dword@addr
	mov bx,ax
	mov si,buffer_bef2
	call translate_32bit_reg
	cmp al,0xff
	je near .error_opcode

	mov si,word[pointer_write]
	mov byte[gs:si],bl
	inc si
	mov word[gs:si],0x8966
	add si,2

	shl al,3
	or al,bh
	mov byte[gs:si],al
	add word[pointer_write],4
	add word[act_offset],4

	jmp near .end
.op_mov@reg_var_dword@var@reg
	shl al,3
	or al,00000110b
	mov si,word[pointer_write]
	mov word[gs:si],0x8966
	add si,2
	mov byte[gs:si],al
	inc si
	add word[pointer_write],3
	add word[act_offset],3

	cmp bx,-1
	je .op_mov@reg_var_dword@var@no_offset

	call .asm@offset

	jmp near .end
.op_mov@reg_var_dword@var@no_offset
	mov al,1
	call add_offset2offset_table

	add word[pointer_write],2
	add word[act_offset],2

	jmp near .end
.op_mov@reg_var_dword@num
	mov si,word[pointer_write]
	add dl,0xb8
	mov dh,0x66
	xchg dl,dh
	mov word[gs:si],dx
	add si,2
	mov dword[gs:si],eax
	add word[pointer_write],6
	add word[act_offset],6

	jmp near .end
.op_mov@reg_var_dword@reg
	mov si,word[pointer_write]

	shl dl,3
	or dl,al
	or dl,11000000b
	mov word[gs:si],0x8b66
	add si,2
	mov byte[gs:si],dl
	add word[pointer_write],3
	add word[act_offset],3

	jmp near .end
.op_jmp
	mov di,op_jmp
	call string_cmp
	and ax,ax
	jnz near .op_call

	mov si,word[pointer_read]
	mov di,buffer_bef1
	call parse_line
	add word[pointer_read],cx

	mov si,word[pointer_read]
	mov di,buffer_bef2
	call parse_line
	add word[pointer_read],cx

	mov si,buffer_bef2
	push si
	mov si,buffer_bef1
	mov di,op_near
	call string_cmp
	pop si
	and ax,ax
	jz .op_jmp@near

	push si
	mov si,buffer_bef1
	mov di,op_short
	call string_cmp
	pop si
	and ax,ax
	jz .op_jmp@short

	mov si,buffer_bef1
.op_jmp@near
	call look4label
	and al,al
	jnz near .error_label

	mov si,word[pointer_write]
	mov byte[gs:si],0xe9
	inc si
	inc word[pointer_write]
	inc word[act_offset]

	cmp bx,-1
	je near .asm@no_offset@jmp

	mov ax,word[act_offset]
	add ax,2
	sub bx,ax
	mov word[gs:si],bx
	add word[pointer_write],2
	add word[act_offset],2

	jmp near .end
.op_jmp@short
	call look4label
	and al,al
	jnz near .error_label

	mov si,word[pointer_write]
	mov byte[gs:si],0xeb
	inc si
	inc word[pointer_write]
	inc word[act_offset]

	cmp bx,-1
	je .op_jmp@short@no_offset

	mov ax,word[act_offset]
	inc ax
	sub bx,ax

	cmp bx,-128
	jl near .error_short_jmp

	mov byte[gs:si],bl
	inc word[pointer_write]
	inc word[act_offset]

	jmp near .end
.op_jmp@short@no_offset
	mov al,3
	call add_offset2offset_table

	inc word[pointer_write]
	inc word[act_offset]

	jmp near .end
.op_jmp@reg16bit
.op_jmp@reg32bit
	jmp near .end
.op_call
	mov di,op_call
	call string_cmp
	and ax,ax
	jnz near .op_arpl

	mov si,word[pointer_read]
	mov di,buffer_bef1
	call parse_line
	add word[pointer_read],cx

	mov si,buffer_bef1
	call translate_16bit_reg
	cmp al,0xff
	jne .op_call@reg16bit

	call translate_32bit_reg
	cmp al,0xff
	jne .op_call@reg32bit

	call look4label
	and al,al
	jnz near .error_label

	mov si,word[pointer_write]
	mov byte[gs:si],0xe8
	inc si
	inc word[pointer_write]
	inc word[act_offset]

	cmp bx,-1
	je near .asm@no_offset@jmp
	mov ax,word[act_offset]
	add ax,2
	sub bx,ax
	mov word[gs:si],bx
	add word[pointer_write],2
	add word[act_offset],2
	jmp near .end
.op_call@reg16bit
.op_call@reg32bit
	jmp near .end
.op_arpl
	mov di,op_arpl
	call string_cmp
	and ax,ax
	jnz near .op_enter

	mov si,word[pointer_read]
	mov di,buffer_bef1
	call parse_line

⌨️ 快捷键说明

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