??? 06/30/05 05:30 Modified: 06/30/05 05:34 Read: times |
#96269 - Old SDCC (ver ??) vs New SDCC (ver 2.50) Responding to: ???'s previous message |
Hello Frieder,
Below are two disassembled listing (D51.EXE tks Jeff) of the same program Klaum.c The older version destroys the PSW register with MOV PSW,#0 instruction. The new version of SDCC does not modify the PSW register. It would be best to avoid using the flags in the PSW register since historically it gets wiped out with older version of SDCC and Keil. Regards, Charles Bannister 8051 Disassembly of klaum1.hex compiled with older version of SDCC org 0 reset1: ljmp X008c ; 0000 02 00 8c reti ; 0003 32 org 0bh ljmp X0031 ; 000b 02 00 31 ; timer 0 org 13h reti ; 0013 32 org 1bh reti ; 001b 32 org 23h reti ; 0023 32 org 2bh reti ; 002b 32 X002c: lcall X006b ; 002c 12 00 6b ; initalize mpu X002f: sjmp X002f ; 002f 80 fe X0031: push acc ; 0031 c0 e0 ; timer 0 isr push b ; 0033 c0 f0 ; save acc, b, dpl, dph, psw push dpl ; 0035 c0 82 push dph ; 0037 c0 83 push psw ; 0039 c0 d0 mov psw,#0 ; 003b 75 d0 00 ; clear psw (big problem here) mov a,rb1r0 ; 003e e5 08 jz X0044 ; 0040 60 02 sjmp X0053 ; 0042 80 0f X0044: mov rb1r0,#1 ; 0044 75 08 01 clr p1.0 ; 0047 c2 90 mov th0,#0fah ; 0049 75 8c fa mov tl0,#0f5h ; 004c 75 8a f5 clr tf0 ; 004f c2 8d sjmp X0060 ; 0051 80 0d X0053: mov rb1r0,#0 ; 0053 75 08 00 setb p1.0 ; 0056 d2 90 mov th0,#0c3h ; 0058 75 8c c3 mov tl0,#94h ; 005b 75 8a 94 clr tf0 ; 005e c2 8d X0060: pop psw ; 0060 d0 d0 pop dph ; 0062 d0 83 pop dpl ; 0064 d0 82 pop b ; 0066 d0 f0 pop acc ; 0068 d0 e0 reti ; 006a 32 X006b: setb ea ; 006b d2 af setb et0 ; 006d d2 a9 clr tr0 ; 006f c2 8c clr tf0 ; 0071 c2 8d anl tmod,#0f0h ; 0073 53 89 f0 orl tmod,#1 ; 0076 43 89 01 mov th0,#0c3h ; 0079 75 8c c3 mov tl0,#94h ; 007c 75 8a 94 setb f0 ; 007f d2 d5 clr p1.0 ; 0081 c2 90 setb tr0 ; 0083 d2 8c X0085: sjmp X0085 ; 0085 80 fe ret ; 0087 22 X0088: mov dpl,#0 ; 0088 75 82 00 ret ; 008b 22 X008c: mov sp,#8 ; 008c 75 81 08 lcall X0088 ; 008f 12 00 88 mov a,dpl ; 0092 e5 82 jz X0099 ; 0094 60 03 ljmp X002c ; 0096 02 00 2c X0099: mov r1,#0 ; 0099 79 00 mov a,r1 ; 009b e9 orl a,#0 ; 009c 44 00 jz X00bb ; 009e 60 1b mov r2,#0 ; 00a0 7a 00 mov dptr,#X00d4 ; 00a2 90 00 d4 mov r0,#0 ; 00a5 78 00 mov p2,#0 ; 00a7 75 a0 00 X00aa: clr a ; 00aa e4 movc a,@a+dptr ; 00ab 93 movx @r0,a ; 00ac f2 inc dptr ; 00ad a3 inc r0 ; 00ae 08 cjne r0,#0,X00b4 ; 00af b8 00 02 inc p2 ; 00b2 05 a0 X00b4: djnz r1,X00aa ; 00b4 d9 f4 djnz r2,X00aa ; 00b6 da f2 mov p2,#0ffh ; 00b8 75 a0 ff X00bb: mov r0,#0 ; 00bb 78 00 mov a,r0 ; 00bd e8 orl a,#0 ; 00be 44 00 jz X00ce ; 00c0 60 0c mov r1,#0 ; 00c2 79 00 mov dptr,#X0000 ; 00c4 90 00 00 clr a ; 00c7 e4 X00c8: movx @dptr,a ; 00c8 f0 inc dptr ; 00c9 a3 djnz r0,X00c8 ; 00ca d8 fc djnz r1,X00c8 ; 00cc d9 fa X00ce: mov @r0,a ; 00ce f6 djnz r0,X00ce ; 00cf d8 fd ljmp X002c ; 00d1 02 00 2c X00d4 equ 0d4h end =============================================================== 8051 Disassembly of klaum1.hex compiled with SDCC ver 2.5.0 org 0 X0000: ljmp X005c ; 0000 02 00 5c ; reset reti ; 0003 32 org 0bh ljmp X0013 ; 000b 02 00 13 ; timer 0 isr start X000e: lcall X003a ; 000e 12 00 3a X0011: sjmp X0011 ; 0011 80 fe X0013: push acc ; 0013 c0 e0 ; save acc mov a,rb1r0 ; 0015 e5 08 jz X001b ; 0017 60 02 sjmp X002a ; 0019 80 0f X001b: mov rb1r0,#1 ; 001b 75 08 01 clr p1.0 ; 001e c2 90 mov th0,#0fah ; 0020 75 8c fa mov tl0,#0f5h ; 0023 75 8a f5 clr tf0 ; 0026 c2 8d sjmp X0037 ; 0028 80 0d X002a: mov rb1r0,#0 ; 002a 75 08 00 setb p1.0 ; 002d d2 90 mov th0,#0c3h ; 002f 75 8c c3 mov tl0,#94h ; 0032 75 8a 94 clr tf0 ; 0035 c2 8d X0037: pop acc ; 0037 d0 e0 ; restore acc reti ; 0039 32 ; timer 0 isr end X003a: setb ea ; 003a d2 af setb et0 ; 003c d2 a9 clr tr0 ; 003e c2 8c clr tf0 ; 0040 c2 8d anl tmod,#0f0h ; 0042 53 89 f0 orl tmod,#1 ; 0045 43 89 01 mov th0,#0c3h ; 0048 75 8c c3 mov tl0,#94h ; 004b 75 8a 94 mov rb1r0,#1 ; 004e 75 08 01 clr p1.0 ; 0051 c2 90 setb tr0 ; 0053 d2 8c X0055: sjmp X0055 ; 0055 80 fe ret ; 0057 22 X0058: mov dpl,#0 ; 0058 75 82 00 ret ; 005b 22 X005c: mov sp,#8 ; 005c 75 81 08 start of main program lcall X0058 ; 005f 12 00 58 mov a,dpl ; 0062 e5 82 jz X0069 ; 0064 60 03 ljmp X000e ; 0066 02 00 0e X0069: mov r1,#0 ; 0069 79 00 mov a,r1 ; 006b e9 orl a,#0 ; 006c 44 00 jz X008b ; 006e 60 1b mov r2,#0 ; 0070 7a 00 mov dptr,#X00b8 ; 0072 90 00 b8 mov r0,#0 ; 0075 78 00 mov p2,#0 ; 0077 75 a0 00 X007a: clr a ; 007a e4 movc a,@a+dptr ; 007b 93 movx @r0,a ; 007c f2 inc dptr ; 007d a3 inc r0 ; 007e 08 cjne r0,#0,X0084 ; 007f b8 00 02 inc p2 ; 0082 05 a0 X0084: djnz r1,X007a ; 0084 d9 f4 djnz r2,X007a ; 0086 da f2 mov p2,#0ffh ; 0088 75 a0 ff X008b: clr a ; 008b e4 mov r0,#0ffh ; 008c 78 ff X008e: mov @r0,a ; 008e f6 djnz r0,X008e ; 008f d8 fd mov r0,#0 ; 0091 78 00 mov a,r0 ; 0093 e8 orl a,#0 ; 0094 44 00 jz X00a2 ; 0096 60 0a mov r1,#0 ; 0098 79 00 mov p2,#0 ; 009a 75 a0 00 clr a ; 009d e4 X009e: movx @r1,a ; 009e f3 inc r1 ; 009f 09 djnz r0,X009e ; 00a0 d8 fc X00a2: mov r0,#0 ; 00a2 78 00 mov a,r0 ; 00a4 e8 orl a,#0 ; 00a5 44 00 jz X00b5 ; 00a7 60 0c mov r1,#0 ; 00a9 79 00 mov dptr,#X0000 ; 00ab 90 00 00 clr a ; 00ae e4 X00af: movx @dptr,a ; 00af f0 inc dptr ; 00b0 a3 djnz r0,X00af ; 00b1 d8 fc djnz r1,X00af ; 00b3 d9 fa X00b8 equ 0b8h end |