📄 4225.asm
字号:
div16s: ; 16位/16位带符号除法
mov r13,r17 ;确定结果符号
eor r13,r19
sbrs r17,7 ;判被除数的正负
rjmp d16s1
com r17 ;为负,被除数取补
com r16
subi r16,low(-1)
sbci r17,high(-1)
d16s1:
sbrs r19,7 ;判除数的正负
rjmp d16s2
com r19 ;为负,除数取补
com r18
subi r18,low(-1)
sbci r18,high(-1)
d16s2:
clr r14 ;清除余数和进位
sub r15,r15
ldi r20,17 ;初始化循环计数器
d16s3:
rol r16 ;左移被除数
rol r17
dec r20 ; 计数器减 1
brne d16s5
sbrs r13,7 ;判结果的正负
rjmp d16s4 ;不为 0 ,跳至d16s4
com r17 ;为负,结果取补
com r16
subi r16,low(-1)
sbci r17,high(-1)
d16s4:
ret
d16s5:
rol r14 ;左移余数(被除数移到除数)
rol r15
sub r14,r18 ;余数-除数
sbc r15,r19
brcc d16s6 ;够减,跳至 d16s6
add r14,r18
adc r15,r19
clc ;清进位位
rjmp d16s3
d16s6:
sec ;置进位位
rjmp d16s3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -