📄 8bit除以8bit.asm
字号:
;---------------------------------------------------------------------
; ;8位/8位除法子程序
;时间:2004年7月
;单位: 上海凌阳科技
;作者:周俊峰
;Email:zhoujf@sunplus.com.cn
;Tel:021-50804488 ext.6124
;
; ;8位/8位除法子程序
;入口参数:G_Dividend_Buffer G_Divisor_Buffer
;;G_Temporary是被除数的一个临时存储变量
;出口参数:G_Div_Result G_Div_Result+1
;----------------------------------------------------------------------
.SYNTAX 6502 ;process standard 6502 addressing syntax
.LINKLIST ;generate linklist information
.SYMBOLS ;generate symbolic debug information
.PAGE0 ;define values in the range from 00h to FFh
.include SPMC810A.inc
ORG $80
G_Dividend_Buffer DS 1;被除数
G_Divisor_Buffer DS 1;除数
G_Div_Result DS 2;结果
ShiftTimes DS 1
G_Temporary DS 1;临时存储变量
.CODE
ORG $EE00
.PUBLIC V_Reset
V_Reset:
V_PowerOn:
sei
ldx #C_STACK_BOTTOM ;set stack bottom
txs ; transfer x to stack
lda #109
sta G_Dividend_Buffer;装入被除数低位数据
lda #10
sta G_Divisor_Buffer;装入除数低位数据
lda #0;清除结果单元
sta G_Div_Result
sta G_Temporary;临时被除数清零
lda #8
sta ShiftTimes
;---------------------------------------------------------
F_Div_Sub:
lda #00H
sta G_Div_Result
sta G_Temporary
lda #8
sta ShiftTimes ;设定除法需要移位的次数
lda G_Dividend_Buffer
beq L_Div_End ;被除数为0,返回
sta G_Dividend_Buffer
lda G_Divisor_Buffer
beq L_Div_End ;除数为0,返回
sta G_Divisor_Buffer
L_Shift_Div:
clc
rol G_Dividend_Buffer
rol G_Temporary ;被除数左移,被除数前面补一个八位的0
bcs L_Result ;c=1;有溢出,说明被除数大,九位数比八位数大
lda G_Divisor_Buffer
cmp G_Temporary ;移位的被除数和除数的高位相比较
bcc L_Result ;除数小于临时被除数,商上1
beq L_Result
jmp L_Div_NextBit ;除数大于临时被除数,商上0,即结果直接左移一位
L_Result:
inc G_Div_Result ;商上1
lda G_Temporary
sec
sbc G_Divisor_Buffer
sta G_Temporary
L_Div_NextBit:
dec ShiftTimes
lda ShiftTimes
beq L_Div_End ;是否除完
clc
rol G_Div_Result
jmp L_Shift_Div ;继续除
nop
nop
nop
L_Div_End:
MainLoop:
nop
nop
nop
nop
nop
jmp MainLoop
;=============================================================================
; Interrupt Subroutine
;=============================================================================
V_IRQ:
PHA
TXA
PHA
IRQ_END:
PLA
TAX
PLA
RTI
;=====================================================
;Description: NMI Interrupt Vector
;=====================================================
.PUBLIC V_NMI
V_NMI:
RTI
.ORG $1FFA ;Define two different areas since SICE
DW V_NMI ;FMay download program emulated either
DW V_PowerOn ;FIn internal memory or external memory
DW V_IRQ
.ORG $7FFA ;For EPROM with EV BRD. IRQ. CPU, or EXT. CPU
DW V_NMI
DW V_PowerOn
DW V_IRQ
.ORG $FFFA ;For ICE trace.
DW V_NMI
DW V_PowerOn
DW V_IRQ
.END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -