C语言教学程序调试之汇编指令分析.docx

C语言教学程序调试之汇编指令分析.docx

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

?

?

C语言教学程序调试之汇编指令分析

?

?

摘要:为了提升大学生对C语言语法原理的理解,通过对比C语言语句与汇编指令,提出了一种在程序调试时使用汇编指令去理解分析C语言语法原理的方案。首先对C语言可执行程序的运行原理进行了介绍,然后介绍了JFEandGCC软件的调试功能,再然后区分了ATT与Intel汇编指令的不同之处,最后就一个程序调试的实例进行了汇编指令分析。实验关于赋值语句的机器指令分析,验证了C语言在编译时确定局部变量的地址空间,实验体现了汇编指令分析有效、实用。

关键词:C语言;可执行程序;JFEandGCC;汇编指令;程序调试

:TP312:A

:1009-3044(2020)29-0147-03

《程序设计语言(C)》(或称为《大学计算机A(2)》)是大中专院校大学一年级理工科学生的公共基礎必修课,该课程教学内容知识点繁多、逻辑思维抽象,对于刚进人大学的新生而言,存在一定的难度;教学时间一般为72课时,分18周进行,理论课时36个或40个,实践课时36个或32个。巨同升认为,讲授该门课程时纯粹以语法为导向,耗费了大量时间和精力,教学效果却不理想[1]。马金霞提倡翻转课堂教学法,其中提到“让学生来当老师,让学生主宰课堂”[2],认为这样能够充分调动学生学习的主动性和积极性。当前的C语言程序设计教学存在“以语法为导向”与“以教学手段为导向”这两个主要的方向。本文针对C语言的内涵,挖掘C语言与汇编指令的关联,提出一种在程序调试时使用汇编指令去理解分析C语言语法原理的教学方法。C语言是一种贴近人类自然语言的高级编程语言,C语言编写的源代码在经过编译软件预处理和汇编后,将被转化为汇编指令源代码,分析此汇编源代码,可以更好地理解C语言的语句代码如何展开执行。

1C语言可执行程序的运行原理

C语言编写的可执行文件这样执行:首先,由C标准库函数(C运行时库)执行“启动代码”;紧接着,载人由程序员所编写代码转化而来的指令序列;然后,指令序列进入maln函数,这个mam函数是一个主控函数,它将按顺序执行指令序列,并且根据mam函数体的具体内容调用其他函数,这些其他函数既有程序员自己编写的函数也有C语言标准库函数;再接着,mam函数将控制权移交给C语言标准库函数,再执行标准库函数中的“关闭代码”;关闭代码执行完毕后,它将控制权移交给操作系统[3】。

2一个小巧易用的C编译软件JFEandGCC

JensFileEditor(JFE),是新西兰梅西大学(MasseyUniver-sity)Albany校区科学(Science)院计算机科学(ComputerSci-ence)系开发的一款软件,旨在为GCCC/C++编译器提供集成的开发环境。JFE是免费软件,随附的GCC和GDB是开源软件(OpenSourceSoftware),编辑器采用g++2.95版本,适用于Win-dows系列操作系统(OperatingSystem)下。使用JFEandGCC软件编写C语言源代码,不需要新建工程,只需要在保存时选择一个文件夹把文件保存为*.c文件(*为通配符,表示1到多个字符)。编写好代码,编译通过之后,点击Run命令,Debug执行开始。前进执行一条C语言语句,点击工具栏的Step命令;前进执行一条汇编语句,点击工具栏的StepAsmInst命令。两个命令结合起来,再打开寄存器窗口和内存窗口,并且在内存窗口左上角的右侧带滚动条的Address文本框中输入相应地址或者点击滚动按钮,可以很方便地观察内存地址中所储存数值的变化。

3ATT与Intel汇编指令不同之处

当前,标准C语言运行在32位的保护模式下,分析汇编代码时主要用到的CPU(CentralProcessingUnit中央处理器)寄存器分别为:4个数据寄存器(EAX、EBX、ECX和EDX),2个变址索引寄存器(ESI和EDI),2个指针寄存器(ESP和EBP),1个指令指针寄存器(EIP),1个标志寄存器(EFlags)。JFEandGCC软件使用ATTLinux操作系统汇编指令格式,与Intel汇编指令格式大同小异,都是基于X86架构。它们之间的不同表现在:CI)ATT和Intel格式中的源操作数和目标操作数的位置正好相反,在Intel汇编格式中,目标操作数在源操作数的左边,比如movebp,esp而在ATT汇编格式中,目标操作数在源操作数的右边,比如mov%esp,%ebp。(2)在ATT汇编格式中,寄存器名要加上‘%作为前缀,比如push%ebp;而在Intel汇编格式中,寄存器名不需要加前缀,比如pushebp。(3)在ATT汇编格式中,用‘$前缀表示一个立即操作数,比如mov$0x0,%ea

文档评论(0)

159****4221 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档