汇编语言

浅谈汇编(1)

。_饼干妹妹 提交于 2019-11-28 17:06:57
要说汇编语言必须要谈到机器语言。机器语言是机器指令的集合,简单来说就是一串二进制的数字,可以直接让器件工作。 汇编语言的产生是因为机器语言太过繁琐,且对于编程者而言工作量太大、易出错,例如书上welcome to masm机器语言代码,反正你要是改了某个地方我是看不出来的。所以优秀的汇编语言产生了。 汇编语言和机器语言的差别就在于指令的表达方式,汇编就是便于人能看懂,换汤不换药,汇编语言最终会被编译器编译为机器码。 现在的汇编语言有3类指令组成:1.汇编指令(简言之机器码的另一种表示)2.伪指令(无机器码,由编译器执行)3.其他符号(无机器码,编译器识别)。汇编指令是核心,决定了汇编的特性。 指令和数据在内存或磁盘上都是二进制信息的,没有区别。 CPU对存储器的读写从逻辑上可以分成3类:1.地址总线(决定CPU寻址能力)2.数据总线(决定CPU传输速度)3.控制总线(决定CPU的控制能力)。读写都是先从CPU发出地址信息,再告诉其控制信息,最后是数据信息。 存储芯片可分为两类:1只读存储器(ROM)2随机存储器(RAM)。 来源: https://www.cnblogs.com/AHrui/p/9706314.html

一条指令是怎么运行的,一个小的指令系统是怎么运行的

和自甴很熟 提交于 2019-11-28 08:38:58
简单的指令系统【指令的真正内容】 什么是指令系统体系结构 在硬件攻城狮和软件程序员一起建一个计算机之前,需要一个共同的系统可以保证写的程序在另一个设计的硬件上运行,于是双方在搭建一个计算机之前需要制定一个共同的指令系统 一条简单的指令:ADD R M 一个简单的指令系统: ADD R M LOAD R M STORE M R JMP L 备注:M指存储器,R指寄存器 图一 想要了解指令的具体格式吗? 每条指令规定等长,占2个字节: 图二 草稿图 接下来运行一个任务 1.将M1中的内容 与M2中的内容相加 -> M3 i.M1 -> Rx [M1中的内容先放到R中,计算机没有将存储器中的内容直接相加的指令,据说比较复杂,所以先放一个到J寄存器中] ii. Rx 中内容 与M2中内容相加 [将CPU里边Rx和存储器里边M2中内容相加] iii. 结果-> Rx v. Rx ->M3 [JMP指令跳到下一条指令] 图三 草稿图三:汇编语言的真身图 左边部分就是汇编语言(basic) 小结: 1.指令系统是一条计算机软硬件搭建前要统一指定的东西,比如说按什么编址,然后确定存储器中单元分配的字节,硬件工程师好做,软件的也可以编写指令的机器代码(联系前面的学的) 2.一条简单的指令ADD R M 3.知道了一条指令的具体形式,真正的机器代码的格式 原来一条机器指令的前操作码的具体内容是

day02

馋奶兔 提交于 2019-11-28 06:04:38
什么是编程? 编程就是通过一些编程语言写一些东西,表达自己的想法 简述计算机五大组成。 控制器、运算器、存储器、输入设备、输出设备 操作系统有什么用? 操作系统位于应用程序和硬件之间,负责协调管理计算机资源和软件资源。操作系统把对硬件的复杂性,封装成一个个简单易用的接口供人们使用。 计算机由哪三大部分组成? 硬件,与硬件直接交互 操作系统(软件),与硬件交互 应用软件,与操作系统交互 简述操作系统和应用程序的启动流程? 操作系统启动流程: 开机,启动临时操作系统 临时操作系统去CMOS存储器上寻找操作系统的存储路径 操作系统启动,临时操作系统关闭 应用程序启动流程: 双击应用程序图标 双击图标就是给操作系统指令,告诉操作系统应用程序在硬盘的位置,让操作系统启动这个路径 操作系统接到指令操控CPU,给内存发指令 内存接受CPU指令,给硬盘发出指令,硬盘读取应用程序代码至内存,应用程序启动 编程语言的分类有哪些?并评估各个分类的优缺点。 机器语言 优点:执行速度非常快,直接和硬件交互 缺点:开发速度非常慢 汇编语言 优点(相较于机器语言而言):开发速度快 缺点(相较于机器语言而言):执行速度慢 高级语言 优点(较于汇编语言):开发效率高 缺点(较于汇编语言):执行效率低(调试bug非常复杂) 编译型语言 优点(较于解释型语言):执行效率高 缺点(较于解释型语言):开发效率低 解释型语言

作业

