汇编语言

gcc -S xx

感情迁移 提交于 2020-01-25 16:55:08
编译器的核心任务是把C程序翻译成机器的 汇编语言 (assembly language)。汇编语言是人类可以阅读的编程语言,也是相当接近实际机器码的语言。由此导致每种 CPU 架构都有不同的汇编语言。 实际上, GCC 是一个适合多种 CPU 架构的编译器,不会把C程序语句直接翻译成目标机器的汇编语言,而是在输入语言和输出汇编语言之间,利用一个中间语言,称为 RegisterTransfer Language(简称 RTL,寄存器传输语言)。借助于这个抽象层,在任何背景下,编译器可以选择最经济的方式对给定的操作编码。 而且,在交互文件中针对目标机器的抽象描述,为编译器重新定向到新架构提供了一个结构化的方式。但是,从 GCC 用户角度来看,我们可以忽略这个中间步骤。 通常情况下,GCC 把汇编语言输出存储到临时文件中,并且在汇编器执行完后立刻删除它们。但是可以使用 -S 选项,让编译程序在生成汇编语言输出之后立刻停止。 如果没有指定输出文件名,那么采用 -S 选项的 GCC 编译过程会为每个被编译的输入文件生成以 .s 作为后缀的汇编语言文件。如下例所示: $ gcc -S circle.c 编译器预处理 circle.c,将其翻译成汇编语言,并将结果存储在 circle.s 文件中。 如果想把 C语言 变量的名称作为汇编语言语句中的注释,可以加上 -fverbose-asm 选项:

02 编程语言与Python介绍

别等时光非礼了梦想. 提交于 2020-01-19 04:43:19
编程语言与Python介绍 一 引子 二 编程语言分类 2.1 机器语言 2.2 汇编语言 2.3 高级语言 2.3.1 编译型(如C语言) 2.3.2 解释型(如python) 2.4 总结 三 Python介绍 3.1 Python解释器的发展史 3.2 Python解释器有哪些种类? 四 安装Cpython解释器 4.1、下载python解释器 4.2、安装python解释器 4.3、测试安装是否成功 五 第一个Python程序 5.1 运行python程序有两种方式 5.2 Python执行程序的三个阶段 5.3 注释 六 IDE工具Pycharm的使用 6.1 什么是IDE?为什么要有IDE? 6.2 pycharm安装 6.3 Pycharm 创建文件夹 6.4 创建文件并编写程序执行 一 引子 基于上一章所学,有了计算机硬件,在在硬件之上安装好操作系统,我们就有了一个应用程序的运行平台,我们接下来的任务就是学习如何用某款编程语言来开发应用程序。 本章的主题是带大家熟悉一下编程语言,然后重点介绍python这门编程语言。 二 编程语言分类 2.1 机器语言 机器语言是站在计算机(奴隶)的角度,说计算机能听懂/理解的语言。 而计算机能直接理解的就是二进制指令,所以机器语言就是直接用二进制编程。 这意味着机器语言是直接操作硬件的,因此 机器语言属于低级语言 。

汇编语言学习分享(三)

扶醉桌前 提交于 2020-01-15 21:56:37
字的存储 在上一篇中说到一个16位寄存器可以存放一个字(16位)或者一个字节(8位),当存放一个字节的时候只需要一个内存单元(内存单元是以字节为单位的,8位),而存放一个字需要两个内存单元,这样存放一个字就需要两个连续的内存单元,这个16位的字, 高位存放在高地址,低位存放在低地址 。 内存地址 内存数据 0 20H 1 4EH 2 12H 3 00H 对于字来说0就是低地址单元,1是高地址单元,则字型数据4E20H的低地址位20存放在0号单元,高地址位4E存放在高地址单元,因为它的起始地址为0,又可以称作0地址字单元。 段地址寄存器 通过前面学过的知识我们可以知道当CPU想要对一个内存单元进行操作时,必须知道它的地址,要知道内存单元的地址就要知道它的段地址和偏移地址,在8086 CPU中,DS寄存器就是用来存放段地址的,执行指令的时候,CPU会自动读取DS中的数据为内存单元的段地址,使用 [偏移地址] 来表示偏移地址,假设DS寄存器中此时存放的是1000H,那么 mov al,[0] 就表示将10000H(物理地址=段地址x16+偏移地址)地址上存放的数据存到al中。 如果想要修改DS寄存器中的值,那么直接使用mov指令将数字存到DS寄存器中是不行的,只能先将值存到一个寄存器中,再使用mov指令将这个寄存器中的值存到DS中,例: mov bx,1000H mov ds,bx

ios必须知道的事情

佐手、 提交于 2020-01-15 20:37:30
一、 学前提醒 其实 iOS 开发就是开发 iPhone\iPad 上的软件,而要想开发一款软件,首先要学习程序设计语言 iOS 开发需要学习的主要程序设计语言有: C 语言、 C++ 、 Objective-C ,其中 C++ 、 Objective-C 都是以 C 语言为基础,从 C 语言衍生出来的。因此, C 语言是开发 iOS 软件的基础。 从现在开始,沉下心来学习传说中的 C 语言,学习它的语法 正式学习之前,先提醒一句:学习一门语言的语法是比较枯燥的事,很像是在学习 1+1 等于几,不可能在学习 C 语言语法过程中就能马上做出一些好看的 iPhone 软件界面效果 二、 计算机和软件常识 1. 计算机运行原理 1) 硬件基本组成:硬盘、内存、 CPU 2) 各个部件之间的运作协调(右图) 2. 计算机只能识别 0 和 1 1) 0 和 1 组成的指令 2) 0 和 1 组成的数据 3. 计算机和软件的联系 1) 软件的基本概念:指令的集合 2) 软件的安装运行过程 u 安装在硬盘 u 运行在内存 3) 为什么要开发软件:写出能控制计算机的指令 4. 计算机语言 1) 一门跟计算机打交道的语言 2) 方便写出一连串的指令 三、 计算机语言发展史 1. 机器语言 1) 简介:所有代码里面只有 0 和 1 ,每一条指令称为“机器指令” 2) 优点 u 代码能被计算机直接识别

汇编语言

强颜欢笑 提交于 2020-01-15 05:59:41
文章目录 1.8086的寻址方式 1.1 立即数寻址方式 1.2 寄存器寻址方式 1.3 存储器寻址方式 1.4 数据寻址寻址方式 2.8086 指令系统 2.1 数据传送指令 2.2算数运算类指令 2.3位操作指令 2.4控制转移指令 2.5处理机控制类指令 3.汇编语言程序格式 3.1 参数、变量和符号 3.2 复杂数据结构 3.2 汇编语言程序开发 程序题: 汇编语言:求最大值 统计二进制中1的个数(汇编) 1.8086的寻址方式 1.1 立即数寻址方式 1.2 寄存器寻址方式 1.3 存储器寻址方式 1.4 数据寻址寻址方式 2.8086 指令系统 2.1 数据传送指令 MOV(传送指令) XCHG(交换指令) XLAT(换码指令) PUSH(进栈指令) POP(出栈指令) LAHF(标志送AH指令) SAHF(AH送标志指令) PUSHF(标志进栈指令) POPF(标志出栈指令) LEA (有效地址传送指令) LDS/LES(指针传送指令) 2.2算数运算类指令 CF(进位指令) OF(溢出指令) INC(增量指令) DEC(减量指令) ADD(加法指令) SUB(减法指令) MUL(无符乘法指令) IMUL(有符乘法指令) DIV(无符除法指令) IDIV(有符除法指令) 2.3位操作指令 逻辑运算指令: AND(逻辑与指令) OR(逻辑或指令) XOR(逻辑异或指令)

汇编语言学习分享第2章

风流意气都作罢 提交于 2020-01-14 20:05:55
CPU的组成 CPU是由运算器(信息处理)、控制器(控制器件工作)、寄存器(信息存储)等器件组成,他们之间通过总线相连。 通用寄存器 通用寄存器时用于存放一般性数据的,以8086 CPU为例,8086 CPU所有的寄存器都是16位的,8086 CPU中的通用寄存器有AX、BX、CX、DX。为了兼容上一代CPU中的8位寄存器,这4个寄存器都可以拆成两个8位的寄存器使用,也就是将16位分成两个8位,AX可分为AH和AL,BX可分为BH和BL,CX可分为CH和CL,DX可分为DH和DL。这里的H可以记为High,高位,L可以记为Low,低位。 再来说一下数据宽度,因为寄存器有16位和8位两种,所以数据宽度可以分为字节和字,一个字节由8个bit组成,可以直接使用低位存储,一个字由两个字节,也就是16位,比如一个十六进制3E10,将这个十六进制存放到AX寄存器总,3E就存放在高位AH中,10存放在低位AL中。 内存单元的物理地址 之前说过数据是通过地址线存放在内存单元中的,那么就必须要确定这个内存单元的地址。 基础地址=段地址x16 基础地址+偏移地址=物理地址 所以 物理地址=段地址x16+偏移地址 ,这里的16是十进制的16,也就是十六进制的A。 这里的段地址可以理解为一段一段的内存存储单元,但是段地址并不是固定的,可以认为10000H-100FFH是一个段

python day1

六月ゝ 毕业季﹏ 提交于 2020-01-14 00:14:18
第一章 什么是python 使用python的公司 Google ,dropbox(美国版百度网盘,py的创始人Guido van Rossum目前就在dropbox),YouTuBe(全球最大的视频网站),UBER,Quora(美国版的知乎),instagran(美国版的朋友圈,被facebook收购9亿美金,整个公司才13个人);yelp(世界杯大众点评),豆瓣,知乎; 初创公司比较喜欢使用python。 就业前景 Pythone未来十年发展预测 未来十年,python在中国的发展会怎样?使用python的企业会不会越来越多?python主要被运用的领域有哪些?使用Python的程序员会越来越多还是越来越少? Life is short,you need python! 计算机语言 计算机只能识别的语言为二进制,0和1, 编程语言种类 汇编语言 汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。汇编程序通常由三部分组成:指令、伪指令和宏指令。汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作。例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的

使用gcc编译C程序

℡╲_俬逩灬. 提交于 2020-01-12 20:14:16
GCC 全称"GNU C Compiler",不过自从面世后,增加了多种语言的支持,不过用的最多的是还是编译C或C++程序(另外有个工具叫做G++)。GCC是一种多目标编译器,通过可交互的后端处理器,为多种计算机架构生成可执行程序。 话说回来,什么是编译器呢? 编译器并不是一个单一的程序,它们通常由六七个稍小的程序组成,这些程序由一个叫做“编译器驱动器(Compiler driver)"的控制程序调用。 编译器一般由以下几部分组成: 预处理器(preprocessor) 语法和语义检查器(syntactic and semantic checker) 代码生成器(code generator) 汇编程序(assembler) 优化器(optimizer) 链接器(linker) 链接器确认main函数的初始进入点(程序开始执行的地方),把符号引用(symbolic reference)绑定到内存地址,把所有的目标文件集中到一起,再加上库文件,从而产生可执行文件。 本文主要介绍使用GCC编译C程序,不过GCC不支持C语言的许多“方言”,目前一般使用命令行参数 -std=c99 指定编译器支持C99标准。GCC对C11的标准支持是不完整的,尤其是涉及定义在头文件<threads.h>中的多线程函数。这是因为GCC的C链接库长期以来支持POSIX标准的多线程功能

程序设计语言发展回顾与展望

夙愿已清 提交于 2020-01-12 19:25:20
文章转载自:计算机世界网,原文链接地址:http://www2.ccw.com.cn/1995/13/138106.shtml 编者按:程序设计语言是与现代计算机共同诞生、共同发展的,至今已有40余年的历史,早已形 成了规模庞大的家族。进入80年代以后,随着计算机的日益普及和性能的不断改进,程序设 计语言也相应得到了迅猛发展。 《程序设计语言发展回顾与展望》一文对程序设计语言的发展历程进行了回顾,并对一 些著名语言的背景、特点、长处与不足,及其对程序设计语言发展的贡献作出了评述。 《面向对象方法、语言与支撑环境的特征与缺陷》一文对面向对象方法、语言与支撑 环境的优缺点进行了详细的评述,并对其发展方向做出了展望。 《实时程序语言的过去、现在和将来》一文中,阐述了计算机实时应用中对程序设计语 言的特殊要求,介绍了一些具有代表性的实时语言的设计和使用,并指出了实时程序设计语 言的发展方向。 《三种Windows Basic的介绍》一文中,介绍了用于Windows环境下的Basic语言的发展 情况。对Windows下的CA-Realizer 2.0、GFA Basic 4.1O和Visual Basic 3.0进行了介绍 和比较。 本期技术纵横:《奔腾(Pentium)芯片的瑕疵》。文中对Pentium芯片在做双精除法时出 现错误的发现过程做了详细介绍,并分析了这种瑕疵产生的原因

汇编语言学习02之布尔表达式

柔情痞子 提交于 2020-01-11 06:59:07
汇编语言的布尔表达式 ##布尔代数 布尔代数(boolean algebra)定义了一组操作,其值为真(true)或假(false)。它的发明者是十九世纪中叶的数学家乔治・布尔(George Boole)。 在数字计算机发明的早期,人们发现布尔代数可以用来描述数字电路的设计。同时,在计算机程序中,布尔表达式被用来表示逻辑操作。 一个布尔表达式(boolean expression)包括一个布尔运算符以及一个或多个操作数。每个布尔表达式都意味着一个为真或假的值。以下为运算符集合: 非(NOT):标记为 ¬ 或 ~ 或 ’ 与(AND):标记为^或 · 或(OR):标记为 ∨ 或 + NOT 是一元运算符,其他运算符都是二元的。布尔表达式的操作数也可以是布尔表达式。示例如下: 汇编语言的布尔表达和其它编程语言相同 来源: CSDN 作者: 猪猪家的小可爱 链接: https://blog.csdn.net/qq_43156233/article/details/103832563