混合编程调用子程序疑问?

kennan   2008-4-8 10:25 楼主
按照2812开发板的一个混和编程调用子程序做个实验
主程序如下:
int add(int a,int b);
int x=0,y=0,z=0;

main()
{   
        x=3; y=17;
        while ( 1 )
        {
                z=add(x,y);       
                x+=1;
                y+=1;       
               
        }       
}
调用情况时,C子程序另存文件名add.c如下:
int add(int a,int b);
{
  return(a+b);
}
C相对应的Disassembly相应段为
0800BF      add:
0800BF FE02 ADDB    SP,#2
0800C0 9742 MOV     *-SP[2],AH
0800C1 9641 MOV     *-SP[1],AL
0800C2 9242 MOV     AL,*-SP[2]
0800C3 9441 ADD     AL,*-SP[1]
0800C4 FE82 SUBB    SP,#2
0800C5 0006 LRETR  

而调用调用汇编,asm程序文件add.asm如下:

FP        .set        XAR2
        .file        \"add.c\"

        .sect        \".text\"
        .global        _add
        .sym        _add,_add, 36, 2, 0
        .func        2

_add:
;        .line        2
;* AL    assigned to _a
        .sym        _a,0, 4, 17, 16
;* AH    assigned to _b
        .sym        _b,1, 4, 17, 16
        .sym        _a,-1, 4, 1, 16
        .sym        _b,-2, 4, 1, 16
        ADDB      SP,#2
        MOV       *-SP[2],AH            ; |3|
        MOV       *-SP[1],AL            ; |3|
;        .line        3
        MOV       AL,*-SP[2]            ; |4|
        ADD       AL,*-SP[1]            ; |4|
;        .line        4
        SUBB      SP,#2                 ; |4|
        LRETR
        ; return occurs
        .endfunc        5,000000000h,2

汇编情况下的disassembly和C的相同
为什么汇编的子程序中虚多加一些?什么作用?






回复评论 (3)

有很多是引用说明呀!
还有一些。SECT等是伪指令
点赞  2008-4-8 10:48

r

    .func        .sym        哪位兄弟能给解释一下?
点赞  2008-4-9 03:08
我没用过28的,你看下书后的附录应该有讲解
点赞  2008-4-9 05:11
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复