妖精的绣舞 提交于 2019-11-28 05:48:57
一、什么是编程? 编程是通过编写程序使得计算机能够理解人的意图,根据人的指令去完成某种特定的任务,进而实现人的目的 通俗的说,就是让计算机代替人工作 二、简述计算机五大组成。 控制器 用来控制硬件(运算器、存储器、I/O设备) 运算器 用来进行算术越算和逻辑运算 存储器 分为内存和外存 内存的优点在于运算速度快。缺点在于容量小,断电即消失 外存的优点在于容量大,永久存储;缺点在于运算速度慢 输入设备 用来输入信息(键盘/鼠标/U盘) 输出设备 用来输出信息(显示屏/打印机/U盘) 三、操作系统有什么用? 提供接口,作为应用程序和硬件的交互的桥梁,和硬件交互,使得复杂操作简单化 四、计算机由哪三大部分组成? 应用程序 和操作系统交互 操作系统 和硬件交互 硬件 和硬件直接交互 五、简述操作系统和应用程序的启动流程? 1.操作系统的启动流程 开机后,临时操作系统启动在CMOS存储器上找到操作系统的路径,从而启动操作系统,同时临时操作系统关闭 应用程序的启动流程 首先启动操作系统提供的应用程序图标,操作系统通知CPU寻找应用程序所在的路径,同时CPU发出指令让内存在外存中读取应用程序的数据,数据进入内存,应用程序启动 六、编程语言的分类有哪些?并评估各个分类的优缺点。 分别有机器语言、汇编语言、高级语言 机器语言(相较于汇编语言) 优点:执行效率非常快 缺点:开发速度非常慢 汇编语言

汇编语言1:基础知识

☆樱花仙子☆ 提交于 2019-11-27 23:45:39
  这个假期开始系统学习汇编语言,采用跟随视频教程的方式,所用教程是网易云课堂中的《汇编语言从0开始》,讲者是workWork。该课程一共有167个课时,每个课时从几分钟到十几分钟不等,时间不长,短小精悍,反馈及时,让人有动力一直看下去。这门课程很适合零基础的同学,因为在正式编程前,讲者用了大量时间讲述基础性的知识,包括二进制十进制十六进制、CPU执行指令的过程、寄存器的讲解、栈的使用等等。我个人认为,即使你已经不算零基础了,认真地看完这些课程,巩固一下基础知识也是必要的。我之前看过一本基于Linux的教材,因为Linux采用的是AT&T风格,与DOS/Windows的Intel风格有很大差异,所以即使也写过几个汇编小程序,但始终觉得对于寄存器、指令/数据长度以及栈的概念懵懵懂懂,基础并没有打好。我建议大家如果是初学者,还是先从DOS/Windows平台的汇编开始学习比较好,尤其是要使用Windows XP中的debug程序反复练习,这样可以在编程之前打好坚实的基础。   下面对编程之前的基础知识做一个小小的总结。 一、十进制、二进制和十六进制 二进制之所以重要,是因为整个计算机体系就是建立在二进制的基础上的,实际上所有的指令和数据在计算机中存储和运算的形式就是二进制。十六进制之所以重要,是因为查看内存中的指令和数据时,是以十六进制显示的。一个十六进制数字

汇编教程2:汇编基础知识

