background image

    mov r5,a

    mov a,r6

    rrc a

    mov r6,a

    mov a,r7

    rrc a

    mov r7,a

    #pragma endasm

    return(x);

}

//end of asm.c

x=x*2;

x 为 4 位长整型。

r4567 是放 x 的

在 C51 中插入汇编问题!请教各位:

    1、我想在 C51 的程序中插入汇编程序,然后用 KEIL 编译。使用的格式是

       asm(" ljmp 8000h ");。但在用 keil 编译是提示有错。是否要 include

       什么头文件。

    2、在 C51 的源程序中能否进行绝对地址的调用与跳转。如;LCALL 8000H

       LJMP  8000H。

1。混合编程我也想学哦,不过我用 WAVE 试过几次都不行,现在听说 WAVE 有指令能用了,不过我没试过哦!

2。好象没有哦,不如没必要有呀,因为有都没用!

KEILC51 中是不能直接嵌入汇编,C196 就可以。

{f2)我使用的是 wave,可以先用 c51 编个子程序接口(定好接口变量),再在 a51 下用汇编编子程序。最后用 L51 把这两部分联结起来(注意用参数,避免

程序重叠)。我没用过什么特殊的头文件,至于是否可以用长跳转语句不是很清楚。

绝对地址跳转应该不能用。

楼上的说的对,keilc51 中要想嵌入汇编,必须单独写一汇编的程序文件,然后和 c51 的程序文件连接编译。其中还牵扯一些问题,参数、程序名等,去老古

那里看看吧

KEILC51 中是可以直接嵌入汇编,方法为#Pragma asm 

 

汇编行 #pragma ,注意在写汇编之后要

 

记得加 END 这样子就 OK 了。( 这样我试过了,编译时时需要勾选 SRC 项,不过软仿真执行时遇到莫名其妙的问题。如整个程序不从 MAIN 处执行等,不知

怎么回事?)