汇编语言程序设计04-07课程笔记

来源:互联网 发布:网络骗局麻将 编辑:程序博客网 时间:2024/06/07 00:42
------滴:4课---------第二章:8086cpu的内部结构
1.微处理器总线结构分为,内部结构和外部结构。
2.8086cpu芯片有40个管脚,他通过这些引脚与外部逻辑连接完成信息交换。
这些引脚就是微处理器及的总线,有一下功能:
1.与存储器之间交换信息
2.与Io设备交换信息:中间通过io电路。xx卡。
3.能输入输出信号
3.总线:地址,控制,数据总线;
---------------------
1.地址总线:单项的;能访问到最大的地址空间与cpu地址线有关
2.数据总线:双向的;能传输多大的数据,与cpu和存储器或io设备一次能交换


数据的位数有关;即带宽
3.控制总线:大部分单项,有一些双向
-------------------
微处理器的内部结构:cpu
1.运算功能
2.接受和发送数据的能力
3.内部可以暂存少量的数据:寄存器
4.能对指令进行寄存,译码并执行的操作
5.能提供整个系统所需的定时和控制信号
6.能响应io设备的中断请求


二。cpu内部结构图
1.控制器:程序计数器,指令寄存器,指令译码器,控制逻辑部件,堆栈指示


器,状体寄存器 6部分组成。
2.运算器alu
3.io控制逻辑
4.工作寄存器:地址寄存器,数据寄存器


三。
1.程序计数器:用于保存下一条要执行的指令地址。也叫指令地址计数器
2.指令寄存器:从外部寄存器中读入当前要执行的指令
3.指令译码器:对上面的指令进行译码分析,从而cpu知道怎么操作
4.控制逻辑部件:发送控制信号:节拍脉冲和电位发送
5.处理器状体字:暂存处理器当前的状态;结果正还是负?是否益处?是否进


位或借位,是否结果为0等标志。 每个位表示一个标志。我们可以去测这些状


态。
6.堆栈指示器:对堆栈操作的时候提供地址的。


四。I/O控制逻辑:功能:输入输出操作。


五。cpu程序执行过程:
1.取指令1,执行1,去指令2,执行2,取指令3。。。。 cpu的工作效率很低
为了克服以上缺点:
 8086的取指令和执行指令是并行的。采用指令队列的方式。
--------- biu总线接口单元 eu执行单元
biu负责读指令到队列,知道满了为止就等待,eu负责从队列中取指令,出发队


列为空。


========第5课=======微处理器的寄存器组织=============
一。这课这个知识点,是学习汇编语言程序设计的关键
1.8086、8088cpu内部共有14个16位寄存器,用于提供运算,控制指令执行和对


指令及操作数的寻址。存的地址,存的数据,存的控制数据。
掌握每个寄存器的作用以及用法,是学好汇编语言程序设计的基础。


2.寄存器分为:通用寄存器8个,内部寄存器5=4+1指针,alu的标志寄存器=16


个。
 14个寄存器按其用途可分为3大类:通用寄存器8、段寄存器4、控制寄存器2:


指针、标志


一。8个通用寄存器:
 1.数据寄存器 4个:
 2.地址指针2和变址寄存器2 4个


二。4个数据寄存器 H 高位,L低位。我们可以把高8位低8位分开来存储。
AH AL AX -- 累加器
BH BL BX --基地址寄存器
CH CL CX --计数器:循环次数
DH DL DX --数据寄存器
8 8位 16位


编程的时候,如果要存储一个8位的数据,那么我们可以选择这8个名称来存储


;如果要存储一个16位的数据,那么可以通过这4个名称的寄存器来存储数据。


三。4个地址寄存器:地址指针和变址寄存器
SP --堆栈指针寄存器
BP --基址指针寄存器
SI --源变址寄存器
DI --目的变址寄存器


题目:
在存储器地址为2000H开始的以下连续的存储单元中,存储着100个字节的无符


号二进制数,求这100个字节数的累加和(不考虑益处),并将和存放在AL中?


解题思想:
用源变址寄存器SI指向存储器首地址,要累加的字节数存放在计数器CX中,每


一次的累加和都放到AL中,开始AL清零。然后从SI作为地址的单元中取出一个


字节数与AL原来的内容相加,SI的内容曾1,循环执行CX次。


mov si,2000H 首地址赋值
mov cx,100  循环次数
mov al,00H  清零
NEXT:add AL,[SI] 用al的内容做被加数,以SI的内容做地址找到这个单元的内


容(数据)和AL相加,和保存在AL中去。
INC SI //SI的值自加1
LOOP NEXT
//注意,loop会自动让CX--1,作为循环计数器。


===============第6课:====cpu寄存器组织========
一。段寄存器
  在微机系统的内存中通常存放着3类信息:
代码 -- 指示cpu执行何种操作


数据 -- 程序处理的对象或结果


堆栈信息--被保存的返回地址和中间结果等


代码段、数据段、堆栈段


cs代码段寄存器,指向当前的代码段,指令由此段取出
ds数据段寄存器,指向当前的数据段。
es附加数据段寄存器。
ss指向当前的堆栈段


二。控制寄存器2个
1.指令指针寄存器ip:下一个要执行的存储器的偏移地址
2.标志寄存器flag:9位有用
 状态标志:6 是0吗?溢出吗?。。。负数吗?进位吗?
 控制标志:3


===========第7课==========
一。存储器地址空间和数据存储格式
1.对存储器管理,以字节为单位管理的。一个字节8位,一个位就是一个二进制



2.一共有20跳地址总线,能寻址的空间2(20)1MB
3.每个字节对应一个唯一的地址
4.地址范围为0 - 2(20)-1
5.存储器内,2个连续的字节,定义为一个字,低字节(低8位)
6.字节中最低位为0,最高位为7,字中,最高位为15位。因为最低位是从0下标


算起的,所以最高位不是16而是15.
7.变量名:数据定义伪指令。用变量名来代替一个地址。地址多少我们很难记


,但是我们用变量名,就能够很好的使用该对应的地址。
8。DB字节 DW字 DD双字节 的变量定义。
9.偶地址,是对准的;奇地址,是未对准的。类似于struct的对齐问题。
1.对于访问一个偶地址的字的指令,也只需要一个总线周期;
  对于访问一个奇地址,需要二个总线周期;所以内存对齐可以提高访问速度
----
二。储存器的分段与物理地址的形式
1.为什么要分段?
8086有20条地址线,能寻址的外部存储空间为1MB,内部能够想存储器提供地址


编码的地址寄存器有6个:bx bp cp dp....均为16位,所以用这6个16位地址寄


存器任意一个个外部存储器提供地址,只能提供2(16)64k个地址,所以对1MB


地址寻址不完。这16位地址寄存器分别为:
BX
BP
SI
DI
SP
IP   这些存储器以某种寻址方式向存储器提供段内偏移地址。


为了让1M都寻址到,那么就有必要把外部存储器分段。
将外部1M空间分成个若干个逻辑段,从而寻址范围扩大到了1MB


2.怎么分段?
1MB存储空间中,每个单元的时机编码称为物理地址。
把1Mb的存储空间划分成若干个逻辑段,每段最多64kb
各个逻辑段的起始地址必须被16整除,即一个段的起始地址的低4位二进制吗必


须是0
每个段有自己的头,所以记得头地址,那么我们都可以通过偏移地址来找东西
。。。。。。













原创粉丝点击