我是研究僧i 提交于 2019-11-27 23:45:20
那么让我们开始今天的话题….. 今天主要扯点计算机的工作方式,因为汇编是面向机器的语言,所以非常有必要了解下计算机的结构,CPU的工作方式.这里我假设你只有一点点最基本的电脑基础啊,最好自己去弄懂那个什么进制转换的,我觉得特麻烦,不过却也比较简单..我这里就不和大家扯了自己了解下~~那么既然假设你没有什么电脑知识就会显得有些啰唆,高手别见笑啊! 说到汇编语言啊,就扯远拉,远到哪里呢, 嗯很远, 汇编语言和机器语言是很亲密的,所以要聊下汇编语言那就不得不又扯下机器语言了,^_^.真远啊!! 机器语言 什么叫机器语言呢,机器语言就是一些机器指令的集合拉,也就是一些二进制的数字什么010010的,这就是机器指令,计算机呢可以把这些010010什么的转变为高低电平,使计算机的电子器件收到驱动,进行运算..嗯,搞的好像很复杂似的,其实简单理解就是计算机也有一门语言(机器语言)就像我们的汉语一样,我们汉语的构成呢是由字来构成的,机器语言(也就是电脑自己的语言,就是一些01001什么的来构成的.当初我理解的时候就想啊,机器语言不是人发明的么,为什么不教他学汉语啊要教他学什么01001的那么麻烦^_^.呵呵其实现在很多人都在做着这样的努力呢, 诶~~又扯远了. 给大家扯了机器语言的那就再给大家扯一下计算机吧,你有跟朋友去过电脑城装过电脑吗?或者见过别人把电脑机箱打开后里面的情况吗?

计算机基础-编程语言分类

﹥>﹥吖頭↗ 提交于 2019-11-27 19:38:49
什么是编程语言 人可以通过直接输二进制,相关标签打包输入到后来一步步发展的高级语言这种跟机器用本质二进制方式进行指挥操作电脑的硬件的方式 编程语言发展史 机器语言(站在奴隶的角度) 直接用二进制与计算机直接沟通交流 ps:为什么是二进制,是由于计算机是基于电工作的,而电信号只有高低电频 汇编语言(站在奴隶的角度) 用简单的英文标签代替二进制直接操作硬件 高级语言(站在奴隶主的角度) 同人类能够识别的语言与计算机进行沟通交流 机器语言 优点:执行效率高 缺点:开发的效率低 机器语言编程 于计算机内部只能接受二进制代码,因此,用二进制代码0和1描述的指令称为机器指令,全部机器指令的集合构成计算机的机器语言,用机器语言编程的程序称为目标程序。只有目标程序才能被计算机直接识别和执行。但是机器语言编写的程序无明显特征,难以记忆,不便阅读和书写,且依赖于具体机种,局限性很大,机器语言属于低级语言。 编出的程序全是些0和1的指令代码,直观性差,还容易出错。除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。 机器语言是微处理器理解和使用的,用于控制它的操作二进制代码。 尽管机器语言好像是很复杂的,然而它是有规律的。 汇编语言 汇编语言类似于机器语言,但是汇编语言只是把一串二进制数写成一个英文单词。因此你不需要去记住二进制数,而是需要去记住一个一个英文单词,这同样是一个大工程

汇编语言中 cs, ds,ss 的区别

孤街浪徒 提交于 2019-11-27 15:36:13
CS(Code Segment):代码 段寄存器 ; DS(Data Segment):数据 段寄存器 ; SS(Stack Segment): 堆栈 段寄存器 ; ES(Extra Segment):附加段寄存器。 当一个程序要执行时,就要决定程序代码、数据和 堆栈 各要用到内存的哪些位置,通过设定段寄存器 CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。 1.代码段寄存器CS:存放当前正在运行的程序代码所在段的段基值,表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得,相应的偏移值则由IP提供。   2, 数据段寄存器DS:指出当前程序使用的数据所存放段的最低地址,即存放数据段的段基值。   3, 堆栈 段寄存器SS:指出当前堆栈的底部地址,即存放堆栈段的段基值。 CS、DS就是所谓的段寄存器。一个程序往往分为好几个段。CS中保存了代码段的基地址,DS保存的是数据段的基地址,而IP中保存的是所要执行的下一条指令的地址 https://zhidao.baidu.com/question/347752668.html 来源: https://www.cnblogs.com/xiangtingshen/p/11368623.html

C/C++中书写汇编指令

∥☆過路亽.° 提交于 2019-11-27 15:04:20
汇编语言的指令格式目前有两种不同的标准:Windows下的汇编语言基本上都遵循Intel风格的语法,比如:MASM、NASM,Unix/Linux下的汇编语言基本上都遵循AT&T风格的语法。 下面主要介绍Unix/Linux下的汇编,具体格式如下: [名称[:]] 指令码 源操作数SRC,目的操作数DST ;注释 开发一个OS,尽管绝大部分代码只需要用C/C++等高级语言,但是和硬件相关部分的代码需要使用汇编语言;由于启动部分的代码有大小限制,使用精练的汇编可以缩小目标代码的Size;另外,对于某些需要被经常调用的代码,使用汇编可以提高性能。 如果我们选择的OS开发工具是GCC以及GAS的话,就必须了解AT&T汇编语言语法,因为GCC/GAS只支持这种汇编语法。下面介绍GCC的内嵌汇编语法。 GCC 支持在C/C++代码中嵌入汇编代码,这些汇编代码被称作GCC Inline ASM——GCC内联汇编。这是一个非常有用的功能,有利于我们将一些C/C++语法无法表达的指令直接潜入C/C++代码中,另外也允许我们直接写 C/C++代码中使用汇编编写简洁高效的代码。 参考文章 : (1)如何在C或C++代码中嵌入ARM汇编代码 https://blog.csdn.net/Roland_Sun/article/details/42921131 (2)汇编与C/C++内联嵌入汇编 https:

VS2013中反汇编常用指令理解

*爱你&永不变心* 提交于 2019-11-26 23:17:56
  最近复习C语言,对反汇编感兴趣,就用下图举例解释一下我的理解,如有错还请大佬指教。   首先,认识两个常用指令 :    lea ---> 取地址赋值 mov ---> (同类型)赋值 其次理解 dword ptr [] :    dword(double word)即双字,也就是四字节    ptr(point)即指针    []放的是一个地址值,这个地址对应一个四字节数据 举个栗子, dword ptr [p1] 表示 : p1(地址值)对应的四字节数据(内容) 解释完了,现在把各部分汇编指令拿出来验证一下    来源: https://www.cnblogs.com/Duikerdd/p/11334962.html