概述
目录
汇编优点:
汇编应用:
汇编用处:
学习目的:
机器语言和汇编语言:
计算机组成:
CPU:
总线:
内存:
拓展槽:接外部设备
访问寄存器和内存
确定物理地址地址的方法(2.4-2.7)
内存的分段表示法(2.8)
汇编优点:
????效率:开发软件的核心部件,快速执行和实时响应。
☮开发效率:做合适的事,开发效率无敌。
汇编应用:
????1.底层:计算机及外围设备的驱动程序。
????2.操作系统的内核。
♈3.嵌入式系统:家用电器,仪器仪表,物联网等。
汇编用处:
汇编语言在学习计算机中起到了独特的作用————直击计算机系统的核心。
1.便于加深对计算机原理和操作系统等课程的理解。
2.向上理解各种软件系统的原理,打下技术理论基础。
3.向下为掌握硬件系统的原理,打下实践应用基础。
学习目的:
1.学会底层的程序调式和错误分析方法。
2.理解硬件结构,掌握指令集,理解程序的运行过程。
3.内容:8088、8086指令集与汇编语言程序设计,选用8086是因为现代操作系统太过复杂。适用于教学。
拓展:inter 80x86汇编、Linux汇编、ARM汇编。
贯穿实践的方法。
学会观察机器的内部状态
学习进程
机器语言和汇编语言:
机器语言:机器指令的集合
机器指令:一台机器可以正确执行的命令。机器指令由一串二进制数表示,例:01010000
电平脉冲:高电平为1,低电平为0.
⇲趣事
早期程序员将01数字编码的程序代码打在纸带上1打孔,0不打孔。再将程序通过纸带机输入计算器,再进行计算。
汇编语言:主体是汇编指令,汇编指令是机器指令偏于记忆的书写格式,是机器指令的助记符。
计算机组成:
CPU:
✨计算机核心部件,控制整个计算机的运作并进行运算。想要让一个CPU工作,就必须向他提供指令和数据。
指令和数据的表示:
????计算机中的数据和指令,存储在内存或磁盘上。
数据和指令,都是二进制信息
问题:二进制信息1000100111011000是数据。还是指令?
1000100111011000 ---> 89D8H
数据如何表示?
100010011011000B(二进制)B是二进制
89D8H(十六进制)H是十六进制
104730o(八进制)o是八进制
358D(十进制)D是十进制
数据量:B、KB、MB、GB、TB.........
计算机中的储存单元:
◐一个存储器被划分为若干个存储单元,每个存储单元从0开始顺序编号;
例如:
一个存储器有128个储存单元,编号从0~127,
实际内存空间很“大”,8086有20条数据线,寻址空间2的20次方,为1MB。
总线:
????在计算机中专门有连接CPU和其他芯片的导线,通常称为总线。
物理上:一根根导线的集合;
逻辑上:逻辑上划分为
①地址总线:CPU通过地址总线来指定存储单元的。
地址总线宽度,决定了可寻址的存储单元大小。
N根地址总线(宽度为N),对应的寻址空间为2的N次方(每根线都有0或1,是转化为10进制最大的范围)
寻址能力:cpu最大使用内存的能力
②数据总线:
CPU与内存或其他器件之间的数据传送就是通过数据总线来进行的。
数据总线的宽度决定了cpu与外界的数据传送速度 (宽度与速度成正比)
③控制总线
cpu通过控制数据总线对外部器件进行控制。
控制总线是一些不同控制线的集合。
控制总线的宽度决定了cpu对外部器件的控制能力。(宽度与控制能力成正比)
内存:
cpu对储存器的读写
cpu要想进行数据的读写,必须和外部器件进行三类信息的交互:
存储单元的地址(地址信息)
器件的的选择,读或写命令(控制信息)
读或写的数据(数据信息)
演示
机器码:101000000000001100000000
16进制:A00300
汇编指令:MOV AL,[3]
含义:从3号单元读取数据送入寄存器AL
内存地址空间
cpu地址总线宽度为N,寻址空间为2的N次方B
8086CPU地址总线宽度为20,那么可以寻址1MB个储存单元,其内存地址空间为1MB
RAM随机存储
ROM只读存储
将各类存储器看作一个逻辑存储器——统一编址:内存整合
所有的物理存储器被看作一个由若干存储器单元组成的逻辑存储器每个物理存储器在这个逻辑存储器中占有一个地址段,即一段地址空间
在编写汇编要了解机器的内存地址空间的分配方案
拓展槽:接外部设备
实践方案——DOS方案
DOSBox
访问寄存器和内存
寄存器及数据存储(2.1-2.2节)
cpu组成
寄存器是cpu内部的信息存储单元
8086CPU有14个寄存器:
通用寄存器:AX,BX,CX,DX
变址寄存器:SI,DI
指针寄存器:SP,BP
指令指针寄存器:IP
段寄存器:CS,SS,DS,ES
标志寄存器:PSW
共性
8086 CPU所有的寄存器都是16位的,可以存放两个字节
通用寄存器-----以AX为例
一个16寄存器存储一个16位的数据
最大值?2的16次方-1或者FFFFH;
横看成岭侧成峰
问题:8086上一代cpu的寄存器都是8位,如何保证程序的兼容性?
通用寄存器均可以分为两个独立的8位寄存器
AX可以分为AH和AL(高八位,低八位)
习惯用十六进制进行计算。
“字”在寄存器中的存储
8086是16位CPU
8086的字长(word size)为16bit
一个字(word)可以存在一个16位寄存器中
这个字的高位字节存在这个寄存器的高八位寄存器
这个字的低位字节存在这个寄存器的低八位寄存器
mov add指令(2.3节)
;汇编指令 控制CPU完成的操作 用高级语言描述 mov ax,18 ;将18送入AX AX=18 mov ah,78 ;将78送入AH AH=78 add ax,8 ;将寄存器AX中数值加上8 AX=AX+8 mov ax,bx ;将寄存器BX中数据送入AX AX=BX add ax,bx ;将AX,BX内容相加,结果存在AX中 AX=AX+BX
汇编指令不区分大小写 mov和add默认十进制 十进制什么都不写,十六进制后写h
确定物理地址地址的方法(2.4-2.7)
CPU访问内存单元时要给出内存单元的地址。
所有的内存单元构成的存储空间是一个一维的线性空间。
每一个内存单元在这个空间中都有一个唯一的地址,这个唯一的地址称为物理地址。
8086有20位地址总线,可传送20位地址,寻址能力为1M。
8086是16位结构的CPU
运算器一次最多可以处理16位的数据,寄存器的最大宽度为16位
在8086内部处理的传输、暂存的地址也是16位,寻址能力也只有64KB:
8086如何处理在寻址空间上的这个矛盾?
用两个16位的地址(段地址、偏移地址)合成一个20位的物理地址
内部暂存器将两个16传到地址加法器,合成物理地址
地址加法器合成物理地址的方法:
物理地址=段地址* 16+偏移地址 CS<<4+IP
基地址(段地址):
本质含义:用两个16位的地址(段地址、偏移地址),相加得到一个20位的物理地址
CPU在访问内存时,用一个基础地址(段地址* 16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址
内存的分段表示法(2.8)
8086CPU用段地址* 16+偏移地址=物理地址
内存并没有分段,段的划分来自CPU!!!
同一段内存,多种分段方案
第一张图
起始地址(基础地址)10000H
段地址(取地址前十六位):1000H,大小为100H
段地址:偏移地址
Debug的使用(实验1的预备知识部分)
CS、IP与代码段(2.9-2.10)
jmp指令(2.11-2.12)
内存中字的储存(3.1)
用DS和【address】实现字的传送(3.2-3.4)
DS与数据段(3.5)
栈与栈操作的实现 (3.6-3.10)
关于栈的总结 (p69:段的综述)。
最后
以上就是昏睡冬天为你收集整理的汇编入门(持续更新)的全部内容,希望文章能够帮你解决汇编入门(持续更新)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复