??? 02/16/09 20:42 Read: times |
#162493 - maybe use a compiler Responding to: ???'s previous message |
you could also use a compiler and throw a C-snippet at it:
#include <8052.h> void main (void) { unsigned char uc, uc2; char c, c2; c = uc = P0; c2 = uc2 = P2; /* unsigned comparison */ if( uc > uc2 ) goto noonecares; if( uc >= uc2 ) goto noonecares; if( uc == uc2 ) goto noonecares; if( uc < uc2 ) goto noonecares; if( uc <= uc2 ) goto noonecares; /* signed comparison */ if( c > c2 ) goto noonecares; if( c >= c2 ) goto noonecares; if( c == c2 ) goto noonecares; if( c < c2 ) goto noonecares; if( c <= c2 ) goto noonecares; while(1) ; noonecares: while(2) ; } with f.e. SDCC (and command line option --nogcse so the compiler may not keep global common subexpressions) you arrive at: 355 ;uc Allocated to registers r2 356 ;uc2 Allocated to registers r4 357 ;c Allocated to registers r3 358 ;c2 Allocated to registers r5 0000 364 _main: 373 ; compare2.c:8: c = uc = P0; 0000 AA 80 374 mov r2,_P0 0002 AB 80 375 mov r3,_P0 376 ; compare2.c:9: c2 = uc2 = P2; 0004 AC A0 377 mov r4,_P2 0006 AD A0 378 mov r5,_P2 379 ; compare2.c:12: if( uc > uc2 ) 0008 C3 380 clr c 0009 EC 381 mov a,r4 000A 9A 382 subb a,r2 383 ; compare2.c:14: if( uc >= uc2 ) 000B 40 4D 384 jc 00126$ 000D EA 385 mov a,r2 000E 9C 386 subb a,r4 000F 50 49 387 jnc 00126$ 388 ; compare2.c:16: if( uc == uc2 ) 0011 EA 389 mov a,r2 0012 B5 04 02 390 cjne a,ar4,00143$ 0015 80 43 391 sjmp 00126$ 0017 392 00143$: 393 ; compare2.c:18: if( uc < uc2 ) 0017 C3 394 clr c 0018 EA 395 mov a,r2 0019 9C 396 subb a,r4 397 ; compare2.c:20: if( uc <= uc2 ) 001A 40 3E 398 jc 00126$ 001C EC 399 mov a,r4 001D 9A 400 subb a,r2 001E 50 3A 401 jnc 00126$ 402 ; compare2.c:24: if( c > c2 ) 0020 C3 403 clr c 0021 ED 404 mov a,r5 0022 64 80 405 xrl a,#0x80 0024 8B F0 406 mov b,r3 0026 63 F0 80 407 xrl b,#0x80 0029 95 F0 408 subb a,b 409 ; compare2.c:26: if( c >= c2 ) 002B 40 2D 410 jc 00126$ 002D EB 411 mov a,r3 002E 64 80 412 xrl a,#0x80 0030 8D F0 413 mov b,r5 0032 63 F0 80 414 xrl b,#0x80 0035 95 F0 415 subb a,b 0037 50 21 416 jnc 00126$ 417 ; compare2.c:28: if( c == c2 ) 0039 EB 418 mov a,r3 003A B5 05 02 419 cjne a,ar5,00148$ 003D 80 1B 420 sjmp 00126$ 003F 421 00148$: 422 ; compare2.c:30: if( c < c2 ) 003F C3 423 clr c 0040 EB 424 mov a,r3 0041 64 80 425 xrl a,#0x80 0043 8D F0 426 mov b,r5 0045 63 F0 80 427 xrl b,#0x80 0048 95 F0 428 subb a,b 429 ; compare2.c:32: if( c <= c2 ) 004A 40 0E 430 jc 00126$ 004C ED 431 mov a,r5 004D 64 80 432 xrl a,#0x80 004F 8B F0 433 mov b,r3 0051 63 F0 80 434 xrl b,#0x80 0054 95 F0 435 subb a,b 0056 50 02 436 jnc 00126$ 437 ; compare2.c:36: while(1) 0058 438 00122$: 439 ; compare2.c:40: while(2) 0058 80 FE 440 sjmp 00122$ 005A 441 00126$: 005A 80 FE 442 sjmp 00126$ which is a start. And you could easily modify the C-snippet to compare against a literal (or something within xdata/pdata/idata/code), or 16bit/32bit signed/unsigned integers or make the compiler use ljmp instead of sjmp. |
Topic | Author | Date |
mathimatical question using 8052 | 01/01/70 00:00 | |
CJNE? | 01/01/70 00:00 | |
problem in "" < "" and "" > "" | 01/01/70 00:00 | |
Reading is fundamental | 01/01/70 00:00 | |
*Careful* and *Thorough* reading is key | 01/01/70 00:00 | |
"bible" link(s) | 01/01/70 00:00 | |
Combine CJNE with JC/JNC instruction... | 01/01/70 00:00 | |
Thanks Kai the PDF was so helpfull | 01/01/70 00:00 | |
You can use.. | 01/01/70 00:00 | |
maybe use a compiler![]() | 01/01/70 00:00 |