微机原理中为什么程序要分层运行的原因有哪些

2025年03月11日 阅读 (54)

总线带宽=(总线宽度/8)*总线时钟频率/每个存取周期的时钟数

【总线宽度:总线在单位时间内可以传输的数据总数,数据总线的宽度:8,16,32位】

  • 指令周期、总线周期、时钟周期?
  • 什么是同步时序,半同步时序和异步时序?
  • 其他概念总线的主设备:能在总线上生成总线周期从而发起存储器访问或I/O访问的设备总线的从设备:总线上响应主设备访问的设备寻址能力:地址总线的位数
  • 8088处理器的基本总线周期由4个时钟周期构成【读/写总线周期】

T1状态:输出存储器地址或I/O地址

T2状态:输出控制信号

T3和Tw状态:总线操作持续,并检测READY以决定是否延长时序

T4状态:完成数据传送

·在8088的工作过程中,什么情况下会产生Tw?具体发生在什么时刻?

当8088进行读写存储器或I/O接口时,如果存储器或I/O接口无法满足CPU的读写时序(来不及提供或读取数据时),需要CPU插入等待状态Tw。

在读写总线周期的T3和T4之间插入Tw。

  • 存储器分为:主存【存放正被CPU使用的程序和数据】、辅存【存放当前不正在运行的程序和数据】和缓冲存储器CACHE【用于两个工作速度不同的部件之间,在交换信息的过程中起缓冲作用】
  • 主存储器分为只读存储器ROM和随机存取存储器RAM。

RAM掉电后数据丢失,ROM掉电后数据不丢失

·存取速度

·读周期

  • 系统程序区使用ROM,用户程序区使用RAM
  • ROM:只读存储器

RAM:随机存取存储器,包括静态RAM,动态RAM【即SRAM,DRAM】

SRAMDRAM
基本存储单元触发器电路单个MOS管
优点速度快,无须刷新集成度高,价格低,功耗小
缺点集成度低,功耗和价格较高速度较SRAM慢,需要刷新
使用场景多用于存储器容量不大或速度较高的场合【Cache】主要用于存储容量较大的场合【主存】
微机原理中为什么程序要分层运行的原因有哪些(1)
" data-caption="" data-size="normal" data-rawwidth="832" data-rawheight="645" class="origin_image zh-lightbox-thumb lazy" width="832" data-original="https://pic3.zhimg.com/v2-7e27d88eec9c4ccdf5cf09fb908f5cd2_r.jpg" data-actualsrc="https://pic3.zhimg.com/v2-7e27d88eec9c4ccdf5cf09fb908f5cd2_b.jpg" data-original-token="v2-6d702fd117a4133ffc573690e922e588">

·DRAM的刷新:DRAM的每个存储单元需要在一定时间之内刷新一次,(一般取2ns,称为刷新周期)才能保持数据不变

刷新过程实质上是先将原存信息读出,再由刷新放大器形成原信息并重新写入的再生过程。

·DRAM芯片的刷新电路每次只能对一行存储单元进行刷新,而不是刷新全部存储单元

刷新的实现方法:利用读操作进行刷新

·刷新有三种方式:分散刷新、集中刷新和异步刷新

  • 高速缓冲区Cache
  • 各自的特点
微机原理中为什么程序要分层运行的原因有哪些(3)
" data-caption="" data-size="normal" data-rawwidth="1369" data-rawheight="149" class="origin_image zh-lightbox-thumb lazy" width="1369" data-original="https://pic2.zhimg.com/v2-24ea76b82822347c545fb5a200e283a9_r.jpg" data-actualsrc="https://pic2.zhimg.com/v2-24ea76b82822347c545fb5a200e283a9_b.png" data-original-token="v2-24ea76b82822347c545fb5a200e283a9">

·译码是将某个特定的编码输入翻译为有效输出的过程

·有一个不使用的地址信号就对应有两种编码,这两种编码实际上指向同一个存储单元,出现了地址重复【一个存储单元对应多个存储器地址】,浪费了存储空间

微机原理中为什么程序要分层运行的原因有哪些(5)
" data-caption="" data-size="normal" data-rawwidth="1366" data-rawheight="166" class="origin_image zh-lightbox-thumb lazy" width="1366" data-original="https://pic3.zhimg.com/v2-682ef0c8d242d24345bf39a2beff444a_r.jpg" data-actualsrc="https://pic3.zhimg.com/v2-682ef0c8d242d24345bf39a2beff444a_b.png" data-original-token="v2-682ef0c8d242d24345bf39a2beff444a">

解读:

  • CPU与存储器的连接
  • 地址线
    • CPU的地址线数往往比存储芯片的地址线数多
    • 不同容量存储芯片的地址线数不同
    • (一般)CPU低位地址线与存储器的地址线相连,高位地址线作为芯片扩充使用,或作他用
  • 数据线
    • CPU的数据线数与存储芯片的数据线数不等时,必须对存储芯片扩位,使其数据线数与CPU的数据线数相等
  • 8086字扩展和位扩展

芯片的存储容量=存储单元数*每个存储单元的数据位数=2^M*N

M=芯片地址引脚个数,N=芯片数据引脚的个数

eg.存储结构2K*8: 16K位存储容量,11个地址引脚,8个数据引脚

例题:

微机原理中为什么程序要分层运行的原因有哪些(7)
" data-caption="" data-size="normal" data-rawwidth="1520" data-rawheight="1102" class="origin_image zh-lightbox-thumb lazy" width="1520" data-original="https://pic2.zhimg.com/v2-63a6ae786f5e5926488b3b4a01d9ef8d_r.jpg" data-actualsrc="https://pic2.zhimg.com/v2-63a6ae786f5e5926488b3b4a01d9ef8d_b.jpg" data-original-token="v2-b3d293837e6b8d4a6c6c7e74d2e141f8">
微机原理中为什么程序要分层运行的原因有哪些(9)
" data-caption="" data-size="normal" data-rawwidth="1516" data-rawheight="1086" class="origin_image zh-lightbox-thumb lazy" width="1516" data-original="https://pic3.zhimg.com/v2-e07fd65cfa48b5122c15ae1177600d6e_r.jpg" data-actualsrc="https://pic3.zhimg.com/v2-e07fd65cfa48b5122c15ae1177600d6e_b.jpg" data-original-token="v2-70cd8fca9c7207d4ace9144515c342e2">
微机原理中为什么程序要分层运行的原因有哪些(11)
" data-caption="" data-size="normal" data-rawwidth="906" data-rawheight="640" class="origin_image zh-lightbox-thumb lazy" width="906" data-original="https://pic1.zhimg.com/v2-9356a8137988bc442db07de96e082eec_r.jpg" data-actualsrc="https://pic1.zhimg.com/v2-9356a8137988bc442db07de96e082eec_b.jpg" data-original-token="v2-ce9b4d3b69bf4db1a537d7a0b293048b">
微机原理中为什么程序要分层运行的原因有哪些(13)
" data-caption="" data-size="normal" data-rawwidth="1525" data-rawheight="1036" class="origin_image zh-lightbox-thumb lazy" width="1525" data-original="https://pic3.zhimg.com/v2-02af981bb1a2683da3b00f71995a4706_r.jpg" data-actualsrc="https://pic3.zhimg.com/v2-02af981bb1a2683da3b00f71995a4706_b.jpg" data-original-token="v2-f23df2bdb9b82829f1de1a2b6a3a0d32">
微机原理中为什么程序要分层运行的原因有哪些(15)
" data-caption="" data-size="normal" data-rawwidth="1519" data-rawheight="1073" class="origin_image zh-lightbox-thumb lazy" width="1519" data-original="https://pic4.zhimg.com/v2-aa755566501c3c2a604bb06b664f5d03_r.jpg" data-actualsrc="https://pic4.zhimg.com/v2-aa755566501c3c2a604bb06b664f5d03_b.jpg" data-original-token="v2-c30478929bc9ec718b46d11c31f18f53">
微机原理中为什么程序要分层运行的原因有哪些(17)
" data-caption="" data-size="normal" data-rawwidth="1500" data-rawheight="1125" class="origin_image zh-lightbox-thumb lazy" width="1500" data-original="https://pic3.zhimg.com/v2-072af55e89e06c59c81bd557c87dc71e_r.jpg" data-actualsrc="https://pic3.zhimg.com/v2-072af55e89e06c59c81bd557c87dc71e_b.jpg" data-original-token="v2-4a265f0556623f9eb8471ce63e3d3200">
  • 8086的16位存储结构

