📄 singledivide.asm
字号:
.file "example2.asm"
.title "double division"
.mmregs
DATA_DP .usect "filter_vars",0 ;定义数据页指针
STACK .usect "stack",60 ;定义堆栈大小
start: st #80H,ar0 ;初始化ar0
st #0h,ar4 ;初始化ar4
st #100h,ar5 ;初始化ar5
st #101h,ar6 ;初始化ar6
LD #DATA_DP,DP ;初始化页指针
STM #STACK,SP ;初始化堆栈指针
ld #-1000,a ;被除数送到A累加器
ld #21,b ;除数送到B累加器
stl a,*ar5 ;保存被除数
stl b,*ar6 ;保存除数
rsbx tc ;置tc位为0
st #0h,*ar3 ;*ar3清0
nop ;空操作
bc jump0,agt ;判断被除数符号
ssbx tc ;置tc位为1
abs a ;取a的绝对值
st #1h,ar4 ;将1送到ar4
jump0: bc jump1,bgt ;判断除数符号
xorm #1h,ar4 ;ar4和1异或
abs b ;取b的绝对值
jump1: st #0,*ar1 ;利用减法指令做除法运算
dst b,*ar0
rsbx c16
ld #-1,b
nop
dsub *ar0,a
bc jump5,alt
jump2: add #1,b
dsub *ar0,a
bc jump2,ageq
add #1,b
dadd *ar0,a
bc jump4,ntc
banz jump3,*ar4
nop
nop
b jump6
jump3: neg a ;修改结果和余数的符号
neg b
b jump6
jump4: dst b,*ar1
;ld *ar3,b
bc jump6,bgt
dld *ar1,b
b jump3
jump5: ld *ar5,a ;被除数小于除数,原数放入累加器A
ld *ar6,b ;被除数小于除数,原数放入累加器B
ssbx 1,10
jump6: b jump6 ;程序结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -