?? 4228.asm
字號:
div32s: ; 32位/32位帶符號除法
clr r27 ;清除余數
clr r26
clr r25
clr r24
clr r30 ;清符號位
cpi r19,$7f ;判被除數的正負
brcc qubus1 ;為負,被除數取補
d32s_1:
cpi r23,$7f ;判除數的正負
brcc qubus2 ;為負,除數取補
d32s_2:
ldi r28,33 ;初始化循環計數器
d32s_3:
cp r24,r20 ;余數與除數相比較
cpc r25,r21
cpc r26,r22
cpc r27,r23
brcs d32s_4 ;進位位為 1,即后者大,跳至d32s_4
sub r24,r20 ;余數-除數
sbc r25,r21
sbc r26,r22
sbc r27,r23
sec ;置進位位
rjmp d32s_5
d32s_4:
clc ;清進位位
d32s_5:
rol r16 ;左移結果(被除數)
rol r17
rol r18
rol r19
rol r24 ;左移余數(被除數移到除數)
rol r25
rol r26
rol r27
dec r28 ; 計數器減 1
brne d32s_3 ;不為 0 ,跳至d32s_3
ror r27 ;右移余數
ror r26
ror r25
ror r24
cpi r30,$01 ;判符號位
breq qubus3 ;為 1 ,代表負,結果取補
d32s_6:
ret ;返回
qubus1:
inc r30 ;符號位加 1
com r16 ;取反加 1 (取補)
com r17
com r18
com r19
subi r16,$ff
sbci r17,$ff
sbci r18,$ff
sbci r19,$ff
rjmp d32s_1
qubus2:
inc r30 ;符號位加 1
com r20 ;取反加 1 (取補)
com r21
com r22
com r23
subi r20,$ff
sbci r21,$ff
sbci r22,$ff
sbci r23,$ff
rjmp d32s_2
qubus3:
com r16 ;取反加 1 (取補)
com r17
com r18
com r19
subi r16,$ff
sbci r17,$ff
sbci r18,$ff
sbci r19,$ff
rjmp d32s_6
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -