汇编语言

嵌入式系统设计学习周记①——初步了解嵌入式技术

∥☆過路亽.° 提交于 2020-02-27 00:53:12
嵌入式软件与非嵌入式软件的区别 嵌入式:在已有的硬件上移植(需要修改操作系统源码,安装不需要)操作系统解决软硬件耦合导致的问题。 嵌入式软件和非嵌入式软件的区别即传统开发和嵌入式开发的优缺点: 传统开发的缺点:1.软硬件耦合度高导致软件移植性差 2.软件开发人员必须懂硬件 3.软件功能性差; 优点:简单,开发成本低。 嵌入式开发的优点:1.解决传统开发软硬件耦合度导致的问题 2.多任务机制 3.提供了丰富的网络协议栈4.提供了丰富的开源软件和工具 缺点:硬件成本高。 例如嵌入式与单片机区别 单片机: 软件 —— 硬件 嵌入式: 软件 ——操作系统——硬件 嵌入式操作系统的优势 可以移植的操作系统称为嵌入式操作系统。 操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。 嵌入式是通过操作系统,间接控制硬件。因此当硬件平台发生改变,但是依旧与操作系统兼容,那么软件程序就不会改变。并且软件开发人员不需要了解硬件,只要学会操作系统中功能的调用,极大地提高了效率,因此嵌入式引入了操作系统,具有以下几个优势: 提供了很多开源的软件,工具,库。 可以实现多任务(所谓的多任务就是快速切换)。 操作系统中有一些网络协议,因此嵌入式是可以上网的,提供了大量的网络资源

汇编语言-寄存器

╄→гoц情女王★ 提交于 2020-02-26 15:34:22
2.1 通用寄存器 AX, BX, CX, DX 这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。8086CPU这5个寄存器都可以分为两个可以独立使用的8位寄存器来用: AX 可分为 AH 和 AL ; BX 可分为 BH 和 BL ; CX 可分为 CH 和 CL ; DX 可分为 DH 和 DL ; AX 的低8位(0 - 7)构成 AL 寄存器,高8位(8 - 15)构成了 AH 寄存器。 AH 和 AL 寄存器是可以独立使用的8位寄存器。 2.2 字在寄存器中的存储 考虑兼容性8086CPU可以一次性处理一下两种尺寸的数据。 字节 :记为 byte ,一个字节由8个bit组成,可以存在8位寄存器中。 字 :记为 word ,一个字由俩个字节组成,这两个字节分别称为这个字的 高位字节 和 低位字节 。 2.3 几条汇编指令 汇编指令 控制CPU完成的操作 用高级语言表述 MOV ax,18 将18送入寄存器ax ax = 18 ADD ax,8 将寄存器ax中的数值加上8 ah = ax + 8 注意指令的两个操作对象的位数应当是一致的。 例:ax为16位寄存器,只能放4位16进制位数,所以多余的高位会丢失。 2.4 物理地址 CPU访问内存单元时,要给出内存单元的地址。所有内存单元构成的存储空间时一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址

X86汇编6.编写汇编语言程序

醉酒当歌 提交于 2020-02-26 05:25:13
最近学习了X86汇编,其实无论是古老的8086还是现在i3/5/7/9,Xeon3/5,在最基本原理上,都是相通的,只是CPU位数,寻址空间,寄存器个数,指令集的扩充等方面有所不同,对于学习,8086永不过时。 1.程序从写入到执行的过程 (1)编写汇编程序代码===>输出程序文件,helloworld.asm 或 helloword.s(一般linux下用.S命名汇编文件) (2)对代程序代码进行编译和链接 编译就是: 源码文件---编译--->目标文件 链接就是: 目标文件---链接--->可执行程序 可执行程序包含两部分:(1)代码(汇编指令翻译过来的机器码)和数据(程序中定义的数据),前面说过,无论是代码还是数据,都是二进制的(2)相关的描述信息,如:程序多大,占用多少内存空间,哪里是代码,哪里是数据 (3)执行可执行程序,操作系统依照可执行程序文件中的描述信息,将可执行程序的机器码和数据加载如内存,并进行初始化(如:CS:IP指向第一条要执行的指令),然后CPU开始执行程序。 2.程序 汇编指令:有对应机器码的指令,可以被编译为机器指令 伪指令:不被CPU执行,没有对应的机器指令,是由编译器来执行的指令,编译器根据伪指令来进行相关的编译操作。 示例: assume cs:codesg codesg segment mov ax, 0123H mov bx, 0456H

X86汇编1.汇编语言基础

我与影子孤独终老i 提交于 2020-02-26 02:32:25
最近学习了X86汇编,其实无论是古老的8086还是现在i3/5/7/9,Xeon3/5,在最基本原理上,都是相通的,只是CPU位数,寻址空间,寄存器个数,指令集的扩充等方面有所不同,对于学习,8086永不过时。 1.比特、字节、字、双字 在计算机中: 1比特:1位 1字节:8位 1字:16位 ,15-8(高字节)---> 7-0(低字节) 1双字:31-16(高字)---> 15-0(低字) 2.指令和指令集 机器指令就是一列二进制数字,计算机将之转变为一列高低电平,以使计算机的电子器件受到驱动,进行运算。 机器语言就是机器指令的集合。 指令一般由操作码和操作数构成,也有些指令只有操作码,没有操作数。 小端序:或叫低端字节序,内存高字节存放在高地址,内存的低字节保存在低地址 大端序:与小端序相反 指令和数据为什么要分开存放: 因为指令和数据都是二进制数,是一模一样的,即:都是一些由高低电平组和,而处理器是自动按顺序提取指令并加以执行的,在指令中混杂数据会导致处理器不能正常工作,因此,指令和数据要分开存放。存放代码的区域叫代码区,存放数据的区叫数据区,联想一下:一个二进制程序的代码段和数据段也是分开存放的。 3.汇编语言 处理器都是依靠机器指令来工作的,但是机器指令是一些没有规律的数字,编写机器指令的程序,难以书写,难以阅读,难以理解,这样就发明了汇编语言。

汇编语言学习笔记(二)

不羁的心 提交于 2020-02-23 16:57:28
内存编号为什么从0 开始? CPU只能存储放一部分内存指令 ,更庞大的指令集需要通过其他介质存储,需要其他介质,内存,(内存条是内存的一部分,内存分为ROM和RAM),内存条通过 主板 与CPU 相互连接,如果CPU想通过主板读取内存的内容,那么主板上的线路需要能表示 三种信息:   内存编号信息,用于传输内存地址—>地址线   数据信息      数据线       读写信息      控制线 地址线是由一根根线路组成,每一条导线组成,导线只能表示0和1,地址线的数量决定了寻址能力,寻址能力和地址线的关系为2 n 所以,如果有10根内存线那么就是上线就是1 111 111,最小值则为 0 000 000,所以,内存编号从0开始是因为 地址总线的物理和电器特性的限制 巩固: 1、为什么内存从0开始? 物理上的限制,电路只能表示0\1,无论地址线有多少只能从0开始,最小值只能是 00000 2、什么叫寻址能力? 对内存地址的访问的最大值 地址的数量 决定了寻寻址能力,因为线路只能表示0~1,所以地址线越多,能表示的范围就越大,寻址能力就越强 地址线、数据线、控制线 地址线: 决定CPU的 寻址能力 数据线: 决定CPU 和其它部件 进行数据传输时 一次性能够 传输多少 字节 的能力 控制线: 决定CPU 对其他部件 的操控能力 检测点1.1 1、1个CPU的寻址能力为8KB

《汇编语言》——第七章:更灵活的定位内存地址的方法及汇编下的多重循环

好久不见. 提交于 2020-02-23 04:46:29
《汇编语言》——第七章:更灵活的定位内存地址的方法 1.and和or指令 and指令:将操作对象的相应位设为0,其他位不变 or指令:将操作对象的相应位设为1,其他位不变 2.以字符形式给出的数据 在汇编程序中,用’ '的方式指明数据是以字符的形式给出的,编译器将把它们转化为相对应的ASCII码 如 db 'unIX' 相当于 db 75H,6EH,49H,58H 小写字母的ASCII码值比大写字母的ASCII码值大20H,故,“a"的ASCII码值减去20H,就可以得到"A” 一个字母,不管它原来是大写还是小写,将它的位置的第6位置0,它就必将变为大写字母,将它的第6位置1,它就必将变为小写字母 代码实现大小写改变 assume cs:cscode,ds:datasg datasg segment db 'BaSiC' db 'iNfOrMaTiOn' datasg ends cscode segment start: mov ax,datasg mov ds,ax ;设置ds指向datasg段 mov bx,0 ;设置(bx)=0,ds:bx指向"BaSiC"的第一个字母 mov cx,5 ;设置循环次数5,因为"BaSiC"的有5个字母 s: mov al,[bx] ;将ASCII码从ds:bx所指向的单元中取出 and al,11011111b

《汇编语言》——实验八:分析一个奇怪的程序

孤街醉人 提交于 2020-02-22 22:03:40
实验八————分析一个奇怪的程序 assume cs:codesg codesg segment mov ax,4c00h int 21h start: mov ax,0 s: nop nop mov di,offset s mov si,offset s2 mov ax,cs:[si] mov cs:[di],ax s0: jmp short s s1: mov ax,0 int 21h mov ax,0 s2: jmp short s1 nop codesg ends end start 使用debug调试程序 程序在 start 处开始执行, mov ax,0000 ,指令偏移地址 CS:0005 下一行指令, nop , s 标号指向偏移地址 CS:0008 下一行指令, nop ,指令偏移地址 CS:0009 下一行指令, mov di,0008 ,指令偏移地址 CS:000A 下一行指令, mov si,0020 ,指令偏移地址 CS:000D 下一行指令, mov ax,[si] ,指令偏移地址 CS:0010 ,即将 CS:0020 处的机器码存入ax寄存器中 下一行指令, mov [di],ax ,指令偏移地址 CS:0014 ,即将ax中存储的机器码填在 s 标号 CS:0008 处的内存中 下一行指令, jmp 0008 ,跳转到 s 标号 CS:0008 处

Python基础 编程语言介绍

陌路散爱 提交于 2020-02-22 04:33:13
1.1编程语言介绍:    编程语言分为机器语言、汇编语言和高级语言。 机器语言   由于计算机内部只能接受二进制代码,因此,用二进制代码0和1描述的指令称为机器指令,全部机器指令的集合构成计算机的机器语言,用机器语言编程的程序称为目标程序。只有目标程序才能被计算机直接识别和执行。但是机器语言编写的程序无明显特征,难以记忆,不便阅读和书写,且依赖于具体机种,局限性很大,机器语言属于低级语言。 汇编语言   汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作。例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的,用汇编语言所能完成的操作不是一般高级语言所能够实现的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。 高级语言   高级语言是大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要有太多的专业知识。 总结 机器语言   优点是最底层,速度最快

汇编学习笔记(1)基础知识

痞子三分冷 提交于 2020-02-19 08:57:24
本篇文章是汇编语言(王爽)一书的学习笔记,对应书中的第一章,基础知识。 简介 汇编语言,就是直接对硬件进行操作的语言,由机器语言发展而来。早期的程序员都是通过0和1组成的代码来控制计算机的行为,这种方式书写和维护成本巨大,一个hello world都是由几十行0和1组成,错把一个0写成1非常难遇排查,因此,汇编语言应运而生。 汇编语言把难以记忆的机器语言用接近自然语言的形式表现出来,便于书写和记忆,例如 将寄存器BX的内容送入AX中 机器语言:1000100111011000 汇编语言:mov ax,bx 显然,记住mov ax,bx要比0,1容易的多。可是,计算机只能识别0和1,必须通过一种方式把汇编语言翻译成计算机可以识别的机器语言,它就是编译器。它就像现实中的翻译官,把外国语言翻译成汉语。编译相关知识可以参考 编译原理 汇编语言主要由三部分组成 1.汇编指令:有对应的机器码,由计算机执行,例如mov 2.伪指令:没有对应的机器码,由编译器执行,为汇编代码编译时提供信息,累死C语言头文件 3.其他符号:+、-、/等 执行 CPU总是从内存中读取数据来执行,如果CPU是人类的大脑,内存就是大脑中的记忆。内存,是由很多存储单元组成,1个存储单元是1Byte,1Byte又等于8bit,即8个二进制位,也就是8个0或1。存储单元从0开始编号,如果有128个存储单元,编号就是0~127

编译原理简介

纵饮孤独 提交于 2020-02-19 00:42:43
机器语言:可以被计算机直接理解,由二进制0与1组成 汇编语言:引入助记符,依赖于特定的机器 高级语言:类似于数字定义或自然语言的简洁形式 1.什么是编译: 编译: 将 高级语言 (源语言) 翻译 成 汇编语言或者机器语言 (目标语言) 的过程语言翻译成汇编语言或者机器语言的过程 2.编译器在语言处理系统中的位置: 3.编译器的结构: 编译器各个结构 作用 词法分析器 从左到右逐行扫描源程序的字符,识别出各个单词,确定单词的类型。 语法分析器 从词法分析器输出的token序列中识别出各类短语,并构造语法分析树 语义分析器 收集标识符的属性信息;语义检查 中间代码生成器 以三地址码的形式表示高级语言;生成语法结构树/语法树 目标代码生成器 以源程序的中间形式作为输入,并把它映射到目标语言;为程序中使用的变量合理分配寄存器 机器有/无关代码优化器 为改进代码所进行的等价程序变换,使其运行得更快一些、占用空间更少一些,或者二者兼顾 来源: CSDN 作者: blacksunday2 链接: https://blog.csdn.net/blacksunday2/article/details/104382334