|
发表于 2024-7-24 17:58:33
|
显示全部楼层
- _main:
- ; c1.c:14: printf("a=%d,b=%d\n",a,b);
- mov a,#0x12
- push acc
- clr a
- push acc
- mov a,#0xbb
- push acc
- clr a
- push acc
- mov a,#___str_0
- push acc
- mov a,#(___str_0 >> 8)
- push acc
- mov a,#0x80
- push acc
- lcall _printf
- mov a,sp
- add a,#0xf9
- mov sp,a
- ; c1.c:16: return 0;
- mov dptr,#0x0000
- ; c1.c:17: }
- ret
- .area CSEG (CODE)
- .area CONST (CODE)
- .area CONST (CODE)
- ___str_0:
- .ascii "a=%d,b=%d"
- .db 0x0a
- .db 0x00
- .area CSEG (CODE)
- .area XINIT (CODE)
- .area CABS (ABS,CODE)
复制代码
- #include <stdio.h>
- int putchar(int c)
- {
- return c;
- }
- int
- main(void)
- {
- char a=0xaabb;
- char b=0x12;
- printf("a=%d,b=%d\n",a,b);
- return 0;
复制代码
这个事,显然和编译器有关系,我觉着和printf的实现也有关系。
我手里没用51单片机,也没模拟器。我直接看的汇编部分。linux环境,sdcc编译器。
~/tmp$ uname -a
Linux P7 5.10.0-29-amd64 #1 SMP Debian 5.10.216-1 (2024-05-03) x86_64 GNU/Linux
~/tmp$ sdcc --version
SDCC : mcs51/z80/z180/r2k/r3ka/gbz80/tlcs90/ez80_z80/ds390/TININative/ds400/hc08/s08/stm8/pdk13/pdk14/pdk15 4.0.0 #11528 (Linux)
published under GNU General Public License (GPL)
~/tmp$
|
|