CSDN话题挑战赛第2期
参赛话题:学习笔记

目录

一、汇编语言和本地代码

二、通过编译器输出汇编语言的源代码


一、汇编语言和本地代码

计算机CPU只能运行本地代码(机器语言)程序,用C语言等高级语言编写的代码,需要经过编译器编译后,转换为本地代码才能够被CPU解释执行

但是本地代码的可读性非常差,所以需要使用一种能够直接读懂的语言来替换本地代码,那就是在各本地代码中,附带上表示其功能的英文缩写,比如在加法运算的本地代码加上 add(addition)的缩写、在比较运算符的本地代码中加上 cmp(compare)的缩写等,这些通过缩写来表示具体本地代码指令的标志称为 助记符,使用助记符的语言称为 汇编语言。这样,通过阅读汇编语言,也能够了解本地代码的含义了

不过,即使是使用汇编语言编写的源代码,最终也必须要转换为本地代码才能够运行,负责做这项工作的程序称为 编译器,转换的这个过程称为 汇编。在将源代码转换为本地代码这个功能方面,汇编器和编译器是同样的

用汇编语言编写的源代码和本地代码是一一对应的。因而,本地代码也可以反过来转换成汇编语言编写的代码。把本地代码转换为汇编代码的这一过程称为 反汇编,执行反汇编的程序称为 反汇编程序

本地代码和汇编语言一对一的转换:

哪怕是C语言编写的源代码,编译后也会转换成特定的CPU用的本地代码。而将其反汇编的话,就可以得到汇编语言的源代码,并对其内容进行调查。不过,本地代码变成C语言源代码的反编译,要比本地代码转换成汇编代码的反汇编要困难,这是因为,C语言代码和本地代码不是一一对应的关系

二、通过编译器输出汇编语言的源代码

本地代码可以经过反汇编转换成为汇编代码,但是只有这一种转换方式吗?显然不是,C语言编写的源代码也能够通过编译器编译称为汇编代码,下面可以进行尝试一下

