汇编语言

二、程序语言基础知识

假装没事ソ 提交于 2020-01-28 03:27:45
1.语言概述 基本概念    机器指令程序,最基本的计算机语言,二进制的机器指令序列;   汇编语言,书写格式取决于特定计算机的机器指令。   以上皆是低级语言,面向机器的语言。   高级语言:不依赖于机器硬件的程序语言。如:java、c、c++、php、python……   语言处理程序:将高级语言或汇编语言翻译为机器语言。     方式分为:汇编、解释、翻译     源程序     解释程序:即解释器,将源程序翻译为中间代码     编译程序:即编译器,将源程序翻译成目标语言程序      区别:解释器,不生成独立的目标程序,解释程序和源程序(或其某种等价表示)要参与到程序的运行过程中,运行程序控制权在解释程序;编译器,将源程序翻译成独立保存的目标程序在机器上运行,源程序和编译程序都不在参与到目标程序的执行过程中。   程序语言的定义:语法、语义、语用、语境   通用程序设计语言:程序语言能够用于范围广泛的问题求解过程。如c、java、   程序语言的分类:     命令式程序设计语言:基于动作的语言,面向过程。如c、结构化程序设计语言     面向对象程序设计语言:c++、java、     函数式程序设计语言:     逻辑型程序设计语言:   语言基本成分:数据、运算、控制、传输、     数据:名称、类型、存储类别、作用域、生存期       值是否改变分类:常量、变量

汇编语言六大基础伪指令详解

跟風遠走 提交于 2020-01-27 18:07:58
六大伪指令(基础) 1、OFFSET 变量是数据的存放地,对变量最常见的操作是从变量中取出数据和把数据放人变量中。 实现这些操作有 直接法和间接法两种方法。 以该寄存器加方括号的形式指明是用寄存器中的内容作为偏移地址,操作数在相应的内存 把保留字OFFSET加在变量名字的前面,表示取该变量的偏移地址。 汇编程序把"OFFSET变量名"作为一个常量处理,而常量本身是没有类型的。 不论变量在定义时是什么类型,在它的名字前面加上OFFSET后就变成了一个常量。 但是,既然"OFFSET变量名"是用来取变量的偏移地址,而偏移地址是有可能超过255的,超过255时当然就不能把它送到字节型寄存器中。也就是说.在没有准确掌握某个变量的偏移地址时,不要想当然地认为它的偏移地址会小于255。 既然"OFFSET变量名"是常量,就可以参与常量的算术运算。 把一个变量的偏移地址取到某个基址或变址寄存器后,就可以用该寄存器间接寻址方式实现对变量的处理。 间接法在高级语言中有着广泛的应用,在C 语言中表现为指针及其相关处理。 2、SEG 无论按直接法还是间接法使用变量,都会涉及变量的段地址问题。在汇编语言程序中,使用变量需要把其所在段的段地址放在某个段寄存器中,一般是放在DS或ES中,取变量的段地址也有两种方法。一是用变量所在段的段名。另一种方法是用 SEC伪指令放在某变量的前面,表示取该变量所在段的段地址

汇编语言-王爽——实验四

て烟熏妆下的殇ゞ 提交于 2020-01-26 21:27:24
问题 :编程,向内存0:200 ~ 0:23F依次传送数据 0~63(3FH),程序中只能使用九条指令。 分析:在这里,我使用了寄存器 dx 的低位 dl 来存储需要向内存中传输的数据。并在每次循环中,完成数据的传输与数据变化。 ;lab1 . ams assume cs : code code segment mov ax , 0 mov ds , ax mov bx , 200 h mov dl , 0 mov cx , 40 h s : mov [ bx ] , dl inc dl inc bx loop s mov ax , 4 c00h int 21 h code ends end 运行结果: 来源: CSDN 作者: 江明翰 链接: https://blog.csdn.net/weixin_44342238/article/details/104089040

汇编语言指令

拈花ヽ惹草 提交于 2020-01-26 21:26:19
指令助记符 如MOV, SUB这些词分别表示传送, 减法. 汇编源程序时, 系统使用内部对照表将每条指令的助记符翻译成对应的机器码 目的操作数 目的操作数一共有两个作用 参与指令操作 暂时储存操作结果 源操作数 源操作数主要提供原始数据或操作对象, 面向所有寻址方式. 例如, 在指令SUB AX, BX 中 的值作为减数提供给指令SUB 操作符 dup:表示定义重复的数据,和db、dw、dd配合使用,db 3 dup(‘A’)相当于db ‘AAA’。 注释 这是对源程序的说明, 在汇编中用 ; 号, 后面的内容将被注释   介绍指令前, 先熟悉下这些在指令中的符号(必须要记得) imme: 立即数 DST: 目的操作数 SRC: 源操作数 mem: 存储器操作数 OPR: 操作数 reg: 通用寄存器 EA: 偏移地址(偏移量) Sreg: 段寄存器 Port: 端口地址 Label: 标号 指令集不外乎下面几种: 数据传送指令 算术运算指令 逻辑运算与移位指令【整型 与 浮点型的处理】 串操作指令 程序控制指令 处理器控制指令 伪指令 一、数据传送【也叫转移】指令 通用数据传送指令. l MOV DST, SRC ;传送指令: 把源操作数的内容送入目的操作数 传送字或字节. 注意: 立即数做源操作数时, 立即数的长度必须小于等于目的操作数的长度 操作数DST, SRC分别为reg

汇编语言学习笔记(2)

南楼画角 提交于 2020-01-26 17:28:11
文章目录 汇编语言的组成: 指令和数据 CPU对存储器的读写 各类存储器芯片 内存地址空间 小结 汇编语言的组成: 1、汇编指令:机器码的助记符,有对应的机器码 2、伪指令:没有对应的机器码,由编译器执行,计算机并不执行 3、其他符号:由编译器识别,没有对应的机器码 指令和数据 指令和数据是应用上的概念。在内存或磁盘上,指令和数据没有任何区别,都是二进制信息。 CPU对存储器的读写 CPU要想进行数据读写,必须和外部器件进行下面三类信息交互 存储单元的地址(地址信息) 器件的选择,读或写的命令(控制信息) 读或写的数据(数据信息) 总线从逻辑上分为3类,地址总线、控制总线和数据总线。 各类存储器芯片 存储器芯片从读写属性上看分为两类:随机存储器(RAM)和只读存储器(ROM) 从功能和连接上又可以分为以下几类。 随机存储器 装有BIOS的ROM 接口卡上的RAM 内存地址空间 CPU在操纵各类存储器的时候,把它们都当作内存来对待,把它们总的看作一个由若干存储单元组成的逻辑存储器,这个逻辑存储器就是我们所说的内存地址空间。 小结 1、汇编指令是机器指令的助记符,同机器指令一一对应 2、每一种CPU都有自己的汇编指令集 3、CPU可以直接使用的信息在存储器中存放 4、在存储器中指令和数据没有任何区别,都是二进制信息 5、存储单元从零开始顺序编号 6、一个存储单元可以存储8个bit

汇编语言常用指令

纵然是瞬间 提交于 2020-01-26 09:18:17
1、堆栈相关指令 push:把一个32位的操作数压入堆栈中。这个操作导致esp被减4。esp被形象地称为栈顶。我们认为顶部是地址小的区域,那么,压入堆栈的数据越多,这个堆栈也就越堆越高,esp也就越来越小。在32位平台上,esp每次减少4(字节)。 pop:相反,esp被加4,一个数据出栈。pop的参数一般是一个寄存器,栈顶的数据被弹出到这个寄存器中。 sub:减法。第一个参数是被减数所在的寄存器;第二个参数是减数。(对应的还有add指令。) add:加法。 ret:返回。相当于跳转回调用函数的地方。(对应的call指令来调用函数,返回到call之后的下一条指令。)(本质相当于pop+jmp) call:调用函数。(本质相当于push+jmp) 2、数据传送指令 mov:数据移动。第一个参数是目的,第二个参数是来源。在C语言中相当于赋值号。 xor:异或。这虽然是逻辑运算的指令,但是有趣的是,xor eax,eax这样的操作常常用来代替mov eax,0。好处是速度更快,占用字节数更少。(见到xor eax,eax,应该马上明白这是清零操作。) lea:取得地址(第二个参数)后放入到前面的寄存器(第一个参数)中。(mov不支持后一个操作数写成寄存器减去数字,但是lea支持,所以可以用lea来代替它。) stos:看如下例子 mov ecx,30h mov eax

[LLVM]在汇编语言上插入指令

