【汇编语言与微机原理】 期末半开卷复习整理(下)

2023-10-30 20:10

本文主要是介绍【汇编语言与微机原理】 期末半开卷复习整理(下),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

输入输出

8086采用I/O端口独立编址
in AL/AX,imm8/DX
out imm8/DX,AL/AX
大于0FFH的端口只能存在DX
读外设(查询)

status:in al,dxtest al,80H;//测标志位jz statusmov dx,100hin al,dx

写外设(查询)

status:mov dx,102Hin al,dxtest al,80Hjnz status;//D7=1,忙,继续查mov dx,100hmov al,charout dx,al

74LS273:锁存。输出锁存寄存器。
74LS244:缓冲。输入缓冲,输出锁存。
A 0 A_0 A0=0, R D ‾ = 1 \overline{RD}=1 RD=1,读IRR、ISR、查询自
A 0 A_0 A0=1, R D ‾ = 0 \overline{RD}=0 RD=0,读IMR
输入时序
在这里插入图片描述
输出时序
在这里插入图片描述

选通信号Ready将置1,状态口连在 D 7 D_7 D7上,选通信号置Ready

中断与8259

传送指令装入中断向量。

mov ax,0
mov es,ax
mov bx,N*4;//N为中断类型号
mov ax,offset intproc
mov es:[bx],ax
mov ax,seg intporc
mov es:[bx+2],ax
sti

内部中断:除法错误、溢出、指令单步、断点。
外部中断:NMI、INTR(高电平有效)。NMI类型号为2,边沿触发。
关中断情况:系统复位、中断被响应、CLI。

一条指令的结束是相应NMI的必要条件
普通屏蔽:IMR的 D i D_i Di为1,对应 I R i IR_i IRi屏蔽。
特殊屏蔽: I R i IR_i IRi被屏蔽时, I S R i ISR_i ISRi为0
中断结束: I S R ISR ISR某位为0
EOI:非自动中断结束,全嵌套清楚优先级最高位。
特殊:配合循环优先权,发EOI清楚ISR对应位。
缓冲:多片级联。非缓冲:单片。
IRR中断请求寄存器,1表示对应位有请求,响应后复位。
IMR中断屏蔽寄存器,0表示允许中断
ISR中断服务寄存器,1表示在被服务
PR优先级判别。
优先级固定方式:从高到低为 I R 0 IR_0 IR0, I R 1 IR_1 IR1,… I R 7 IR_7 IR7,完全嵌套
自动循环:初始 I R 0 , . . . , I R 7 IR_0,...,IR_7 IR0,...,IR7, I R i IR_i IRi被服务后, I R i IR_i IRi最低, I R i + 1 m o d 8 IR_{i+1\mod 8} IRi+1mod8最高
特殊循环:可设置初始最低优先级
普通全嵌套:禁止同级/低级优先权中断
特殊全嵌套:禁止低级中断,在主片。
S P ‾ / E N ‾ \overline{SP}/\overline{EN} SP/EN级联方式:主片 S P ‾ = 1 \overline {SP}=1 SP=1,从片 S P ‾ = 0 \overline{SP}=0 SP=0
I R 0 . . . I R 7 IR_0...IR_7 IR0...IR7中断请求。
C A S 0 . . . C A S 7 CAS_0...CAS_7 CAS0...CAS7级联引脚双相
C A S 2 . . . C A S 0 CAS_2...CAS_0 CAS2...CAS0:主片输出、从片输入、级联信号
例如
A 0 = 0 , W R ‾ = 0 A_0=0,\overline{WR}=0 A0=0,WR=0,写 I C W 1 , O C W 2 , O C W 3 ICW_1,OCW_2,OCW_3 ICW1,OCW2,OCW3.
A 0 = 1 , W R ‾ = 0 A_0=1,\overline{WR}=0 A0=1,WR=0,写 I C W 2 − I C W 4 , O C W 1 ICW_2-ICW_4,OCW_1 ICW2ICW4,OCW1
O C W 1 OCW_1 OCW1:中断屏蔽字寄存器,写

in al,81H
and al,11111101B;IR1开放中断
out 81H,al

O C W 2 OCW_2 OCW2:优先级循环方式和发中断结束命令
EOI=1发中断结束,清除相应位
O C W 3 OCW_3 OCW3:查询字

mov al,0AH;读IRR的OCW3
out 20H,al
in al,20H;读IRR到AL

中断服务子程序整体流程:保护现场、开中断、中断处理、关中断、恢复现场、中断返回。

intproc proc farpush axpush dsstimov ax,seg donemov ds,axin al,0a0h;读开关状态out 0c0h,al;输出控制ledcmp al,0ffhjnz exitint al,82h;中断屏蔽or al,00000100Bout 82h,al
exit:climov al,20H;EOIout 80H,alpop dspop axiret
intproc endp

8255

D 0 − D 7 D_0-D_7 D0D7数据线, A 0 − A 1 A_0-A_1 A0A1地址, C S ‾ \overline{CS} CS片选, P A 0 − P A 7 PA_0-PA_7 PA0PA7, P B 0 − P B 7 PB_0-PB_7 PB0PB7, P C 0 − P C 7 PC_0-PC_7 PC0PC7
A组:A口、C口高4位。B组:B口、C口低4位。
方式0:无条件/查询。
方式1/2:查询、中断
输入时,8255为数据缓冲。输出时,8255为数据锁存。可知已准备好数据。
方式1输入: S T B ‾ \overline{STB} STB选通(外设准备好数据,将数据锁存、输入)
IBF:输入缓冲区满则,输出
I N T R A INTR_A INTRA:中断请求,输出。
方式1输出: O B F ‾ \overline{OBF} OBF输入缓冲器满,可取走。
A C K ‾ \overline{ACK} ACK:外设响应,输入,低有效。
I N T R INTR INTR:中断请求,输出。
方式1输出时 O B F ‾ \overline{OBF} OBF有效时输出,外设接受后回送 A C K ‾ \overline{ACK} ACK
方式2时外设提供 A C K ‾ \overline{ACK} ACK后输出数据

短口 P C i PC_i PCi输入输出
A端口 P C 7 PC_7 PC7 O B F ‾ \overline{OBF} OBF
A端口 P C 6 PC_6 PC6 A C K A ‾ / I N T E A \overline{ACK_A}/INTE_A ACKA/INTEA
A端口 P C 5 PC_5 PC5 I B F A IBF_A IBFA
A端口 P C 4 PC_4 PC4 S T B A ‾ / I N T E A \overline{STB_A}/INTE_A STBA/INTEA
A端口 P C 3 PC_3 PC3 I N T R A INTR_A INTRA I N T R A INTR_A INTRA
B端口 P C 2 PC_2 PC2 S T B B ‾ / I N T E B \overline{STB_B}/INTE_B STBB/INTEB A C K B ‾ / I N T E B \overline{ACK_B}/INTE_B ACKB/INTEB
B端口 P C 1 PC_1 PC1 I B F B IBF_B IBFB O B F B ‾ \overline{OBF_B} OBFB
B端口 P C 0 PC_0 PC0 I N T R B INTR_B INTRB I N T R B INTR_B INTRB

输入时序图

在这里插入图片描述
输出时序图
在这里插入图片描述
方式控制字

D 7 D_7 D7 D 6 D_6 D6 D 5 D_5 D5 D 4 D_4 D4 D 3 D_3 D3 D 2 D_2 D2 D 1 D_1 D1 D 0 D_0 D0
1A方式高位A方式低位A输入输出 P C 7 − P C 4 PC_7-PC_4 PC7PC4输入输出B方式B输入输出 P C 3 − P C 0 PC_3-PC_0 PC3PC0输入输出

其中,0表示输出,1表示输入。

C口位控制字

D 7 D_7 D7 D 6 D_6 D6 D 5 D_5 D5 D 4 D_4 D4 D 3 D_3 D3 D 2 D_2 D2 D 1 D_1 D1 D 0 D_0 D0
0无意义无意义无意义选位选位选位清零/置1

例:
在这里插入图片描述

mov dx,303H
mov al,81H
out dx,al
mov al,0FH
out dx,al;(PC7=1)
prn:mov dx,302Hin al,dxtest al,04hjz prn;//查询输入
mov dx,300H;A口
mov al,ah;//ah=打印数据
out dx,al
mov dx,303H
mov al,0eH;STB#=0
out dx,al
nop
nop
mov al,0FH;STB#=1
out dx,al

8254/8253奇数骑

8254每个奇数骑内都有个计数单元、初值寄存器、输出锁存器。GATE控制奇数骑工作。
工作过程:设定工作方式、计数初值、硬件启动,计数初值送入奇数骑、每个clk使得奇数骑-1、计数结束。
方式2/3连续计数,GATE高电平计数,上升沿重新计数。
方式0/4由软件启动(重写计数初值)。1/5硬件启动(GATE上升沿),0/4在高电平计数。
out初始值:方式0在写控制后变低,其余变高。
方式1输出N个CLK负脉冲,方式5输出1个CLK负脉冲(与2/4波形相同,N-1高,1低)。
方式3:若计数值为偶数,输出 N 2 \frac N2 2N个clk高电平和低电平。若计数值为奇数,输出 N + 1 2 \frac{N+1}2 2N+1个高电平和 N − 1 2 \frac{N-1}2 2N1个低电平。
方式0:计数结束中断。1:可编程硬件触发单稳负脉冲发生器
方式2:速率发生器。3:方波速率发生器。4:软件触发选通信号发生。5:硬件选通发生。
读出控制字:只有8254有,8253没有。

D 7 D_7 D7 D 6 D_6 D6 D 5 D_5 D5 D 4 D_4 D4 D 3 D_3 D3 D 2 D_2 D2 D 1 D_1 D10
读出控制字110:锁存计数值0:锁存状态1:2#1:1#1:0#0
状态字OUTisNULL读写格式读写格式工作方式工作方式工作方式进制

输入时钟信号频率 F c l k F_{clk} Fclk,周期 T c l k T_{clk} Tclk,输出频率 F o u t F_{out} Fout,周期 T o u t T_{out} Tout
T o u t = T c l k N T_{out}=T_{clk}N Tout=TclkN, N = F c l k F o u t N=\frac{F_{clk}}{F_{out}} N=FoutFclk,先写控制字,再写初值
某工厂计件系统,装一个零件产生一个脉冲接 C L K 0 CLK_0 CLK0,装100个后扬声器发声,则奇数骑0方式0,奇数骑1在方式3。

mov al,10H
mov dx,PORT_CTRL
out dx,al
mov al,100
mov dx,PORT_0
out dx,al
mov al,76H
mov dx,PORT_CTRL
out dx,al
mov ax,2000
mov dx,PORT_1
out dx,al
mov al,ah;写高8位
out dx,al

数字信号与模拟信号

单极性电压输出: V o u t = ( − D / ( 2 8 ) ) ∗ V R E F V_{out}=(-D/(2^8))*V_{REF} Vout=(D/(28))VREF
双极性电压输出: V o u t = D − 2 7 2 7 ∗ V R E F V_{out}=\frac{D-2^7}{2^7}*V_{REF} Vout=27D27VREF
正负范围-5~5
ILE:数据输入,锁存允许
C S ‾ \overline{CS} CS:片选
W R 1 ‾ \overline{WR_1} WR1:写数据
X F E R ‾ \overline {X_{FER}} XFER数据传送控制
W R 2 ‾ \overline{WR_2} WR2:第二级写。当 X F E R ‾ = W R 2 ‾ = 0 \overline{X_{FER}}=\overline{WR_2}=0 XFER=WR2=0,开始转换
L E 1 = L E 2 = 1 LE_1=LE_2=1 LE1=LE2=1直通,否则缓冲。 I o u t I_{out} Iout输出电压
双缓冲控制:

mov dx,portx
out dx,xdata
mov dx,porty
out dx,ydata
mov ax,portcon
out dx,al
call delay

读8路电压转换

lea di,buf
mov cx,8
mov dx,300
convert:out dx,al;启动转换push dxmov dx,310H
state:in al,dx;读EOCtest al,20H;D5(EOC)为1?jz state
pop dx
in al,dx;读取结果
mov [di],al
add dx,2;下一模拟通道
add di,2
loop convert

0832锯齿波
N = V i n − V R E F − V R E F + − V R E F − ∗ 2 8 N=\frac{V_{in}-V^-_{REF}}{V^+_{REF}-V^-_{REF}}*2^8 N=VREF+VREFVinVREF28

mov dx,330H
mov al,00H
aga:out dx,alcall delayinc aljmp aga
delay procpush cxmov cx,10loop $pop cxret
delay endp

这篇关于【汇编语言与微机原理】 期末半开卷复习整理(下)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/310313

相关文章

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

hdu4407容斥原理

题意: 有一个元素为 1~n 的数列{An},有2种操作(1000次): 1、求某段区间 [a,b] 中与 p 互质的数的和。 2、将数列中某个位置元素的值改变。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.Inpu

hdu4059容斥原理

求1-n中与n互质的数的4次方之和 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWrit

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类

rtmp流媒体编程相关整理2013(crtmpserver,rtmpdump,x264,faac)

转自:http://blog.163.com/zhujiatc@126/blog/static/1834638201392335213119/ 相关资料在线版(不定时更新,其实也不会很多,也许一两个月也不会改) http://www.zhujiatc.esy.es/crtmpserver/index.htm 去年在这进行rtmp相关整理,其实内容早有了,只是整理一下看着方

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern