汇编语言

x86汇编语言简介

你离开我真会死。 提交于 2020-03-07 23:18:26
汇编语言是最古老的编程语言,它是所有语言中最接近原生机器语言的。它拥有直接访问计算机硬件的特权。 汇编器和链接器 汇编器是一种工具程序,用于将汇编语言符号转换成机器语言的“0101”二进制。链接器同样也是工具程序,通过链接器把汇编器生成的单个文件组成一个可执行程序。 汇编语言与高级语言的区别 首先我们要知道机器语言是一种数字语言,处理器被设计成可以专门计算这些数字语言的结构。但是要我们人去识别这些数字是很难的,所以需要一些好记的符号代表这些数字语言的含义。机器语言和汇编语言是一一对应的:每条汇编指令对应一条机器语言指令。 高级语言和汇编语言是一对多的关系,比如我们常见的一条赋值语句就需要要多条汇编语言来组成实现。 汇编语言是不可移植的 一种语言可以在不同的的计算机操作系统中编译运行,我们就称为这种语言是可移植的。我们最常见的C++和Java等高级语言就是可移植的,只要满足一定的条件它们几乎可以在任何计算机下运行。 汇编语言却是不可移植的,因为这种语言是专门为一种处理器架构所设计的。目前广为人知的不同种类的汇编语言,每一种都是基于一种处理器系列。汇编语言指令会直接与该计算机体系结构进行匹配,或者在执行使用一种被称为伪代码解释器的处理器内置程序来进行转换。 学习汇编语言可以干什么 1)编写嵌入式程序。嵌入式程序是指一些存放在专用设备中小容量存储器内的端程序,例如:电话

《汇编语言》实验二——用机器指令和汇编指令编程

风流意气都作罢 提交于 2020-03-07 21:31:29
任务一 1)使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。 mov ax , ffff mov ds , ax mov ax , 2200 mov ss , ax mov sp , 0100 mov ax , [0] ;ax=3130 add ax , [2] ;ax=6462 mov bx , [4] ;bx=3534 add bx , [6] ;bx=6C6A push ax ;sp=00FEH ;修改的内存单元的地址是2200:00FE内容 为 6462 push bx ;sp=00FCH ;修改的内存单元的地址是2200:00FC内容为6C6A pop ax ;sp=00FEH ;ax=6C6A 在使用a命令输入指令调试前,使用e命令将内存单元0021:0~0021:7连续8个字节数据修改为30H,31H,32H,33H,34H,35H,36H,37H。 pop bx ;sp=0100H ;bx=6462 push [4] ;sp=00FE ;修改的内存单元的地址是2200:00FE内容为3534 push [6] ;sp=00FC ;修改的内存单元的地址是2200:00FC内容为3736 将程序段的第一行 mov ax,ffff修改为 mov ax,0021 用t命令单步执行 用a命令输入程序段后,在2000H内存段创建了一个栈结构

汇编语言实验2

梦想与她 提交于 2020-03-07 21:26:19
这是汇编语言实验 2 : 教材实验 2 中「 2. 实验任务」( P74 ) ① 截图记录:使用 e 命令修改 0021:0~0021:f 数据,及修改后查看是否正确写入的操作 修改的值是十进制数字 ‘ 0-9 ’的 ASSIC 码,在后面显示十进制数值 ② 截图记录:使用 a 命令输入的 p74 指令 ③ 截图记录:每一行指令单步调试 将 0021 送入 ds 中,默认的数据段地址为 0021 将 2200 送入 ss 寄存器中 这里需要注意的是:在执行了 mov ss,ax 以后直接跳过了 mov sp,0100 这条指令?这是为什么? 这里的跳过并不是不执行,而是和 mov ss,ax 一起执行,这是因为 这是为了确保对 ss段寄存器 和栈指针的修改不被破坏。(在此期间CPU 不会响应其他中断) T执行 mov ax,[0] 这里可以看到 AX=3130 ,即为刚才用 E 命令修改成功后的一个字节 T 执行 add ax,[2] AX 的值变为 6462h , 因为取了偏移地址为 2 的字为 3332 作 Add 操作为 3130h+3232h=6462h 从偏移地址为 4 的地址中去一个字 3534 赋给 BX ,即 BX=3534h 同理执行 add bx,[6] 3534H+3736H=6c6aH 将 AX 寄存器里的内容压入起始栈顶地址为 2200:00FE 的栈中

汇编语言(王爽版)学习笔记 第二章 寄存器【CPU工作原理】(1)

旧巷老猫 提交于 2020-03-07 04:24:10
CPU概述 一个典型的CPU由 运算器、控制器、寄存器 等器件组成,这些器件靠内部总线相连。 区别: 内部总线实现CPU内部各个器件之间的联系 外部总线实现CPU和主板上其它器件的联系 8086CPU有14个寄存器: AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW 2.1通用寄存器 8086CPU所有的寄存器都是16位的,可以存放两个字节。 AX,BX,CX,DX通常用来存放一般性数据的被称为通用寄存器 一个16位的寄存器可以储存一个16位的数据 可存放的最大数据是2 16 -1 8086上一代CPU中的寄存器都是8位的; 为保证兼容性,AX,BX,CX,DX都可以分为两个独立的8位寄存器使用。 AX–>AH和AL BX–>BH和BL CX–>CH和CL DX–>DH和DL AX的高八位(8~15)组成了AH寄存器 AL的低八位(0~7)组成了AL寄存器 二者都可以单独使用 2.2 字在寄存器中的存储 一个字(word=2B)可以存在一个16位的寄存器中,这个字的高位字节和低位字节就存在这个寄存器的高8位寄存器和低8位寄存器中。 2.3 几条汇编指令 注:汇编指令不区分大小写 ?处表示4位已经存储不下了 ↓↓↓ 注:这里的丢弃,并不是指真正的丢弃进位值,只是进位值不能在8位寄存器中保存。 检测点2.1 AX=F4A3H AX=31A3H AX

【汇编语言(汇编语言第三版 王爽著)】--知识归纳--第四章

血红的双手。 提交于 2020-03-04 04:05:55
第四章 第一个程序 一个源程序从写出到执行的过程 第一步:编写汇编程序--使用文本编辑器,用汇编语言编源程序。这步工作产 生一个储存源程序的文本文件。 第二步:对源程序进行编译连接--使用编译程序对源程序文件中的源程序进行 编译,产生目标文件;再用连接程序对目标文件进行连接,生成可在操作系统中 直接循行的可执行文件。 可执行文件包含两部分内容:程序(机器码)和数据(源程序中定义数据); 相关的描述信息(程序多大,占用内存空间) 第三步:执行可执行文件中的程序 源程序 1.伪指令 没有对应的机器指令,最终不被CPU执行,由编译器执行。 (1)segment和ends是一成对使用的伪指令,功能是定义一个段,segment说明一个段开始,ends说明一个段结束。一个段必须有一个名称来标识,格式: 段名 segment ~ 段名 ends (2)end是一个汇编程序的结束标记,编译器在编译汇编程序的过程中,如果碰到了伪指令end,就结束对源程序的编译。 (3)assume是一个“假设”,假设某一段寄存器和程序某一个用segment..ends定义的段相关联。如上图程序中,assume cs:codesg将用作代码段的段codesg和CPU中的段寄存器cs联系起来。 2.源程序中的“程序” 源程序文件中的所有内容称为源程序,将源程序中最终由计算机执行、处理的指令或数据,称为程序。 3.标号

Ⅱ:python入门

馋奶兔 提交于 2020-03-03 22:18:06
一、编程语言介绍     编程语言的分类 : 机器语言 汇编语言 高级语言(编译型、解释型号) 总结: 执行效率:机器语言>汇编语言>高级语言(编译型>解释型) 开发效率:机器语言<汇编语言<高级语言(编译型<解释型) 跨平台性:解释型具有极强的跨平台型 二、python介绍 python语言: 指的是pyton的语法风格 python解释器 :专门用来识别python这门语言的语法并解释执行 的 三、解释器多版本共存 设 置环境变量 如下: win10:参考视频 win7:C:\python27;C:\python27\scripts;C:\a\b;D:\a\b;E:\a\b linux: vim /etc/profile   PATH=$PATH:/usr/local/python38:/usr/local/python38   export PATH mac: 同linux 四、运行python程序的两种方式 交互式: 即时得到程序的运行结果,多用于调试 脚本的方式: 把程序写到文件里(约定俗称文件名后缀为.py),然后用python解释器解释执行其中的内容   python3.8 python程序文件的路径 五、一个python应用程序的运行的三个步骤 python3.8 C:\a\b\c.py 执行python程序经历三个步骤: 先启动python3.8解释器

汇编语言(王爽版)学习笔记 第一章 基础知识(1)

妖精的绣舞 提交于 2020-03-03 01:47:12
引言 汇编语言是直接在硬件之上工作的编程 语言,首先要了解硬件系统的结构,才 能有效的应用汇编语言对其编程。 在本章中,对硬件系统结构的问题进行一部分的探讨,以使后续的课程可在一 个好的基础上进行。 1.1 机器语言 机器语言是机器指令的集合。 机器指令展开来讲就是一台机器可以正确执行的命令。 例如,指令:01010000 (PUSH AX) 机器语言产生早期程序员们将 0、1 数字编程的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。 1.2汇编语言的产生 汇编语言的主题是汇编指令。 汇编指令和机器指令的差别在于表示方式上。(英文<—>01代码) 例如: 机器指令:1000100111011000 含义:寄存器BX的内容送到AX中 汇编指令:MOV AX,BX 过程图 提前知识: 寄存器:简单的讲是CPU中可以存储数据的器件,一个CPU中有多个寄存器。 1.3汇编语言的组成 汇编语言由以下三类组成: 汇编指令(机器码的助记符) 例:jmp,mov等 伪指令(由编译器执行) 不是可执行指令 例:标号: DS (数值表达式) 其它符号(由编译器识别) 汇编语言的核心是汇编指令 1.4存储器 指令和数据在存储器中存放,也就是平时所说的 内存 。 CPU是计算机的核心部件,CPU的工作需要向其提供指令和数据。 磁盘不同于内存

汇编语言指令英文全称

坚强是说给别人听的谎言 提交于 2020-03-02 17:05:40
1.通用数据传送指令 MOV----> move MOV dest,src;dest←src MOV指令把一个字节或字的操作数从源地址src传送至目的地址dest。 MOVSX---->extended move with sign data MOVZX---->extended move with zero data PUSH---->push POP---->pop 进栈出栈指令 PUSHA---->push all POPA---->pop all PUSHAD---->push all data POPAD---->pop all data BSWAP---->byte swap XCHG---->exchange 交换指令用来将源操作数和目的操作数内容交换,操作数可以是字、也可以是字节,可以在通用寄存器与通用寄存器或存储器之间对换数据,但不能在存储器与存储器之间对换数据。 mov ax,1234h ;ax=1234h mov bx,5678h ;bx=5678h xchg ax,bx ;ax=5678h,bx=1234h xchg ah,al ;ax=7856h CMPXCHG---->compare and change XADD---->exchange and add XLAT---->translate 换码指令用于将BX指定的缓冲区中

Linux

对着背影说爱祢 提交于 2020-03-02 07:40:02
在linux内核的源代码中,以汇编语言编写的程序或程序段,有两种不同的形式。 第一种事完全的汇编代码,这样的代码采用.s作为文件的后缀。事实上,尽管是完全的汇编代码,现代的汇编工具也吸收了C语言的长处,也在汇编之前加上了一趟预处理,而预处理之前的文件则以.s为后缀。此类(.s)文件也和C程序一样,可以使用#include、#ifdef等等成分,而数据结构也一样可以在.h的文件中加以定义。 第二种是嵌在C程序中的汇编语言片断。虽然在ANSI的C语言标准中并没有关于汇编片段的规定,事实上各种实际使用的C编译中都作了这方面的扩充,而 GNU的C编译gcc也在这方面作了很强的扩充。 在DOS/windows领域中,386汇编语言都采用Intel定义的语句格式。可是,在Unix领域中,采用的却是由AT&T定义的格式。 AT&T的汇编与Intel的汇编主要有以下的区别: 在Intel格式中大多使用大写字母,而在AT&T格式中都使用小写字母。 在AT&T格式中,寄存器名要加上“%”作为前缀 ,而在Intel格式中不带前缀。 在AT&T的386汇编语言中,指令的源操作数的顺序与在Intel的386汇编语言中正好相反。 在AT&T格式中,访问指令的操作数的宽度有操作码名称的最后一个字母(操作码的后缀决定)。用作操作码后缀的字母有b(8位)。 w(16位)和1(32位)。 而在Intel格式中

汇编语言-寄存器

☆樱花仙子☆ 提交于 2020-03-01 09:36:35
3.1 字和数据段 1. 字在内存中存储时,要用两个地址连续的内存单元来存放,字的低位字节存放在低地址单元中,高位字节存放在高地址单元中。 2. 用mov指令访问内存单元,可以在mov指令中只给出单元的偏移地址,此时,段地址默认在DS寄存器中。 3. [address]表示一个偏移地址位address的内存单元。 4. 在内存和寄存器之间传送字行数据时,高地址单元和高8位寄存器,低地址单元和低8位寄存器相对。 5. mov, add, sub是具有两个操作对象的指令。jmp是具有一个操作对象的指令。 3.2 栈 1. 在SS,SP中存放栈顶的段地址和偏移地址;提供入栈和出栈指令,他们根据SS:SP指示的地址,按照栈的方式访问内存单元。 2. push指令的执行步骤:SP = SP - 2;向SS:SP指向的字单元中送入数据。 3. pop指令的执行步骤:从SS:SP指向的字单元中读取数据;SP = SP + 2。 4. 任意时刻,SS:SP指向栈顶元素。 5. 8086CPU只记录栈顶,栈空间,的大小我们要自己管理。 6. 用栈来暂存以后需要恢复的寄存器的内容,寄存器出栈的顺序要和入栈的顺序相反。 7. push,pop实质上是一种内存传送指令,注意他们的灵活应用。 3.3 栈段 对于8086PC机,在编程时,可以根据需要,将一组内存单元定义位一个段。我们可以将长度为N(N ≤