8086汇编基础学习课件

一、汇编与高级语言对比

1 区别

  • 汇编语言与机器语言一一对应,每一条机器指令都有与之对应的汇编指令
  • 汇编语言可以通过编译得到机器语言,机器语言可以通过反汇编得到汇编语言
  • 高级语言可以通过编译得到汇编语言\机器语言,但汇编语言\机器语言几乎不可能还原成高级语言

2 高级语言反编译表现

3 汇编语言的特点

  1. 可以直接访问、控制各种硬件设备,比如存储器、CPU等,能最大限度地发挥硬件的功能
  2. 汇编指令是机器指令的助记符,同机器指令一一对应。每一种CPU都有自己的机器指令集\汇编指令集,所以汇编语言不具备可移植性
  3. 知识点过多,开发者需要对CPU等硬件结构有所了解,不易于编写、调试、维护
  4. 不区分大小写,比如mov和MOV是一样的

4 编译阶段比较

  • 采用高级语言C++和汇编语言编写同一个功能
    将a+b的结果赋值给c,然后在屏幕上打印c的结果

二、汇编语言的种类

  1. 目前讨论比较多的汇编语言有
  • 8086汇编(8086处理器是16bit的CPU)
  • Win32汇编
  • Win64汇编
  • AT&T汇编(Mac、iOS模拟器)
  • ARM汇编(嵌入式、iOS设备)
    ......
  1. 入门建议先从学些8086汇编开始
    结构简洁、经典
    参考书籍:王爽《汇编语言》

三、软件\程序的执行过程

  • 最为关键的是需要了解CPU和内存
  • 在学习汇编语言过程中,遇到的绝大部分指令都是跟内存、CPU有关的

四、总线

1. 总线概念及分类

  • 总线:一根根导线的集合


  • 每一个CPU芯片都有许多管脚,这些管脚和总线相连,CPU通过总线跟外部器件进行交互


  • 总线的分类
    1 地址总线、数据总线、控制总线


2. CPU从内存的3号单元读取数据

3. 数据总线

  1. 8088的数据总线宽度是8,8086的数据总线宽度是16,分别向内存中写入89D8H
  2. 89D8H,是16进制数,每个数字代表4bit,因为2的4次方=16,2个16进制数代表一个字节bytes,因为1B = 8bit。所以89D8H表示2个字节,89一个字节,D8一个字节
  3. 1B = 8bit; 2^10B = 1kB; 2^20B = 1MB; 2^30B = 1GB; 2^40B = 1TB;



五、内存

1. 各类存储器的逻辑连接情况

2. 内存地址及区域划分

3. 各类存储器的逻辑连接-物理地址对应图

六、8086的寻址方式

  • CPU访问内存单元时,要给出内存单元的地址
  • 8086有20位地址总线,可以传送20位的地址,1M的寻址能力
  • 但它又是16位结构的CPU,它内部能够一次性处理、传输、暂时存储的地址为16位。如果将地址从内部简单地发出,那么它只能送出16位的地址,表现出来的寻址能力只有64KB

1. 20位物理地址生成原理

8086采用一种在内部用2个16位地址合成的方法来生成1个20位的物理地址


七、内存的分段管理

  1. 8086是用“起始地址(段地址×16) + 偏移地址 = 物理地址”的方式给出物理地址
  2. 为了开发方便,我们可以采取分段的方法来管理内存,比如:
  • 地址10000H~100FFH的内存单元组成一个段,该段的起始地址为10000H,段地址为1000H,大小为100H
  • 地址10000H1007FH、10080H100FFH的内存单元组成2个段,它们的起始地址为:10000H和10080H,段地址为1000H和1008H,大小都为80H

1. 寻址能力计算

偏移地址为16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB


八、寄存器

1. CPU的典型构成

2. 寄存器

  1. 对程序员来说,CPU中最主要部件是寄存器,可以通过改变寄存器的内容来实现对CPU的控制
  2. 不同的CPU,寄存器的个数、结构是不相同的(8086是16位结构的CPU)
  3. 8086有14个寄存器
  • 都是16位的寄存器
  • 可以存放2个字节

