汇编语言

编程语言分类

a 夏天 提交于 2019-11-30 06:26:08
编程语言分类 一、机器语言 只要是谈到计算机基础,有一个东西是我们无法避免的,那就是编程到底是什么?我只放图,其他的你们自己YY。 现在来想象这样一个场景,如果奴隶来自不同的国家,作为尊贵而又穷逼买不起管家的奴隶主的我们,如果需要控制奴隶,则需要和奴隶有一定的沟通才能控制努力。 如果把奴隶换成计算机,由于计算机以二进制的形式存储数据,如果我们要奴役计算机,则需要使用二进制编写程序。也就是说,如果我们需要和计算机沟通,那我们必须得会二进制代码编程。而这个二进制代码编程则是使用机器语言编程,直接操作硬件。它的优缺点如下: 优点:执行效率高(还能在快吗?有的话,马都累死了…) 缺点:开发的效率低(有本事你把下图的代码翻译翻译) 1.1 机器语言编程 由于计算机内部只能接受二进制代码,因此,用二进制代码0和1描述的指令称为机器指令,全部机器指令的集合构成计算机的机器语言,用机器语言编程的程序称为目标程序。只有目标程序才能被计算机直接识别和执行。但是机器语言编写的程序无明显特征,难以记忆,不便阅读和书写,且依赖于具体机种,局限性很大,机器语言属于低级语言。 用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义。手编程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作

基础知识

こ雲淡風輕ζ 提交于 2019-11-30 02:44:10
机器语言 :计算机工作基于二进制,从根本上说, 计算机只能识别和接受由0和1组成的指令 ,而这种指令称为 机器指令 ;基于二进制表示的语言就是机器语言。 用法 :在机器语言的规则中规定各种机器指令的表示形式以及它的作用。( 人为规定具体机器指令的具体作用 ) 缺点 :机器语言与我们习惯的语言相差太大,难以从容使用,必须记和翻阅指令表才可以。 优点   :机器语言占内存较高级语言少、运行效率也比高级语言高,且能直接操作计算机的各种硬件设备资源。 发展 :为了克服机器语言的缺点,我们创造出了 符号语言 (symbolic language) 符号语言 : 用一些英文字母和数字表示一个指令,例如用ADD代表'加',MOV代表'移动',LD代表'传送'.....(其实就是我们日常说的汇编语言) 用法 :比如 ADD A,B 表示的是A加上B... 缺点 :前面我们说过计算机只能识别和接受0和1,而符号语言必须翻译成机器语言才可被计算机识别。翻译符号语言需要用到一种称为 汇编程序 的软件,把符号语言的指令转换为机器指令。一般,一条符号语言的指令对应转换为一条机器指令。转换的过程或者说是翻译的过程称为'汇编',因此,符号语言又称为 符号汇编语言 或 汇编语言 (assembler language) 。 虽然汇编语言比机器语言简单好记一些,但仍然比较复杂,也需要记忆基本指令集和翻阅指令集

C++反汇编: 基础知识(7)

岁酱吖の 提交于 2019-11-29 19:16:17
title: 'C++反汇编: 基础知识(7)' date: 2019-09-07 12:18:41 tags: 汇编与反汇编 categories: 汇编与反汇编 copyright: true --- 反汇编(Disassembly),即把目标二进制机器码转为汇编代码的过程,该技术常用于软件破解、外挂技术、病毒分析、逆向工程、软件汉化等领域,学习和理解反汇编语言对软件调试、漏洞分析、内核原理及理解高级语言代码都有相当大的帮助,软件一切神秘的运行机制全在反汇编代码里面,该笔记整理了C++反汇编的一些常识. 变量与常量 数值类型变量: 整数,浮点数,等类型其反汇编结果基本相同. int main(int argc, char* argv[]) { int x = 10; int y = 20; int z = 0; z = x + y; return 0; } 反汇编结果如下,首先lea取地址,然后ECX=13,这里的13是因为我们有3个整数型变量,每个变量占用4个字节,所以4x3=12次,将EAX设置为CCCCCCC,并通过rep指令填充内存地址从[edi]指向的位置开始填充,填充14次,同样的也初始化了堆栈,接着通过mov赋值语句将内存地址分别初始化为指定的数值. 0040D709 |. 8D7D B4 lea edi, dword ptr [ebp-4C] 0040D70C

《汇编语言》(王爽)学习笔记---Windows10下搭建汇编语言开发环境

别说谁变了你拦得住时间么 提交于 2019-11-29 17:19:58
工具准备 下载DOSBox:https://www.dosbox.com/download.php?main=1 下载masm 上述工具笔者已经打包放在网址下:https://download.csdn.net/my/uploads/3/1 安装搭建环境 双击DOSBox默认完成安装即可。 把下载的masm包解压,把里面所有文件拷贝到某磁盘文件夹下,如D:\masm。 双击DOSBox安装目录下的DOSBox 0.74-3 Options.bat,做如下修改: 如下打开DOSBox运行: 测试(汇编程序输出Hello,World!) 在上面的黑框框中输入 edit hello.asm 命令,输入如下汇编程序: datas segment buf db'Hello, World!$' datas ends stacks segment stack db 200 dup(0) stacks ends codes segment assume cs:codes,ds:datas,ss:stacks start: mov ax,datas mov ds,ax mov dx,seg buf lea dx,buf mov ah,09h int 21h mov ah,4ch int 21h codes ends end start 退出编辑页面,然后依次输入命令 masm hello.asm ,

汇编语言实现求两个数的最小公约数,平方差,各占和的百分比

徘徊边缘 提交于 2019-11-29 17:09:21
按下列要求编程: (1)输入两个小于100的十进制正整数。 (2)求出这两个数的所有公约数。 (3)求出这两个数的平方差,若是负的要输出负号。 (4)计算两个数各占和的百分比,并且按照“ %”的格式输出(小数点后保留两位)。 (5)数据的输入和结果的输出都要有必要的提示,且提示独占一行。 (6)要使用到子程序。 data segment hh db 0dh,0ah,'$' m1 db 'please enter a number:',0dh,0ah,'$' m2 db 'please enter another number:',0dh,0ah,'$' m3 db 'gong yue shu:',0dh,0ah,'$' m4 db 'ping fang cha:',0dh,0ah,'$' m5 db 'num1/sum is:',0dh,0ah,'$' m6 db 'num2/sum is:',0dh,0ah,'$' sum dw 0 x dw 0 y dw 0 z dw 0 sign db 0h s db 6 dup(0h),'$' data ends code segment assume cs:code,ds:data main proc far start: mov ax,data mov ds,ax mov ax,offset m1 call print call

汇编语言实现求两个数的最小公约数,平方差,各占和的百分比

丶灬走出姿态 提交于 2019-11-29 12:40:09
按下列要求编程: (1)输入两个小于100的十进制正整数。 (2)求出这两个数的所有公约数。 (3)求出这两个数的平方差,若是负的要输出负号。 (4)计算两个数各占和的百分比,并且按照“ %”的格式输出(小数点后保留两位)。 (5)数据的输入和结果的输出都要有必要的提示,且提示独占一行。 (6)要使用到子程序。 ​ 源代码: 1 data segment 2 hh db 0dh,0ah,'$' 3 m1 db 'please enter a number:',0dh,0ah,'$' 4 m2 db 'please enter another number:',0dh,0ah,'$' 5 m3 db 'gong yue shu:',0dh,0ah,'$' 6 m4 db 'ping fang cha:',0dh,0ah,'$' 7 m5 db 'num1/sum is:',0dh,0ah,'$' 8 m6 db 'num2/sum is:',0dh,0ah,'$' 9 sum dw 0 10 x dw 0 11 y dw 0 12 z dw 0 13 sign db 0h 14 s db 6 dup(0h),'$' 15 data ends 16 17 code segment 18 assume cs:code,ds:data 19 main proc far 20 start:

了解编译原理 作业1

僤鯓⒐⒋嵵緔 提交于 2019-11-29 06:03:05
1简述编译程序与翻译程序、汇编程序的联系与区别。 解释程序是高级 语言翻译 程序的一种 ,就像外语翻译中的“口译”一样,说一句翻一句,不产生 全文 的翻译 文本 ,,从终端把命令打入后,就能立即得到计算结果。 编译程序它把 高级语言 (如FORTRAN、COBOL、Pascal、C等)源程序作为输入,进行翻译转换,产生出 机器语言 的目标程序,然后再让计算机去执行这个目标程序,得到计算结果。 大 多数的编译程序直接产生机器语言的 目标代码 ,形成可执行的 目标文件 ,但也有的编译程序则先产生汇编语言一级的符号代码文件,然后再调用 汇编程序 进行翻译加工处理,最后产生可执行的机器语言目标文件。 它把汇编语言源程序翻译成机器语言程序。 编译程序与汇编程序的区别:如果源语言是诸如 C、C++、Java等“高级语言”,而目标语言是诸如汇编语言或机器语言之类的“低级语言”,这样的一个翻译程序称为编译程序。如果源语言是汇编语言,而目标语言是机器语言,这样的一个翻译程序称为汇编程序。 2 编译过程包括哪几个主要阶段及每个阶段的主要功能。 1)识别出句子中的一个个单词;词法分析 ( 2)分析句子的语法结构;语法分析 ( 3)根据句子的含义进行初步翻译;词义分析与中间代码产生 ( 4)对译文进行修饰;优化 ( 5)写出最后的译文。目标代码生成 3 简述解释程序与编译程序的区别

编译原理(第一次作业)

拜拜、爱过 提交于 2019-11-29 06:02:41
1.翻译程序是一种把一种语言(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价程序。 翻译程序有两种,分别是编译程序和解释程序。 编译程序是一种将高级语言翻译成低级语言的程序。 汇编程序是一个翻译程序,它把汇编语言程序翻译成机器语言程序。 编译程序与汇编程序的区别:两者的源语言和目标语言不一样。编译程序的源语言是高级语言(如C、Pascal或FORTRAN),目标语言是汇编语言或机器语言那样低级语言;而汇编语言的源语言是汇编语言,目标语言是机器语言。 2.编译过程包括六个主要阶段: 词法分析:语法分析是第一阶段,这个阶段的任务是从左到右一个字符一个字符地读入源程序,对构成源程序地字符流进行扫描和分解,从而识别出一个个单词。 语法分析:语法分析的任务是在词法分析的基础上将单词程序分解成各类语法短语。 语义分析:语义分析是审查源程序有误语义错误,为代码生产阶段收集类型信息。 中间代码生成:在进行了上述的语法分析和语义分析阶段的工作之后,有的编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间语言或中间代码。 代码优化:这一阶段的任务是对前一阶段产生的中间代码进行变换或进行改造,谜底是使生成的目标代码更为高效。 目标代码生成:这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。 3.解释程序与编译程序的区别:

简述编译程序与翻译程序、汇编程序的联系与区别。

眉间皱痕 提交于 2019-11-29 06:00:27
1.简述编译程序与翻译程序、汇编程序的联系与区别。 翻译程序是指把高级语言源程序翻译成机器语言源程序(目标代码)的软件。 翻译程序有两种:一种是编译程序,它将高级语言源程序一次性全部翻译成目标程序,每次执行程序时,只要执行目标程序。另一种是解释程序,它的执行过程是翻译一句执行一句,并且不会生成目标程序。 编译程序是先完整编译后运行的程序,如C、C++等;解释程序是一句一句翻译且边翻译边执行的程序,如JavaScript、Python等。附C语言编译链接过程: 汇编程序也是一种语言翻译程序,它把汇编语言源程序翻译成机器语言程序。 编译程序与汇编程序的区别:如果源语言是诸如C、C++、Java等“高级语言”,而目标语言是诸如汇编语言或机器语言之类的“低级语言”,这样的一个翻译程序称为编译程序。如果源语言是汇编语言,而目标语言是机器语言,这样的一个翻译程序称为汇编程序。 编译过程包括哪几个主要阶段及每个阶段的主要功能。 编译过程包括哪几个主要阶段及每个阶段的主要功能。 词法分析阶段:读入源程序,对构成源程序的字符流进行扫描和分解,识别出单词, 语法分析阶段:机器通过词法分析,将单词序列分解成不同的语法短语,确定整个输入串能够构成语法上正确的程序。 语义分析阶段:检查源程序上有没有语义错误,在代码生成阶段收集类型信息 中间代码生成阶段:在进行了上述的语法分析和语义分析阶段的工作之后

第一次作业:编译原理概述

随声附和 提交于 2019-11-29 04:12:12
1)简述编译程序与翻译程序、汇编程序的联系与区别。编译器将高级语言翻译成汇编语言,然后通过汇编程序将汇编语言翻译成机器语言。但是编译器只能将源语言编译成目标语言。编译程序是翻译程序之一,汇编程序是将汇编语言翻译成机器语言。2)编译过程包括哪几个主要阶段及每个阶段的主要功能。一般也可以划分为五个阶段:词法分析、语法分析、语义分析与中间代码产生、优化、目标代码生成。词法分析:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词语法分析:在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位语义分析与中间代码产生:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。优化:优化的任务在于对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效(省时间和空间)的目标代码。优化的主要方面有:公关子表达式的提取、循环优化、删除无用代码等等。目标代码生成:优化的任务在于对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效(省时间和空间)的目标代码。优化的主要方面有:公关子表达式的提取、循环优化、删除无用代码等等。3)简述解释程序与编译程序的区别。编译程序:先整体编译在一次性执行,执行程序时只执行目标程序。解释程序:边解释边执行,不会生成目标程序。4)了解新开源的华为方舟编译器(https://www