??? 01/20/08 19:20 Read: times |
#149778 - try this Responding to: ???'s previous message |
"And my main question was is this asm is legal ?"
Yes. You might want to try one of these: ----8<---------------------------------------- #include <compiler.h> SFR16(TMR2, 0xCC); unsigned int mainoff = 5000; void main () { TMR2 = ~(mainoff - 1); } void foo() { __asm mov a,_mainoff add a,#0xff cpl a mov _TMR2,a mov a,(_mainoff + 1) addc a,#0xff cpl a mov (_TMR2 >> 8),a __endasm; } ---->8---------------------------------------- Which results in: 0022 127 _main: 136 ; mainoff.c:9: TMR2 = ~(mainoff - 1); 0022 E5 08 137 mov a,_mainoff 0024 24 FF 138 add a,#0xff 0026 FA 139 mov r2,a 0027 E5 09 140 mov a,(_mainoff + 1) 0029 34 FF 141 addc a,#0xff 002B FB 142 mov r3,a 002C EA 143 mov a,r2 002D F4 144 cpl a 002E F5 CC 145 mov _TMR2,a 0030 EB 146 mov a,r3 0031 F4 147 cpl a 0032 F5 CD 148 mov (_TMR2 >> 8),a 0034 22 149 ret 150 ;------------------------------------------------------------ 151 ;Allocation info for local variables in function 'foo' 152 ;------------------------------------------------------------ 153 ;------------------------------------------------------------ 154 ; mainoff.c:12: void foo() 155 ; ----------------------------------------- 156 ; function foo 157 ; ----------------------------------------- 0035 158 _foo: 159 ; mainoff.c:23: __endasm; 160 0035 E5 08 161 mov a,_mainoff 0037 24 FF 162 add a,#0xff 0039 F4 163 cpl a 003A F5 CC 164 mov _TMR2,a 003C E5 09 165 mov a,(_mainoff + 1) 003E 34 FF 166 addc a,#0xff 0040 F4 167 cpl a 0041 F5 CD 168 mov (_TMR2 >> 8),a 169 0043 22 170 ret |
Topic | Author | Date |
SDCC, copying integer in ASM | 01/01/70 00:00 | |
Shift-and-mask, or union | 01/01/70 00:00 | |
I used asm tag and the rr command but.... | 01/01/70 00:00 | |
Your question | 01/01/70 00:00 | |
Portable unions | 01/01/70 00:00 | |
Less non-portable? | 01/01/70 00:00 | |
Less non-portable | 01/01/70 00:00 | |
portable, schmortable | 01/01/70 00:00 | |
Disagree! | 01/01/70 00:00 | |
how portable? | 01/01/70 00:00 | |
emphasis | 01/01/70 00:00 | |
Real world portable![]() | 01/01/70 00:00 | |
using - does not give the same result | 01/01/70 00:00 | |
try this | 01/01/70 00:00 | |
You are exceeeding 2 byte signed integer limits | 01/01/70 00:00 | |
Fighting the tools | 01/01/70 00:00 | |
Thanks all. | 01/01/70 00:00 | |
Dangerous | 01/01/70 00:00 | |
Very important warning! | 01/01/70 00:00 |