3. 通用寄存器

  1. AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,称为通用寄存器(有时也有特定用途)
  2. 通常,CPU会先将内存中的数据存储到通用寄存器中,然后再对通用寄存器中的数据进行运算
  3. 假设内存中有块红色内存空间的值是3,现在想把它的值加1,并将结果存储到蓝色内存空间
  • CPU首先会将红色内存空间的值放到AX寄存器中:mov ax,红色内存空间
  • 然后让AX寄存器与1相加:add ax,1
  • 最后将值赋值给内存空间:mov 蓝色内存空间,ax

4. 通用寄存器分类

  1. AX、BX、CX、DX这4个通用寄存器都是16位的,如下图所示


  2. 上一代8086的寄存器都是8位的,为了保证兼容, AX、BX、CX、DX都可分为2个独立的8位寄存器来使用

  • H代表高位寄存器
  • L代表低位寄存器

九、字节与字

  1. 在汇编的数据存储中,有2个比较常用的单位
  • 字节:byte,1个字节由8bit组成,可以存储在8位寄存器中
  • :word,1个字由2个字节组成,这2个字节分别称为字的高字节和低字节
  1. 比如数据20000(4E20H,0100111000100000B),高字节的值是78,低字节的值是32


  2. 1个字可以存在1个16位寄存器中,这个字的高字节、低字节分别存储在这个寄存器的高8位寄存器、低8位寄存器中

十、段寄存器

  1. 8086在访问内存时要由相关部件提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址
  2. 是什么部件提供段地址?段地址在8086的段寄存器中存放
  3. 8086有4个段寄存器:CS、DS、SS、ES,当CPU需要访问内存时由这4个段寄存器提供内存单元的段地址
  • CS (Code Segment):代码段寄存器
  • DS (Data Segment):数据段寄存器
  • SS (Stack Segment):堆栈段寄存器
  • ES (Extra Segment):附加段寄存器

每个段寄存器的具体作用是?

1. CS和IP

  1. CS为代码段寄存器,IP为指令指针寄存器,它们指示了CPU当前要读取指令的地址
  2. 任意时刻,8086CPU都会将CS:IP指向的指令作为下一条需要取出执行的指令



2. 指令的执行过程

十一、指令和数据

  1. 在内存或者磁盘上,指令和数据没有任何区别,都是二进制信息

  2. CPU在工作的时候把有的信息看做指令,有的信息看做数据,为同样的信息赋予了不同的意义


  3. CPU根据什么将内存中的信息看做指令?

  • CPU将CS:IP指向的内存单元的内容看做指令
  • 如果内存中的某段内容曾被CPU执行过,那么它所在的内存单元必然被CS:IP指向过

1. jmp指令

  1. CPU从何处执行指令是由CS、IP中的内容决定的,我们可以通过改变CS、IP的内容来控制CPU执行目标指令
  2. 8086提供了一个mov指令(传送指令),可以用来修改大部分寄存器的值,比如
    mov ax,10、mov bx,20、mov cx,30、mov dx,40
  3. 但是,mov指令不能用于设置CS、IP的值,8086没有提供这样的功能
  4. 8086提供了另外的指令来修改CS、IP的值,这些指令统称为转移指令,最简单的是jmp指令



2. 练习


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容

  • 编程语言的发展 机器语言由0和1组成 汇编语言(Assembly Language)用符号代替了0和1,比机器语言...
    阿凡提说AI阅读 3,994评论 0 15
  • 汇编总结 汇编的发展史 机械语言 由0和1组成的机器指令(如:0101 0001 1101 0110) 汇编语言(...
    iChuck阅读 1,302评论 1 8
  • 越底层越单纯!真正的程序员都需要了解的一门非常重要的语言,汇编! 机器语言 我们所写的语言最终安装在机器上的是什么...
    瑞阳gg阅读 586评论 0 0
  • 汇编语言百度百科词条: 机器语言 由0和1组成的机器指令. 汇编语言(assembly language) 由于机...
    Superman168阅读 1,022评论 0 3
  • 王爽汇编全书知识点大纲 第一章 基础知识 机器语言 汇编语言的产生 汇编语言的组成 存储器 cpu对存储器的读写 ...
    2c3ba901516f阅读 2,408评论 0 1