痴心易碎 提交于 2020-01-26 05:27:07
问题: LLVM 如何实现在汇编语言的 .s 文件中所有 call 指令前后添加2行固定指令? 答: LLVM 中 function 相关的 pass 用于修改 ir ,而 machine function 相关的 pas 用于修改 mir ,也就相当于修改生成的汇编 编写 machine function pass 然后遍历每个指令,在 call 之前调用 buildMI 函数插入需要的指令,这个 pass 必须在 code emit 之前,指令调度之后,为了避免指令调度把插入的固定指令移动到其它位置 判断一个 mir 是否 call 函数,可以使用 mi->desc().isCall 判断 来源: CSDN 作者: adream307 链接: https://blog.csdn.net/adream307/article/details/103885963

认识编程语言的分类

半城伤御伤魂 提交于 2020-01-26 00:14:24
编程语言的分类 一、机器语言 因为电脑只认识0、1。所以当人用0、1写出来让机器做事情。这就是机器语言。 优点:执行效率高(写出来0、1计算机就能做出来) 缺点:开发效率低(把一大串0、1写出来能记得住? 编写程序花费的时间往往是实际运行的几百上千倍,并且编出的都是0.1这样的指令,直观性差,还容易出错,除了计算机生产厂家和专业人员外,绝大多数人已经不学习了。 二、汇编语言 汇编语言类似于机器语言,但是汇编语言只是把一串二进制数字写成一个英文单词。因此不用直接记住二进制数字,而是记住一个个英文单词就行,但是同样是一个巨大的工程,虽然汇编语言用英文单词代替二进制数,但是本质还是直接操作硬件,有以下优缺点 优点(相比较机器语言):开发效率高 缺点(执行效率低):(因为和硬件交互有一个英文单词翻译的过程) 三、高级语言 高级语言用人直接能理解的语法和语法风格编写程序。人们再也还不用考虑复杂的硬件操作。有以下优缺点。(虽然是缺点但是对人类的直观影响不大) 优点:开发效率高(学了python就会发现显而易见) 缺点;执行效率低(不直接和硬件交互) 3.1编译型 专门的编译器,将高级语言源代码一次性的编译成可被平台硬件执行的机器码,并且包装成可执行程序的格式。并且只要编译一次,以后再不用编译。(做出的应用程序一旦需要修改,必须先修改源代码,再重新编译生成目标文件才能执行,只有目标文件没有源代码

编译执行和解释执行的区别

限于喜欢 提交于 2020-01-26 00:09:10
计算机语言的种类非常的多,总的来说可以分成机器语言,汇编语言,高级语言三大类。 计算机所能识别的语言只有机器语言,即由0和1构成的代码。但通常人们编程时,不采用机器语言,因为它非常难于记忆和识别。 目前通用的编程语言有两种形式:汇编语言和高级语言。 汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。汇编程序通常由三部分组成:指令、伪指令和宏指令。汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作,例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的,用汇编语言所能完成的操作不是一般高级语言所能实现的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。 高级语言是目前绝大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要有太多的专业知识。 高级语言主要是相对于汇编语言而言,它并不是特指某一种具体的语言,而是包括了很多编程语言,如目前流行的VB、VC、FoxPro、Delphi等,这些语言的语法

第一章小结 (2017-08-28 00:47:19)

♀尐吖头ヾ 提交于 2020-01-25 20:54:13
第一章 基本概念 本书侧重于使用MS-Windows平台的x86处理器编程。内容涉及计算机体系结构、机器语言和底层编程的基本原则。读者将学到足够的汇编语言来测试自己已掌握的关于当前使用最广的微处理器系列的知识。 在阅读本书之前,读者应至少完成一门大学计算机编程课程或与之相当的课程。 汇编器是一种程序,用于把源程序从汇编语言转换为机器语言。与之配合的程序,称为链接器,把汇编器生成的单个文件组合成一个可执行程序。第三种程序,称为调试器,为程序员提供一种途径来追踪程序的执行过程,并检查内存的内容。 本书大部分内容都是关于32位和64位程序的,如果重点关注最后四章,则是16位程序。 通过本书讲学习到如下概念:应用于x86(和Intel 64)处理器的基本计算机体系结构;基本布尔逻辑;x86处理器如何管理内存;高级语言编译器如何将其语句转换为汇编语言和原生机器代码;高级语言如何再机器级实现算术表达式、循环和逻辑结构;有符号和无符号整数、实数和字符的数据表示。 汇编语言与机器语言是一对一的关系,即一条汇编指令对应于一条机器指令。汇编语言不具有可移植性,因为它是与具体处理器系统绑定的。 编程语言是一种工具,用于创建独立的应用程序或者部分应用程序。有些应用程序,如设备驱动和硬件接口程序,更适合使用汇编语言。而其他应用程序,如多平台商业和科学应用,用高级语言则更容易编写。