8086的存储系统是由对称的两个存储体即存储模块构成。

对应的所有奇地址单元(1,3,5,…,FFFFFH)

接处理器高8位数据总线D15~D8

·两个存储器芯片的片选端连接在一起

·8086设计有高字节允许信号,与地址A0一起用于选择存储体

A0=0(地址E0000H),BHE*=0,访问16位数据

A0=0(地址E0000H),BHE*=1,访问低8位数据

A0=1(地址E0001H),BHE*=0,访问高8位数据

A0=1,BHE*=1,无效的数据访问组合

·高位地址A19~A17=111,片选信号有效

·8086存储器按16位数据宽度组织:支持8位和16位数据访问;偶地址开始的16位访问可以一次完成;奇地址开始的16位访问需要两次操作。地址对齐:16位数据以偶地址开始

  • CPU与存储器的连接图
微机原理中为什么程序要分层运行的原因有哪些(19)
" data-caption="" data-size="normal" data-rawwidth="788" data-rawheight="477" class="origin_image zh-lightbox-thumb lazy" width="788" data-original="https://pic4.zhimg.com/v2-7e330e79ffefe43dfe3917e0e3ff3183_r.jpg" data-actualsrc="https://pic4.zhimg.com/v2-7e330e79ffefe43dfe3917e0e3ff3183_b.jpg" data-original-token="v2-17135d026b1c53f6a56d0b7611074377">
  • 存储芯片的片选逻辑图
  • 为什么需要I/O接口?外设不能与CPU直接相连,需要经过I/O接口电路
  • I/O接口是位于系统与外设间、用来协助完成数据传送和控制任务逻辑电路和相应的软件控制

I/O接口的典型结构:

微机原理中为什么程序要分层运行的原因有哪些(21)
" data-caption="" data-size="normal" data-rawwidth="834" data-rawheight="406" class="origin_image zh-lightbox-thumb lazy" width="834" data-original="https://pic1.zhimg.com/v2-d0cf2321bd31c072149a78436031b680_r.jpg" data-actualsrc="https://pic1.zhimg.com/v2-d0cf2321bd31c072149a78436031b680_b.jpg" data-original-token="v2-06f735981821881b423a3908c6c22b7b">

·数据缓冲

I/O接口的数据缓冲用于匹配快速的处理器相对慢速的外设之间的数据转换,与数据寄存器的作用相对应

·信号变换

  • 如何找到I/O设备? I/O端口的编址

编址问题:外设(I/O接口的各种寄存器)需要利用I/O地址区别。

·I/O寻址方式

8088/8086处理器访问I/O接口时只有两种寻址方式:

DX为16位寄存器,可寻址全部I/O地址(0000~FFFFH)

  • 编址方式?

·80x86支持I/O端口独立编址,只使用最低16个地址信号,对应64K个8位I/O端口。

优点:

·不需要专门的I/O指令

·I/O数据存取与存储器数据存取一样灵活

缺点:

·I/O端口要占去部分存储器地址空间

·程序不易阅读,不易分辨访问存储器和访问外设

3.I/O地址译码

  • 解决I/O接口与处理器的连接【类似于存储器与处理器的连接】4.存取I/O端口实现输入输出指令【输入指令(读)IN;输出指令(写)OUT】
  • IN:将外设数据传送给CPU内的AL/AX·字节输入IN AL, i8IN AL, DX·字输入IN AX, i8IN AX, DX
  • OUT:将CPU内的AL/AX数据传送给外设·字节输出OUT i8, ALOUT DX, AL·字输出OUT i8, AXOUT DX, AX5.外设与主机的数据传送
微机原理中为什么程序要分层运行的原因有哪些(23)
" data-caption="" data-size="normal" data-rawwidth="784" data-rawheight="363" class="origin_image zh-lightbox-thumb lazy" width="784" data-original="https://pic3.zhimg.com/v2-09e47a487fa23c3937ae094786cb1a5e_r.jpg" data-actualsrc="https://pic3.zhimg.com/v2-09e47a487fa23c3937ae094786cb1a5e_b.jpg" data-original-token="v2-1944ada7c80828b5118d853031ede345">
  • 主要由软件程序控制的数据传送·无条件传送:对于工作方式简单的外设,无须事先进行确认,处理器随时可以与之进行数据传送·查询传送:对实时性要求不高的外设,处理器可以在不繁忙时询问外设的工作状态,在外设准备好数据后处理器与之进行数据传送·中断传送:需要及时处理外设数据时,外设可以主动向处理器提出请求。在满足条件情况下,处理器暂停执行当前程序,转入执行处理程序与外设进行数据传送
  • 主要由附加硬件控制的数据传送·DMA传送:对需要快速传送大量数据的外设,处理器让出总线的控制权,由DMA控制器接管,并在外设与存储器之间建立直接的通路进行数据传送
微机原理中为什么程序要分层运行的原因有哪些(25)
" data-caption="" data-size="small" data-rawwidth="302" data-rawheight="170" class="content_image lazy" width="302" data-actualsrc="https://pic1.zhimg.com/v2-d0ec2a294e2a732deae63975eb171fc0_b.jpg" data-original-token="v2-a3b5824be2c8a8d1b67a477e8854ab93">

·简述DMA传送的工作过程,什么是DMA读和DMA写?-1-DMA传送的工作过程:DMA预处理DMA请求和应答DMA数据交换DMA控制器对传送字节数进行计数,据此判断全部数据是否完成传送-2-DMA读和DMA写是DMA传送的两种类型,DMA读:存储器的数据被读出传送给外设DMA写:外设的数据被写入存储器·I/O处理器控制传送:有大量外设需要接入系统,可以专门设计I/O处理器管理外设的数据交换甚至数据处理等工作。--特点:(1)无条件传送方式:【控制简单,所需的软硬件最少】【缺点:不可靠】(2)查询传送方式:【可靠,较简单】【缺点:串行工作,系统效率低】(3)中断传送方式:【可靠,并行工作,高效】【增加中断控制器,控制较复杂】**传送方式的比较**-1-无条件传送:慢速外设需与CPU保持同步-2-查询传送:简单实用,效率较低-3-中断传送:外设主动,某种程度下可与CPU并行工作,但每次传送需要大量额外时间开销-4-DMA传送:DMA控制,外设直接和存储器进行数据传送,适合大量、快速数据传送-5-I/O处理器控制传送:通道或处理机硬件参与传输,CPU解放程度最高,硬件投入最大、结构最复杂·无条件传送:三态缓冲器、锁存器无条件输入接口电路连接开关,无条件输出接口电路连接发光二极管·查询:测最低位用于输入,测最高位用于输出D0=1,说明输入数据准备好;D0=0,说明输入数据没有准备好D7=0,说明可接收数据;D7=1,说明不可接收数据

  • 中断

·中断的含义:计算机具有能停止正在执行的程序,转去处理当前出现的急需处理的事件,处理完后又能继续运行原程序的一种功能。

微机原理中为什么程序要分层运行的原因有哪些(27)
" data-caption="" data-size="normal" data-rawwidth="966" data-rawheight="400" class="origin_image zh-lightbox-thumb lazy" width="966" data-original="https://pic2.zhimg.com/v2-ea6b06efa0ab89b25fad0a89a2b24159_r.jpg" data-actualsrc="https://pic2.zhimg.com/v2-ea6b06efa0ab89b25fad0a89a2b24159_b.jpg" data-original-token="v2-29ad1dd888f5269c414679b9f574f6c8">

·中断传送方式

现场:对处理器执行程序有影响的工作环境

--进入中断后需要保护现场

--中断返回前需要恢复现场

(6)中断源识别

?系统有多个中断请求,CPU如何识别中断源?

中断向量法

(7)中断优先权管理

中断优先权:根据中断事件的轻重缓急,为每个中断源分配一个优先处理的级别

?有多个中断同时请求,CPU如何应对

【中断优先权排队】

(8)中断嵌套

一个中断处理过程中又有一个中断请求并被响应处理

?中断处理过程中,又有中断提出请求

·8088中断类型:

采用向量中断机制,可处理256个中断

按照引起中断的原因分类,可分为内部中断和外部中断

--内部中断:除法错中断、指令中断、溢出中断、单步中断

--外部中断:非屏蔽中断、可屏蔽中断

?内部中断:由于8088内部执行程序异常引起的程序中断

?外部中断:由于8088外部提出中断请求引起的程序中断

--除法错中断:在执行除法指令时除数为0或商超过了寄存器所能表示的最大范围

--指令中断:执行中断指令INTn

--溢出中断:执行溢出中断指令INTO,且溢出标志OF=1

--单步中断:单步标志TF=1

·多种中断同时请求时,最先响应的则可能是单步中断或NMI中断

--非屏蔽中断(2号)

非屏蔽中断主要用于处理系统的意外或故障,如:电源掉电、存储器读写错误或受到严重干扰

--可屏蔽中断

要求:

(1)当前指令执行结束

(2)IF=1,CPU是开中断的,可以响应;IF=0,CPU是关中断的,不能响应

·非屏蔽中断和可屏蔽中断的区别在于:是否受到微处理器的控制

  • 中断向量表·中断向量表是:中断向量号与其对应的中断服务程序入口之间的链接表用中断向量表保存着系统所有中断服务程序的入口地址。【低字:偏移地址IP;高字:段地址CS】该表保存的256个中断向量分别对应于256种中断类型,每个表项占4个字节,两个字节存放中断处理程序的段地址,另两个字节存放中断处理程序的段内偏移地址。中断类型号*4=对应中断向量的地址【不是内存地址】0~4: 0 除法错中断 1单步中断 2非屏蔽中断 3指令中断 4溢出中断eg.溢出中断的中断类型号为04h,则它的中断向量的地址为04h*4=10h。内存地址从10h开始的4个字节,10h和11h两字节中存放溢出中断程序的偏移地址,12h和13h两字节中存放溢出中断程序的段地址。在发生溢出中断时,将这个偏移地址和段地址分别取出给寄存器IP和CS,CPU即转向溢出中断处理程序·8086/8088处理器中断屏蔽位—中断允许标志IF【IF=1开中断;IF=0关中断】控制中断是否被响应,防止重要的程序被外设中断打扰用于外设数据交换的中断属于可屏蔽中断,要响应可屏蔽中断,处理器必须处于中断开放的状态·处于中断关闭状态,则可以禁止中断响应【处理器一旦进入中断响应周期,将自动关闭中断,以免被新的可屏蔽中断打扰】·中断开放:允许可屏蔽中断被响应中断开放前是不允许中断的最迟于中断返回前,应该重新开放中断若中断服务程序本身可以被中断,可以将开放中断的操作提前【eg.进入中断程序后马上开放中断】·中断源:引起处理器中断的来源或原因中断响应周期包括:中断关闭、断点保护、中断源识别中断服务程序:现场保护、中断服务、现场恢复、中断开放6.定时计数控制接口
  • 微机系统实现定时功能的三种方法:

·8253每个计数通道与外设接口的3个信号线及其作用:

·8253有6种工作方式,由方式控制字确定

工作方式:

·8253每个通道有6种工作方式可供选择。

6种工作方式:

若设定某通道为方式0,其输出OUT信号为低电平。在计数初值经预置寄存器装入减1计数器后,计数器开始计数,OUT输出仍为低电平。以后CLK引脚上每输入一个时钟信号(下降沿),计数器的计数值减1。当计数值减为0即计数结束时,OUT端变为高电平,并且一直保持到该通道重新装入计数值或重新设置工作方式为止。

·8253/8254的初始化

8253/8254的初始化编程为写入控制字和计数初值。

(一)写入控制字

mov al,0b4h 10 11 010 0B

mov dx,207h

out dx,al

mov ax,02f0h

mov dx,206h

out dx,al

mov al,ah

out dx,al

·设8253计数器0~2和控制字的I/O地址依次为f8H~fbH。

mov al,33h ;方式控制字00 11 001 1B

out 0fbh,al ;写入控制端口0FBH

mov al,80h

out 0f8h,al

mov al,50h

out 0f8h,al

代码的实现目标:设置计数器0采用工作方式1,先低后高写入计数值BCD码计数计数值为5080h

【格式:计数器,读写格式,工作方式,数制】

eg.已知某个8253的计数器0,1,2端口和控制端口的地址依次为40H~43H。要求设置其中计数器0为方式0,采用二进制计数,先低后高写入计数值。要求计数器0写入计数初值1024(=400H)

初始化程序为:

mov al,30h ;将方式控制字写入al

out 43h,al ;方式控制字写入控制端口43H

mov ax,1024 ;计数初值1024(=400H),写入计数器0地址40H

out 40h,al ;写入低字节计数初值

mov al,ah

out 40h,al

7.并行接口

·计算机系统的信息交换有两种方式:并行数据传输方式、串行数据传输方式

并行数据传输是以计算机的字长为传输单位,通常是8位、16位或32位,一次传送一个字长的数据。

·并行接口电路最基本的接口电路芯片是:三态缓冲器和锁存器

8255A特点:

-1- 24条可编程输入输出引脚,分成3个端口:端口A、端口B和端口C

-2- 通常端口A和端口B作为输入输出的数据端口,端口C作为控制或状态端口

-3-3种工作方式:方式0、方式1、方式2

(1)基本输入输出方式

(2)选通输入输出方式

(3)双向选通传送方式

--8255A初始化

mov dx,0fffeh ;假设控制端口的地址为FFFEH

mov al,0b1h ;方式控制字

out dx,al ;把方式控制字送到控制端口

问题:

·8255A的24条外设数据线有什么特点?

24条可编程输入输出引脚,分成3个端口:端口A、端口B和端口C。每个端口都是8位。3个数据端口分成两组进行控制:A组控制端口A和端口C的上半部分;B组控制端口B和端口C的下半部分。

***8255A有3种工作方式:方式0、方式1和方式2

也可以看作是两个独立的4位I/O口;

还可以用作A口和B口的控制信号。对输出数据进行锁存,对输入数据不锁存。

·设定8255A的端口A为方式1输入,端口B为方式1输出,则读取端口C的数据的各位是什么含义?

微机原理中为什么程序要分层运行的原因有哪些(29)
" data-caption="" data-size="normal" data-rawwidth="959" data-rawheight="479" class="origin_image zh-lightbox-thumb lazy" width="959" data-original="https://pic4.zhimg.com/v2-0851addd2cc277faed9baea75a4c06bb_r.jpg" data-actualsrc="https://pic4.zhimg.com/v2-0851addd2cc277faed9baea75a4c06bb_b.jpg" data-original-token="v2-9d51aa13a3168e4876fabb1a40b89d16">

·对8255A的控制寄存器写入B0H,则其端口C的PC5引脚是什么作用的信号线?

方式控制字为B0H=10110000B,说明A组为方式1输入,它将征用PC5引脚作为输入缓冲器满信号IBFA。

·8255A的程序初始化

eg.设8255A的A口工作在方式0,数据输出,B口工作在方式1,数据输入,编写初始化程序(设8255A的端口地址为FF80H~FF83H)

初始化程序如下:

mov dx,0ff83h ;控制寄存器端口地址为FF83h

mov al,10000110B ;A口方式0,数据输出,B口方式1,数据输入

out dx,al ;将控制字写入控制端

20根地址线,可以寻址的物理地址空间为1MB,CPU寄存器为16位,那么在传输地址时显然一次只能传输16位有效地址

  • 什么是逻辑地址和物理地址?逻辑地址:在8088内部和用户编程时,所采用的“段地址:偏移地址”形式;物理地址:物理存储单元具有的一个唯一的20位的编号。
  • 逻辑地址如何转换成物理地址?将逻辑地址中的段地址左移二进制4位(即乘16),加上偏移地址即得到20位物理地址。
  • 一个逻辑段最大为?由于指针寄存器长为16位,故逻辑段最大长度为2^16=64KB
  • 逻辑段开始地址是16倍数?段寄存器长为16位。
  • 1MB最多能分成多少个逻辑段?

由于每隔16个字节单元就可以开始一个逻辑段,1MB最多能分成1MB/16B=2^16个逻辑段

  • 七种寻址方式:立即数寻址;寄存器寻址;直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址【考点:判断目的操作数、源操作数的寻址方式】“OUT DX, AL”的目的操作数是寄存器间接寻址,源操作数是寄存器寻址方式(1)CF(进位标志)·CF=1时表示算术操作最高位产生了进位或者借位·CF=0时表示最高位无进位或者借位(2)PF(奇偶标志)·PF=1时表示数据最低8位中1的个数为偶数·PF=0时表示数据最低8位中1的个数为奇数(3)AF(辅助进位标志)运算过程中看最后四位,不论长度为多少,最后四位向前有进位或者借位,则AF=1,否则,AF=0。(4)ZF(零标志)·ZF=1表示操作结果为0·ZF=0表示操作结果不为0(5)SF(符号标志)·SF=1表示结果的最高位为1·SF=0表示结果的最高位为0(6)OF(溢出标志)【首位取0、1表示正负,看是否有问题】介于-(2^7-1)~2^7-1·OF=1表示此次运算发生了溢出·OF=0表示此次运算无溢出
  • 具体的指令对于标志位的影响:(1)cmp指令:比较两个操作数的大小CMP指令将目的操作数减去源操作数,但差值不回送目的操作数比较指令通过减法运算影响状态标志示例:cmp oprd1,oprd2为第一个操作数减去第二个操作数,但不影响第二个操作数的值,影响flag的CF、ZF、OF、AF、PFinc指令:加1指令执行结果影响AF、OF、PF、SF、ZF标志位,但不影响CF进位标志位dec指令:减1指令执行结果影响AF、OF、PF、SF、ZF标志位,但不影响CF进位标志位加1指令和减1指令不影响进位CF标志,但影响其他状态标志位。3.指令
  • 判断通用传送指令mov是否错误

格式:mov 目的操作数,源操作数

常见的错误:

示例:mov cx,dl 源操作数与目的操作数字长不一致

mov ip,dxip值不允许通过mov指令改变,改变IP需要转移指令

mov ,ax sp为堆栈指针,对栈顶元素操作应用push指令,而不能用mov指令

mov es,1234h 立即数不能直接送段寄存器,需要通用寄存器为桥梁

mov al,300 al只有8位,最大值为255

mov ax,bx+di 应改为 mov ax,[bx+di]

mov es,es 两个段寄存器之间不能直接传送数据

