?? avr32fp.inc.asm
字號(hào):
ADC R18,R23
RET
ADD32F_14: ;尾數(shù)相減
SUB R16,R21
SBC R17,R22
SBC R18,R23
RET
ADD32F_15: ;結(jié)果取補(bǔ)
COM R17
COM R18
NEG R16
SBCI R17,$FF
SBCI R18,$FF
RET
ADD32F_16: ;兩個(gè)數(shù)相交換
ST -Y,R21
ST -Y,R22
ST -Y,R23
ST -Y,R24
ST -Y,R25
MOV R24,R19
MOV R21,R16
MOV R22,R17
MOV R23,R18
MOV R25,R20
LD R20,Y+
LD R19,Y+
LD R18,Y+
LD R17,Y+
LD R16,Y+
RET
YCL:
MOV R20,R19
LDI R26,$80
ADD R18,R18
ADC R19,R19 ; 將階碼移至R19
EOR R19,R26 ; 階碼減 $80 存于R19
ADD R26,R26
ROR R18 ; 恢復(fù)尾數(shù)最高位 1
ANDI R20,$80 ;取浮點(diǎn)數(shù)數(shù)符存于R20最高位
MOV R25,R24
LDI R26,$80
ADD R23,R23 ; 將階碼移至R24
ADC R24,R24
EOR R24,R26 ; 階碼減 $80 存于R24
ADD R26,R26
ROR R23 ; 恢復(fù)尾數(shù)最高位 1
ANDI R25,$80 ;取浮點(diǎn)數(shù)數(shù)符存于R25最高位
CPI R19,$80
RET
GGH: ;規(guī)格化
ADD R18,R18 ;隱含尾數(shù)最高位為 1
LDI R26,$80 ;考慮符號(hào)位
EOR R26,R19 ;右移R26,R18
ADD R20,R20
ROR R26
ROR R18
MOV R19,R26 ;R26移至R19
RET
DIV32F_1:
ST -Y,R26 ;轉(zhuǎn)存R26
CLR R13 ;清R15:R14:R13
CLR R14
CLR R15
LDI R26,$18 ;令R26=$18(24)
DIV32F_2:
CP R16,R21 ;被除數(shù)(余數(shù))與除數(shù)兩尾數(shù)相比
CPC R17,R22
CPC R18,R23
BRCS DIV32F_3 ;被除數(shù)(余數(shù)) < 除數(shù)
SUB R16,R21 ;余數(shù) = 被除數(shù) - 除數(shù)
SBC R17,R22
SBC R18,R23
SEC
RJMP DIV32F_4
DIV32F_3:
CLC ; 清除進(jìn)位位
DIV32F_4:
ADC R13,R13 ; 商左移一位,并加上進(jìn)位位
ADC R14,R14
ADC R15,R15
ADD R16,R16 ; 余數(shù)左移一位
ADC R17,R17
ADC R18,R18
DEC R26 ; R26-1
BRNE DIV32F_2 ;循環(huán) 24 次
MOV R16,R13 ;取出商
MOV R17,R14
MOV R18,R15
LD R26,Y+ ;恢復(fù)R26
RET
DIV32F: ; 四字節(jié)浮點(diǎn)除法運(yùn)算子程
AND R24,R24
BREQ DIV32F_7 ;跳至DIV32F_7,出結(jié)果
AND R19,R19 ;判被除數(shù)是否為 0
BREQ JGW0 ;為 0 ,則結(jié)果為 0
RCALL YCL ;調(diào)YCL子程
BREQ JGW0 ;跳至JGW0, 結(jié)果為 0
EOR R20,R25 ;取商的符號(hào)位存于R20
SEC
SBC R19,R24 ;取出商的階碼
BRVS JGZD ;溢出,跳至JGZD
LSR R23 ;無(wú)溢出
ROR R22 ;將被除數(shù)與除數(shù)得尾數(shù)
ROR R21 ;右移一位,最高位置 0
LSR R18
ROR R17
ROR R16
RCALL DIV32F_1 ;調(diào)DIV32F_1子程,進(jìn)行運(yùn)算
AND R18,R18 ;判R18最高位是否為 0
BRMI DIV32F_5 ;為 1
ADD R16,R16 ;為 0,左移被除數(shù)尾數(shù)
ADC R17,R17
ADC R18,R18
SUBI R19,$01 ;階碼減 1
BRVS JGZD ;溢出, 跳至JGZD
DIV32F_5: ;無(wú)溢出
MOV R26,R16
LSR R26
BRCS DIV32F_6 ;進(jìn)位位為 1,跳至DIV32F_6
AND R16,R16
BRPL DIV32F_6 ;為正,跳至DIV32F_6
AND R17,R17
BRPL DIV32F_6 ;為正,跳至DIV32F_6
LDI R26,$01 ;尾數(shù)加 1
ADD R16,R26
CLR R26
ADC R17,R26
ADC R18,R26
DIV32F_6:
RJMP GGH
DIV32F_7:
RJMP JGW0
JGZD: ;結(jié)果置為 $7FFFFFFF
LDI R26,$7F
MOV R19,R26
OR R18,R26
LDI R26,$FF
MOV R16,R26
MOV R17,R26
RET
JGW0: ;結(jié)果置為 $00000000
CLR R16
CLR R17
CLR R18
CLR R19
CLR R20
RET
MPY32F: ; 四字節(jié)浮點(diǎn)乘法運(yùn)算子程
RCALL YCL ; 調(diào)YCL子程 并判乘數(shù)是否為 0
BREQ JGW0 ; 被乘數(shù)為 0 ,跳至JGW0--結(jié)果為 0
CPI R24,$80 ;判乘數(shù)是否為 0
BREQ JGW0 ;乘數(shù)為 0 ,跳至JGW0--結(jié)果為 0
EOR R20,R25 ;符號(hào)位相異或
SEC
ADC R19,R24 ;恢復(fù)階碼,存于R19
BRVS JGZD ;溢出,跳至JGZD
RCALL MPY32F_2 ;無(wú)溢出,調(diào)MPY32F_2子程
AND R18,R18 ;判R18最高位是否為 1
BRMI MPY32F_1 ;為負(fù),即R18最高位為1跳至MPY32F_1
DEC R19 ;為正,即R18最高位為 0 階碼減 1
ADD R15,R15 ;尾數(shù)左移一位
ADC R16,R16
ADC R17,R17
ADC R18,R18 ;直至R18最高位為 1 止
MPY32F_1:
SUBI R19,$FF ;階碼加 1
BRVS JGZD ;溢出,跳至JGZD
RJMP GGH ;跳至GGH--出結(jié)果
MPY32F_2:
ST -Y,R24 ;轉(zhuǎn)存R24
CLR R13 ;清R26,R15,R14,R13
CLR R14
CLR R15
CLR R26
LDI R24,$18 ;令R24=$18(24)
MPY32F_3:
ADD R13,R13 ;積的尾數(shù)在R18:R17:R16:R15:R14:R13
ADC R14,R14
ADC R15,R15
ADC R16,R16 ;尾數(shù)左移
ADC R17,R17
ADC R18,R18
BRCC MPY32F_4 ;無(wú)進(jìn)位,R24減 1 ,不加乘數(shù)
ADD R13,R21 ;有進(jìn)位,R24減 1 ,加乘數(shù)到尾數(shù)低位
ADC R14,R22
ADC R15,R23
ADC R16,R26
ADC R17,R26
ADC R18,R26
MPY32F_4:
DEC R24 ;循環(huán) 24 次
BRNE MPY32F_3
LD R24,Y+ ;恢復(fù)R24
RET ;取高 24 位
QUBU: ;取補(bǔ)運(yùn)算
COM R16
COM R17
COM R18
COM R19
SUBI R16,$FF
SBCI R17,$FF
SBCI R18,$FF
SBCI R19,$FF
RET
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -