作者ksmrt0123 (ksmrt)
看板ASM
标题Re: [问题] 8051的一些小问题(修正)
时间Mon Mar 22 17:24:46 2010
※ 引述《eternal1879 (疯狂米虫)》之铭言:
可是我只知道用ADD来计算 可是这样会使A溢位
也想过利用类似逻设的半加法的方法..可是这样要写很多回圈
16BIT是利用这样写吗..?
应该不是吧...
===============================================================
C编出来的code是初学ASM时很好的参考.
下面这个C程式:
unsigned int a, b, c, d;
main()
{
c = a + b;
d = c >> 4;
}
Keil C 会编译成下面的ASM code.
2: main()
3: {
4: c = a + b;
C:0x0003 E509 MOV A,0x09
C:0x0005 250B ADD A,0x0B
C:0x0007 F50D MOV 0x0D,A
C:0x0009 E508 MOV A,a(0x08)
C:0x000B 350A ADDC A,b(0x0A)
C:0x000D F50C MOV c(0x0C),A
5: d = c >> 4;
C:0x000F C4 SWAP A
C:0x0010 F8 MOV R0,A
C:0x0011 54F0 ANL A,#B(0xF0)
C:0x0013 C8 XCH A,R0
C:0x0014 68 XRL A,R0
C:0x0015 F50E MOV d(0x0E),A
C:0x0017 E50D MOV A,0x0D
C:0x0019 C4 SWAP A
C:0x001A 540F ANL A,#0x0F
C:0x001C 48 ORL A,R0
C:0x001D F50F MOV 0x0F,A
6: }
C:0x001F 22 RET
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.68.71.218