汉扬编程 编程大纲 c语言怎么转换成汇编语言

c语言怎么转换成汇编语言

理论上来说C语言改成汇编是完全可以的,当然实际上还是有一定难度。这里提供几种方法(推荐方法三)

c语言怎么转换成汇编语言

c语言怎么转换成汇编语言

方法一:

c语言怎么转换成汇编语言

完全手工根据C语言的流程和目的,改编成汇编语言,这样做工作量很大

方法二:

对于C语言先编译,调试,在DEBUG界面使用F10进行单步调试,会有与C对应的汇编代码。当然这个代码阅读性很差,需要手工做一些处理。

方法三:

利用仿真软件KEIL UVISION3,在仿真环境下,是有相应的汇编代码的,这样做工作量相对较小,但可读性较差。

Step 1:还是用Keil 3软件打开我们的工程,编译检查是否有错误警告

Step 2:点击Keil软件中的“Debug 仿真”按钮(下图中第二行 有小写“d”的按钮),进入软件单步调试模式,然后打开“汇编转换”窗口(红色圆圈处)

Step 3:调整程序显示交换窗口大小于位置,即可看到转换后的汇编语言,与刚才的转换效果相比,这次我们能看到每个分号语句对应的汇编语言操作,结合Keil 3软件的单步调试功能,学习也更加方便。

以下是单步调试模式时的效果,绿色表示我们已经执行的语句,黄色箭头表示此时我们正在运行的语句

以上就是c语言怎么转换成汇编语言的详细内容,更多请关注其它相关文章!

更多技巧请《转发 + 关注》哦!

汇编和c语言如何结合的?

  汇编语言没有高级语言要占用较大的存储空间和较长的运行时间等缺点,它的运行速度快是高级语言所不能比拟的。可以说高级语言与汇编语言各有千秋。有时我们采用高级语言编程速度达不到要求,全部采用汇编语言编程工作量又大,此时可以采用\”混合\”编程,彼此相互调用,进行参数传递,共享数据结构及数据信息,是一种有效的编程方法。
  这种方法可以发挥各种语言的优势和特点,充分利用现有的多种实用程序、库程序等使软件的开发周期大大缩短。
1 高级语言与汇编语言的接口需要解决的问题
1、需要说明和建立调用者与被调用者间的关系被调用的过程或函数应预先说明为外部类型,如汇编子程序,应用PUBLIC说明其可被外部模块引用;调用程序则应预先说明要引用的外部模块名。
  
2、参数传递问题在汇编子程序之间通常采用寄存器作为参数传递的工具,汇编语言与高级语言程序间的参数传递,一般采用堆栈来传递,即调用程序将参数依次压入堆栈中,当被转调用程序后,再从堆栈中依次弹出参数作为操作数使用。为此,必须了解各种语言的堆栈结构、生成方式和入栈方式等。
  BASIC、FORTRAN、PASCAL等语言其参数进栈顺序是与参数在参数表中出现的顺序相同,即从右到左;而C语言则相反。
2 C语言与汇编语言的接口
2。1 C语言调用汇编子程序
●在C程序中使用关键字\”ExTERn\”对函数作显式说明。
  
●参数传递顺序是按其在参数表中出现的顺序的反序被压入堆栈中,即第一个参数最后进入堆栈,它在栈中的地址最低。
●对不同的存储模式(极小、小、紧凑、中、大和巨)要选用不同的汇编语言格式,如C程序为小模式,汇编用近过程,C程序为大模式,汇编用远过程。
  
●汇编程序取C的参数。远过程返回地址占四个字节,BP压入占二字节,所以第一个参数在BP 6所指向的单元。对于近过程第一个参数在BP 4所指向的单元。
●汇编程序中寄存器的保护。TuRboC允许子过程使用SI和DI存放局部变量,当寄存器变量多于二个时,多余部分会自动转到堆栈中存储。
  因此,汇编过程的格式为:
PUSH BP
MOV BP,SP
PUSH DI
PUSH SI?
………。
语 句?
…………。
  
POP SI
POP DI
POP BP
RET
●返回值。每种C数据类型都有一个标准的返回位置,一般在AX中(极小、小、中模式),DX:AX(紧凑、大、巨模式),如:chaR,unSignEdchaR,Enum,ShoRTinT等,返回值位置为AX,且返回数据必须放置在RET指令之前。
  汇编子程序要定义为远过程,并用PUBLIC伪指令把过程名定义为公共。例
:#includE〃STdio。h〃
#includE〃STdlib。h〃
chaRMESSagE[]=〃MESSagE〃;
inTfaRREVSTR(chaRfaR STR);
Voidmain(Void)
{ REVSTR((chaRfaR )MESSagE);
printf(〃%S〃,MESSagE);
}
REVSTR。
  asm

PUBLIC-REVSTR-
REVSTR PROC
PUSH BP
MOVBP,SP
PUSH DS
PUSH SI
PUSH DI

POP SI
POP AX
MOV DS,AX
POP BP
MOV AX,CX
RET
REVSTR ENDP
END
2。
  2 C语言嵌入汇编
在C程序中允许直接编写汇编语言代码,这称作嵌入汇编。C程序中嵌入汇编后可以无分号(C语言的语句以分号结束,汇编语句是C语言中唯一以换行结束的语句),以关键词ASM张一个嵌入汇编指令,如需多个ASM语句,可以将它们放在花括号内。
  如,
ASMMOVAX,DX/ 注释 /
ASM
PUSHAX}/ 注释 /
C语言允许嵌入四类汇编命令:一般指令、串指令、跳转指令、数据分配和定义指令,嵌入汇编比调用汇编子程序更方便、灵活、功能也更强。
  但嵌入汇编不是一个完整的汇编程序,所以许多错误不能马上检查出来。
3 结 束 语
采用两种或两种以上的编程语言组合编程,彼此相互调用,进行参数传递,是一种有效的程序设计方法。这种方法可以充分发挥各种语言的优势,充分利用现有的实用程序,是当前程序接口技术的一个重要研究和应用领域。
  

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/mianfei/5998.html

数据结构C语言版冒泡排序的程序和应用,谁能帮我写一个。

C/C++大神程序员老司机带你玩转C语言指针详解

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部