mov 20h,ah 立即数不能做目的操作数

  • 堆栈指令push/pop操作对象只能是操作数,是从高开始的。段寄存器ss存放栈顶的段地址;堆栈指针寄存器sp存放栈顶的偏移地址在任意时刻,ss:sp指向栈顶元素①进栈时,sp向低地址移动两个字节单元以指向新的栈顶,然后数据的低字节存放于低地址,高字节存放于高地址②出栈时,字从栈顶弹出,低地址字节送低字节,高地址字节送高地址,sp相应向高地址移动两字节单元栈空时,ss:sp指向栈空间最高地址单元的下一个单元在执行push ax后,ss:sp指向栈中的第一个元素堆栈是一个“先进后出”的主存区域,对“字”进行操作·进栈指令PUSH先使堆栈指针SP减2,然后把一个字操作数存入堆栈顶部·出栈指令POP把栈顶的一个字传送至指定的目的操作数,然后堆栈指针SP加2【注】进栈时,SP向低地址移动两个字节单元以指向新的栈顶,然后数据的低字节存放于低地址,高字节存放于高地址。出栈时,字从栈顶弹出,低地址字节送低字节,高地址字节送高字节,SP相应向高地址移动两个字节单元想象8088微处理器的堆栈段是“向下生长”的,可视为一个倒扣的箱子,数据从下面放进去,随着数据进栈,栈顶部(指针SP)逐渐减小。栈相关汇编代码:mov ax,1000hmov ss,axmov sp,0010h ;初始化栈顶mov ax,001Ahmov bx,001Bh ;赋值push axpush bx ;入栈sub ax,ax ;清零sub bx,bxpop bxpop ax ;从栈中恢复ax,bx原来的数据,执行后栈顶内容为bx中原来的内容
  • 大小写转换编码:依据:大写字母ASCII码的第五位为0,小写字母ASCII码的第五位为1assume cs:code,ds:datadata segmentdb 'JungKook'db 'BtS'data endscode segmentstart: mov ax,csmov ds,axmov bx,0mov cx,8s: mov al,and al,11011111mov ,alinc bxloop smov bx,8mov cx,3s0: mov al,or al,00100000mov ,alinc bxloop s0mov ax,4c00hint 21hcode endsend start·segment与ends是一对成对使用的伪指令,功能是定义一个段·segment说明一个段开始,ends说明一个段结束·end是一个汇编程序的结束标记
  • 程序的解读:在内存2000H段中查找第一个值为0字节,找到后将其偏移地址存储在dx中。·jcxz指令:--有条件转移指令,是短转移--指令格式: jcxz 标号 【若(cx)=0,转移到标号处执行】功能:if ==0) jmp short 标号ds:数据段寄存器//用jcxz指令assume cs:codecode segmentstart : mov ax,2000hmov ds,axmov bx,0s:mov ch,0mov cl,[bx]jcxz okinc bxjmp short sok: mov dx,bxmov ax,4c00hint 21hcode endsend start·loop指令--循环指令--指令格式: loop 标号功能:--; if jmp short 标号//用loop指令assume cs:codecode segmentstart : mov ax,2000hmov ds,axmov bx,0s:mov cl,[bx]mov ch,0inc cxinc bxloop sok:dec bxmov dx,bxmov ax,4c00hint 21hcode endsend start
  • call指令“call标号”是将该指令后的第一个字节偏移地址入栈,再转到标号处执行指令【压入的是原来的】·CPU执行“call 标号”时,相当于进行:push IPjmp near ptr 标号·CPU执行“call far ptr 标号”时,相当于进行:push CSpush IPjmp far ptr 标号·CPU执行“call 16位reg”push IPjmp 16位reg汇编p193
  • dup指令与dd,dw,db配合使用,用来重复定义数据db 3 dup:表示定义了3个字节,它们都是0db 3 dup:表示定义了9个字节,它们是0,1,2,0,1,2,0,1,2
  • 指令执行后状态标志位的变化【转化为2进制看】

以A~F字母开头的数据加0,原因:防止被当成变量

【注】mov指令不影响标志寄存器,故CF值保持不变。

看的是本行的指令,最高有效位、最低字节等都是对于本行操作的寄存器而言的。

·16位标志寄存器FLAGS的各种标志分为两类:6个状态标志和3个控制标志

~6个状态标志:CF,ZF,SF,OF,AF,PF

~3个控制标志:DF(方向标志),IF(中断允许标志),TF(陷阱标志)

DF:用于串操作指令中,以控制地址的变化方向

IF:用于控制外部可屏蔽中断是否可以被处理器响应 【IF=1,允许中断,IF=0,禁止中断】

TF:用于控制处理器是否进入单步操作方式【TF=1,处理器在每条指令执行结束时,产生一个编号为1的内部中断;TF=0处理器正常工作】

郑重声明:玄微运势的内容来自于对中国传统文化的解读,对于未来的预测仅供参考。