首先需要先做一些准备,需要先下载 Borland C++5. 5 编译器,为了方便,我这边直接下载好了读者直接从我的百度网盘提取即可(链接:https://pan.baidu.com/s/19LqVICpn5GcV88thD2AnIA密码:hz1u)

下载完毕,需要进行配置,下面是配置说明(https://wenku.baidu.com/view/22e2f418650e52ea551898ad.html),教程很完整跟着配置就可以,下面开始我们的编译过程

首先用 Windows 记事本等文本编辑器编写如下代码

// 返回两个参数之和的函数
int AddNum(int a,int b){return a + b;
}// 调用AddNum 函数的函数
void MyFunc(){int c;c = AddNum(123,456);
}

编写完成后将其文件名保存为Sample4.c,C语言源文件的扩展名,通常用.c来表示,上面程序是提供两个输入参数并返回它们之和。

在Windows 操作系统下打开 命令提示符,切换到保存Sample4.c的文件夹下,然后在命令提示符中输入

bcc32-c-S Sample4.c

bcc32 是启动 Borland C++的命令,-c 的选项是指仅进行编译而不进行链接,-S选项被用来指定生成汇编语言的源代码

作为编译的结果,当前目录下会生成一个名为 Sample4.asm 的汇编语言源代码。汇编语言源文件的扩展名,通常用.asm来表示,下面就让我们用编辑器打开看一下 Sample4.asm中的内容:

.386p
ifdef ??verdion
if ??version GT 500H
.mmx
endif
endif
model flat
ifndef ??version
?debug macro
endm
endif
?debug S "Sample4.c"
?debug T "Sample4.c"
_TEXT segment dword public use32 'CODE'
_TEXT ends
_DATA segment dword public use32 'DATA'
_DATA ends
_BSS segment dword public use32 'BSS'
_BSS ends
DGROUP group _BSS,_DATA
_TEXT segment dword public use32 'CODE'
_ADDNUM proc near
?livel1@0:;; int AddNum(int a,int b){;push    ebpmov     ebp,esp;;;    return a + b;;
@1:mov    eax,dword ptr [ebp+8]add    eax,dword ptr [ebp+12];;  ;;
@3:
@2:pop    ebpret
_AddNum endp
_MyFunc proc near
?livel@48:;;  void MyFunc(){;push    ebpmov     ebp,esp;;    int c;;    c = AddNum(123,456);;
@4:push    456push    123call    _AddNumadd     esp,8;;  };
@5:pop    depret
_MyFunc endp
_TEXT endspublic _AddNumpublic _MyFunc?debug D "Sample4.c" 20343 45835end

这样编译器就能成功把C语言转换成汇编代码了

汇编语言和本地代码及通过编译器输出汇编语言的源代码相关推荐

  1. 【汇编语言学习之路】第一章 汇编语言核心方法论

    版权声明:本学习笔记是本人根据小甲鱼"汇编语言学习课程"和<汇编语言>(王爽)的书籍,来记录笔记的 1 汇编语言核心方法论 1.1 学习汇编语言的必要性 汇编语言与机器 ...

  2. 汇编语言与汇编器(目前有哪些汇编语言与汇编器)

    以下内容源于网络资源的学习与整理,如有其侵权请告知删除. 一.汇编语言概述 机器指令集(由众多机器码指令构成的集合)是由CPU的设计者制定的,CPU的内部电路设计就是为了实现这些指令集的功能.可以这样 ...

  3. c语言与汇编语言混合编程实验,C语言与汇编语言混合编程实验

    混合编程方法: 模块链接法 汇编指令嵌入法 1: 模块链接法则 模块链接法是指分别用汇编语言和C语言实现独立的模块(或子程序),再用链接程序把各模块生成的obj文件连接成一个可执行程序. 1:C语言调 ...

  4. x86汇编语言从实模式百度云_x86汇编语言:从实模式到保护模式

    x86汇编语言:从实模式到保护模式2013年1月由电子工业出版社出版发行,总共6000行的源代码,全方位地向读者展现汇编语言程序设计之美.尽管汇编语言也是一种计算机语言,但却是与众不同的,与它的同类们 ...

  5. 计算机专业需要汇编语言,重点大学计算机专业系列教材·汇编语言程序设计

    重点大学计算机专业系列教材·汇编语言程序设计 语音 编辑 锁定 讨论 上传视频 本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! <重点大学计算机专业系列教材·汇编语言程 ...

  6. DSP编程技巧---C/C++与汇编语言的交互之-使用编译器的内联函数

    在C/C++与汇编语言混合编程的情况下,一般我们都会选择C/C++来实现所期待的功能.在我们用C/C++来实现某些位操作.数学运算等功能后,编译器会尽可能地把它们编译为一些已经高度优化的汇编函数(内联 ...

  7. [MIPS汇编语言]对于数的输入和输出

    [汇编语言学习开始了] 代码如下: 经过了PCspim模拟器的检验,没有问题的代码 写汇编的语句都是写了很多的注释的,不用担心看不懂. (要是不写,自己都可能看不懂) .text .globl mai ...

  8. 高级语言(C语言)、汇编语言、机器语言区别?编译器如何将高级语言编译成机器语言?

    ⾼级语⾔: 是相对于汇编语⾔⽽⾔的,是⾼度封装了的编程语⾔,与低级语⾔相对.它是以⼈类的⽇常语⾔为基础的⼀种编程语⾔,使⽤⼀般⼈易于接受的⽂字来表⽰(例如汉字.不规则英⽂或其他外语),从⽽使程序编写员 ...

  9. 汇编语言中常用进制数据输出的程序实现

    鲁明珠,赵晓华 (河北省沧州师范专科学校南校区,河北  沧州  061001) [摘   要]在用汇编语言编程时,学生认为将结果数据按不同的数制形式显示出来是一个难点.计算机中的机器数是按二进制形式进 ...

  10. c51矩形波输出汇编语言,51单片机汇编语言编程:用定时器控制输出矩形波

    80C51单片机的时钟频率为12MHz,利用定时器T1和P1.0输出矩形脉冲. 波形只画出了2段:一段为100us 另一段为50us. 要完全的.完整的.详细的编写此程序的过程!谢谢 -------- ...

最新文章

  1. 生物智能与AI——关乎创造、关乎理解(上)
  2. JVM从入门到放弃——JVM内存模型
  3. python循环报数游戏_报数游戏python 解答
  4. python连接数据库oracle_python 连接oracle数据库:cx_Oracle
  5. atitit.常用编程语言的性能比较 c c++ java
  6. 计算机网络按网络覆盖范围大小排序 从小到大为,现代远程网络教育概论试题及答案分析.pdf...
  7. 【sketchup 2021】草图大师软件安装和基本使用说明【工作环境工具添加设置、视口控制界 面放大缩小平移、选择工具、在线资源导入、人物误删了怎么恢复、网上下载模型导入到sketchup中流程】
  8. 如何高效的自学编程(新手篇)
  9. 【IoT】创业:产品雷达图 - 如何明智地权衡产品?
  10. 动态规划-背包问题求解过程【代码 from eason】
  11. Markdown学习之(2)-绘制表格和流程图
  12. 未能打开这台计算机的策略组对象,Windows7 组策略错误:“未能打开这台计算机上的组策略对象。您可能没有合适的权限。”...
  13. 消防应急灯锂电池供电2.5V-30V升压恒流驱动IC方案
  14. 如何用python自动改试卷_2019Python100道面试题,你会几道?
  15. vue create xxx创建项目过程中报错的解决方法
  16. 锂行业研究报告—(学习笔记)
  17. 阿里巴巴矢量图标库批量下载图标
  18. 绿盟赛—鲲鹏计算平台软件移植
  19. 智慧园区综合管理系统的实用案例分析
  20. Golang import 三种特殊形式:下划线、点、别名-from-csdner-9命怪猫

热门文章

  1. Java中处理tiff文件
  2. 真正的即插即用!盘点11种CNN网络设计中精巧通用的“小”插件
  3. 六自由度机械臂研究(3)- 机械臂DH参数表建立
  4. 什么软件可以更换手机ip地址
  5. ttvnc 服务器 自建,FastVNC(可以自架中心服务端的远程协助工具)
  6. org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection
  7. JAVA复习 (期末重点考点总结)
  8. TwinCAT 3 使用XML-server
  9. mysql 地理空间数据库_地理空间数据库
  10. ArcMap基于PG数据库创建企业级地理数据库