⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c51pickfrankasm.htm

📁 这是有关C51和A51函数互调的方法总结.应用于混和编程.
💻 HTM
📖 第 1 页 / 共 5 页
字号:
        <TR>
          <TD width="100%">
            <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
              <TBODY>
              <TR>
                <TD width="26%"><SPAN style="FONT-SIZE: 9pt">main:</SPAN></TD>
                <TD width="74%"><SPAN 
                style="FONT-SIZE: 9pt">;主函数代码段起始;</SPAN></TD></TR></TBODY></TABLE></TD></TR>
        <TR>
          <TD width="100%"><SPAN style="FONT-SIZE: 9pt">;{</SPAN></TD></TR>
        <TR>
          <TD width="100%"><SPAN 
            style="FONT-SIZE: 9pt">;func(0x12,0x34);</SPAN></TD></TR>
        <TR>
          <TD width="100%">
            <TABLE border=0 cellPadding=0 cellSpacing=0 height=18 
              width="100%"><TBODY>
              <TR>
                <TD height=18 width="6%"></TD>
                <TD height=18 width="20%"><SPAN style="FONT-SIZE: 9pt">MOV 
                  R7,#02H</SPAN></TD>
                <TD height=18 width="74%"><SPAN 
                  style="FONT-SIZE: 9pt">;R7传递第一个char参数 <FONT 
                  color=#ff00ff>注:#02H应为#12H</FONT></SPAN></TD></TR></TBODY></TABLE></TD></TR>
        <TR>
          <TD width="100%">
            <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
              <TBODY>
              <TR>
                <TD width="6%"></TD>
                <TD width="20%"><SPAN style="FONT-SIZE: 9pt">MOV 
                  R5,#034H</SPAN></TD>
                <TD width="74%"><SPAN 
                  style="FONT-SIZE: 9pt">;R5传递第二个char参数</SPAN></TD></TR></TBODY></TABLE></TD></TR>
        <TR>
          <TD width="100%">
            <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
              <TBODY>
              <TR>
                <TD width="6%"></TD>
                <TD width="20%"><SPAN style="FONT-SIZE: 9pt">LCALL 
                _func</SPAN></TD>
                <TD width="74%"><SPAN 
                style="FONT-SIZE: 9pt">;调用函数func</SPAN></TD></TR></TBODY></TABLE></TD></TR>
        <TR>
          <TD width="100%"><SPAN style="FONT-SIZE: 9pt">;}</SPAN></TD></TR>
        <TR>
          <TD width="100%">
            <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
              <TBODY>
              <TR>
                <TD width="6%"></TD>
                <TD width="94%"><SPAN 
              style="FONT-SIZE: 9pt">RET</SPAN></TD></TR></TBODY></TABLE></TD></TR>
        <TR>
          <TD width="100%"><SPAN style="FONT-SIZE: 9pt">; uchar func(uchar 
            x,uchar y)</SPAN></TD></TR>
        <TR>
          <TD width="100%">
            <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
              <TBODY>
              <TR>
                <TD width="6%"></TD>
                <TD width="28%"><SPAN style="FONT-SIZE: 9pt">RSEG&nbsp; 
                  ?PR?_func?ASM_func:</SPAN></TD>
                <TD width="66%"><SPAN style="FONT-SIZE: 9pt">; 
                  函数func代码段起始&nbsp; <FONT color=#ff00ff>注:RSEG 
                  ?PR?_func?ASM<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  _func:</FONT></SPAN></TD></TR></TBODY></TABLE></TD></TR>
        <TR>
          <TD width="100%"><SPAN style="FONT-SIZE: 9pt">;{</SPAN></TD></TR>
        <TR>
          <TD width="100%"><SPAN style="FONT-SIZE: 9pt">; return 
          (x/y);</SPAN></TD></TR>
        <TR>
          <TD width="100%">
            <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
              <TBODY>
              <TR>
                <TD width="6%"></TD>
                <TD width="20%"><SPAN 
                  style="FONT-SIZE: 9pt">MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                A,R7</SPAN></TD>
                <TD width="74%"><SPAN 
              style="FONT-SIZE: 9pt">;计算x/y</SPAN></TD></TR></TBODY></TABLE></TD></TR>
        <TR>
          <TD width="100%">
            <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
              <TBODY>
              <TR>
                <TD width="6%"></TD>
                <TD width="20%"><SPAN 
                  style="FONT-SIZE: 9pt">MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                B,R5</SPAN></TD>
                <TD width="74%"></TD></TR></TBODY></TABLE></TD></TR>
        <TR>
          <TD width="100%">
            <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
              <TBODY>
              <TR>
                <TD width="6%"></TD>
                <TD width="94%"><SPAN 
                  style="FONT-SIZE: 9pt">DIV&nbsp;&nbsp;&nbsp;&nbsp; 
              AB</SPAN></TD></TR></TBODY></TABLE></TD></TR>
        <TR>
          <TD width="100%">
            <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
              <TBODY>
              <TR>
                <TD width="6%"></TD>
                <TD width="20%"><SPAN 
                  style="FONT-SIZE: 9pt">MOV&nbsp;&nbsp;&nbsp;&nbsp; 
                R7,A</SPAN></TD>
                <TD width="74%"><SPAN 
              style="FONT-SIZE: 9pt">;结果经R7返回</SPAN></TD></TR></TBODY></TABLE></TD></TR>
        <TR>
          <TD width="100%"><SPAN style="FONT-SIZE: 9pt">; }</SPAN></TD></TR>
        <TR>
          <TD width="100%">
            <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
              <TBODY>
              <TR>
                <TD width="6%"></TD>
                <TD width="94%"><SPAN style="FONT-SIZE: 9pt">RET 
              </SPAN></TD></TR></TBODY></TABLE></TD></TR>
        <TR>
          <TD width="100%">
            <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
              <TBODY>
              <TR>
                <TD width="6%"></TD>
                <TD width="94%"><SPAN 
              style="FONT-SIZE: 9pt">END</SPAN></TD></TR></TBODY></TABLE></TD></TR>
        <TR>
          <TD width="100%">
            <P align=justify><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp; 
            从上列汇编程序可以看出,函数名func前有一个前缀字符“_”,这表明该函数含有寄存器内的参数传递,寄存器R7和R5用来传递参数,计算结果经R7返回。如果在前述的C源文件中用“#pragma 
            NOREGPARMS”控制命令禁止寄存器内的参数传递,则所有参数均通过固定的存储区域传递。</SPAN></P><B>
            <P align=justify><SPAN style="FONT-SIZE: 9pt"><FONT color=#800080>3 
            应用举例</FONT></SPAN></B></P>
            <P align=justify><SPAN style="FONT-SIZE: 9pt"><FONT 
            color=#800080><B>3.1 汇编中调用C51函数</B></FONT></SPAN></P>
            <P><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp; 
            C51源文件func51.C中有一个名为func的函数,它完成某算术运算功能,该C源文件清单如下:<BR>#pragma 
            NOREGPARMS<BR>#include &lt;reg51.h&gt;<BR>#include 
            &lt;math.h&gt;<BR>unsigned char func(unsigned int v_a,unsigned int 
            v_b)<BR>{<BR>return sqrt(v_a/v_b);&nbsp; /* 计算<IMG 
            alt="HR5.gif (152 bytes)" height=17 
            src="c51pickfrankasm.files/hr5.gif" width=76>并返回结果 
            */<BR>}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp; 
            该函数需传递两个用于运算的参数,本例用“NOREGPARMS”命令禁止寄存器内的参数传递,即两个参数均在存储器区域内传递,且选择SMALL存储器模式。那么,在汇编中调用该函数的程序清单如下(文件名ASM51.A51):</SPAN></P>
            <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
              <TBODY>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="30%"><SPAN 
                        style="FONT-SIZE: 9pt">EXTRN&nbsp;&nbsp; 
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CODE (func) </SPAN></TD>
                      <TD width="70%"><SPAN 
                        style="FONT-SIZE: 9pt">;外部函数func声明</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="30%"><SPAN 
                        style="FONT-SIZE: 9pt">EXTRN&nbsp;&nbsp; 
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATA 
                      (?func?BYTE)</SPAN></TD>
                      <TD width="70%"><SPAN 
                        style="FONT-SIZE: 9pt">;外部函数func局部变量传送段声明</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="30%"><SPAN 
                        style="FONT-SIZE: 9pt">funca51&nbsp;&nbsp;&nbsp; SEGMENT 
                        CODE</SPAN></TD>
                      <TD width="70%"><SPAN 
                        style="FONT-SIZE: 9pt">;funca51代码代声明</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="30%"><SPAN 
                        style="FONT-SIZE: 9pt">VAR&nbsp;&nbsp;&nbsp;&nbsp; 
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SEGMENT DATA 
                        </SPAN></TD>
                      <TD width="70%"><SPAN 
                        style="FONT-SIZE: 9pt">;局部变量段声明</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="30%"><SPAN 
                        style="FONT-SIZE: 9pt">STACK&nbsp;&nbsp; 
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SEGMENT 
                      IDATA</SPAN></TD>
                      <TD width="70%"><SPAN 
                        style="FONT-SIZE: 9pt">;堆栈段声明</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="10%"></TD>
                      <TD width="20%"><SPAN style="FONT-SIZE: 9pt">RSEG 
                        VAR</SPAN></TD>
                      <TD width="70%"><SPAN 
                        style="FONT-SIZE: 9pt">;局部变量段</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="10%"><SPAN 
                      style="FONT-SIZE: 9pt">a_v:</SPAN></TD>
                      <TD width="20%"><SPAN style="FONT-SIZE: 9pt">DS&nbsp; 2 
                        </SPAN></TD>
                      <TD width="70%"><SPAN 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -