ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
4 декабря
1427070 Топик полностью
POV (16.04.2024 16:25, просмотров: 155) ответил AlexBi на Херова гора операций получается из-за того, что компилятор почему-то не догадывается сообразить, что u16*u16=u32 и не хочет оптимизировать u8*u16 или u8*u32, вместо этого приводит все к u32 и вызывает библиотечную функцию.
На сайте кейла приводился пример на асме как подсунуть ему оптимизированную под себя функцию умножения. Например uint16*uint16=uint32 без преобразования операндов в uint32 
NAME MULT
?PR?_uint_mult?MULT SEGMENT CODE
PUBLIC _uint_mult
RSEG ?PR?_uint_mult?MULT
_uint_mult:
; x stored in R6+R7
; y stored in R4+R5
mov a,r7
mov b,r5
mul ab ; ab = R7*R5
mov r3,b
xch a,r7 ; a = R7
mov b,r4
mul ab ; ab = R4*R7
add a,r3
mov r3,a
mov a,#0
addc a,b
xch a,r5 ; a = R5
mov b,r6
mul ab ; ab = R5*R6
add a,r3
xch a,r6
xch a,b ; b = R6
addc a,r5
mov r5,a
mov a,#0
addc a,#0
xch a,r4
mul ab ; ab = R4*R6
add a,r5
mov r5,a
mov a,b
addc a,r4
mov r4,a
; Result returned in R4+R5+R6+R7
; >> 16
mov a,r4
mov r6,a
mov a,r5
mov r7,a
RET

END