当前位置: 首页 > news >正文

网站建设大作业论文网站开发需要多少钱价格

网站建设大作业论文,网站开发需要多少钱价格,wordpress生成二维码,2021年有没有人给个网站《汇编语言》- 读书笔记 - 第15章-外中断 15.1 接口芯片和端口15.2 外中断信息1. 可屏蔽中断#xff08;Maskable Interrupt#xff09;2. 不可屏蔽中断#xff08;Non-Maskable Interrupt#xff09;设计思想 15.3 PC 机键盘的处理过程1. 键盘输入2. 引发 9 号中断3. 执行… 《汇编语言》- 读书笔记 - 第15章-外中断 15.1 接口芯片和端口15.2 外中断信息1. 可屏蔽中断Maskable Interrupt2. 不可屏蔽中断Non-Maskable Interrupt设计思想 15.3 PC 机键盘的处理过程1. 键盘输入2. 引发 9 号中断3. 执行 int 9 中断例程 15.4 编写int9 中断例程编程思路代码检测点 15.1 15.5 安装新的 int 9 中断例程分析代码运行效果 实验 15 安装新的 int9 中断例程 CPU通过中断机制得知外部输入事件并通过I/O接口与数据总线实现与外设的数据交换从而实现对外设输入的有效处理。 CPU 对外设输入的通常处理方法 外设的输入送入端口;向 CPU 发出外中断(可屏蔽中断)信息;CPU 检测到可屏蔽中断信息; 3.1. 如果 IF1CPU 在执行完当前指令后响应中断执行相应的中断例程;可在中断例程中实现对外设输入的处理。 端口和中断机制是 CPU 进行 I/O 的基础。 15.1 接口芯片和端口 CPU 通过端口和外部设备进行联系。 15.2 外中断信息 外部设备 在完成一系列自己的工作后需要将产生的数据或状态发给CPU处理时就会触发外中断 中断信息的发送过程大致如下 中断请求信号 外设芯片在适当时候会通过自身的中断输出引脚向主板上的中断控制器发送中断请求信号这通常表现为一个电信号的变化。例如在8086体系结构中外设可以通过INTRInterrupt Request线向CPU发出中断请求。 中断控制器 主板上的中断控制器如Intel 8259A可编程中断控制器负责接收来自多个外设的中断请求并根据它们的优先级和中断向量进行管理。中断控制器会将有效的中断请求打包并通过IRQInterrupt Request Line线传输到CPU。 CPU响应中断 当CPU在执行完当前指令后检查中断请求线时如果发现有中断请求存在它会暂停当前任务保存现场然后通过读取中断向量表IVT获取中断服务程序ISR的地址跳转到相应的处理程序执行中断处理。 线路连接 中断请求信号的传送是通过主板上的硬件连线完成的。例如在8086/8088系统中外设与CPU间的中断请求线和中断响应线INTA#是主板上的物理连接线它们属于系统总线的一部分通过这些线路上的电信号变化来进行中断请求和响应的通讯。 注意随着技术的发展更现代的计算机系统可能采用了更为复杂和高级的中断控制器和总线标准但核心原理仍然是外设通过特定线路发送中断信号给CPU并由CPU依据一定的优先级策略来响应和处理中断。 1. 可屏蔽中断Maskable Interrupt 可屏蔽中断 | CPU在收到可屏蔽中断时会根据 CF 的状态来决定执行完当前指令后是否响应。 IF 状态响应不响应IF 1✅IF 0✅ 中断过程 可屏蔽中断的中断过程除了中断类型码是通过数据总线从外部传进CPU的其它与内中断相同。 我们可以通过指令STI, CLI设置IF来控制是否响应可屏蔽中断。 ———— 指 令 ————— 功 能 —描述cli (Clear Interrupt Flag)IF0禁止中断CPU执行cli将IF0后仅保留对不可屏蔽中断(NMI)的响应直至遇到STI指令为止。此操作有助于保护在执行重要且不能被打断的代码时不被中断处理程序打乱。例如 在更改栈指针SS:SP时需要防止因中断处理程序介入而破坏栈的状态。sti (Set Interrupt Flag)IF1允许中断CPU执行sti将IF1后重新开启中断响应功能。CPU会再次响应挂起的中断请求恢复正常的中断处理流程。这对于完成关键区域操作后恢复系统的正常中断响应至关重要。 在IF0期间中断请求不会丢失但会被延迟处理等待CPU重新打开中断响应后按照中断控制器维护的队列顺序逐一处理。是否超时以及超时后的处理方法取决于设备本身的特性以及操作系统的调度策略。 硬件中断控制器如Intel 8259A可编程中断控制器负责管理和维持中断请求的排队。CLI与STI结合运用构建短暂的中断防护区域确保其间代码免受外部中断影响待关键操作完成后通过STI恢复中断响应保障系统并发处理能力和实时响应性能。在多任务OS中内核常在切换进程环境、管控硬件资源等关键场景调用这两条指令。 2. 不可屏蔽中断Non-Maskable Interrupt 当不可屏蔽中断发生时CPU会立即停止当前的执行流程保存必要的上下文信息然后跳转到预设的NMI处理程序去执行相应的处理代码。 即使在 CPU 执行 CLI 指令 禁止了可屏蔽中断 的情况下也不例外。 由于NMI的重要性其处理过程一般要求快速、简洁尽量减少对系统运行的影响。 NMI触发的原因可能包括但不限于以下几种情况 硬件故障如电源故障、内存错误、严重硬件故障等系统调试需求在调试环境中开发者可能通过人工或硬件手段触发NMI以便快速进入调试模式监控程序某些嵌入式系统或服务器中监控程序可能会通过NMI报告严重的系统错误或警告性能计数器溢出某些高性能处理器中性能监控单元PMU的计数器溢出可能导致NMI。 设计思想 可屏蔽中断几乎都是外设触发的。告诉CPU来活了。 不可屏蔽中断是发生了必须紧急处理的事件。CPU要先解决它了再说别的。 15.3 PC 机键盘的处理过程 1. 键盘输入 键盘上每个键分按下、松开两种状态都会产生相应的扫描码。 按下时的叫通码松开时的叫断码。 它会被送入主板上的相关接口芯片的寄存器中该寄存器的端口地址为 60h 断码 通码 80h 比如: g 键的通码为 22h断码为 a2h。 表 15.1 是键盘上部分键的扫描码只列出通码。 2. 引发 9 号中断 60h 端口收到信号相关的芯片就会向 CPU 发出中断类型码为9的可屏蔽中断信息。 CPU 收到后如果 IF1则响应中断引发中断过程转去执行 int 9 中断例程。 3. 执行 int 9 中断例程 BIOS 提供 int 9 中断例程处理基本的键盘输入: 首先中断例程通常会从60h端口读取扫描码。处理扫描码 2.1. 若是字符键则将扫描码转换为ASCII码存入键盘缓冲区。 2.2. 若是功能键或控制键则可能更新内存中的键盘状态字节或其他内部状态。向键盘控制器发送应答信号表明中断已被处理。 BIOS键盘缓冲区 BIOS键盘缓冲区是系统启动时BIOS设置的一块内存区域用于存储15个键盘输入事件每个事件占用2字节其中高位字节为扫描码低位字节为字符码。这个缓冲区通过int 9中断机制收集并暂存键盘输入确保在操作系统尚未完全加载或正忙时也能记录用户的按键动作。 字单元(1)字单元(2)…字单元(15)高位-扫描码高位-扫描码…高位-扫描码高位-字符码高位-字符码…高位-字符码 0040:17 单元存储键盘状态字节该字节记录了控制键和切换键的状态。字节各位信息如下。 位状态0右 Shift 状态置1表示按下右 Shift 键:1左 Shitt 状态置1表示按下左 Shit 键;2Ctrl 状态置1表示按下 Ctrl 键;3Alt 状态置1表示按下 Alt 键;4ScrollLock状态置1表示 Scroll 指示灯亮;5NumLock 状态置1表示小键盘输入的是数字;6CapsLock 状态置1表示输入大写字母:7Insert 状态置1表示处于删除态。 15.4 编写int9 中断例程 键盘输入的处理过程: 键盘产生扫描码;扫描码送入 60h 端口;引发 9 号中断;CPU 执行 int 9 中断例程处理键盘输入。 前三步都是硬件系统的活我们能插手的就只有和4步。但因为 int 9 中断处理程序要与一些硬件细节打交到。所以我们只对 int 9 做下封装扩展。 编程 在屏幕中间依次显示“a”~“z”并可以让人看清。在显示的过程中按下 Esc 键后改变显示的颜色。 思路 先循环显示 a ~ z。为了看清书上给的方案是空循环模拟延迟效果自己写一个 int 9 代替原版。 2.1. 我们自己的int 9中调用原版 int 9。 2.2. 拿到原版 int 9 返回的扫描码。 2.3. 判断如果是 Esc 修改显存改变颜色。 代码 assume cs:code stack segmentdb 128 dup(0) stack endsdata segmentoint9 dw 0,0 data endscode segmentstart: mov ax,stack ; 设置栈段和栈顶位置mov ss,axmov sp,128mov ax,data ; 设置数据段mov ds,axmov ax,0 ; 设置附加段mov es,ax; ------------ 保存原 int 9 中断列和入口到 ds:0, ds:2 ------------push es:[9*4]pop ds:[0]push es:[9*42]pop ds: [2]; ---------------- 将我们的新 int 9 写入中断向量表 ----------------mov word ptr es:[9*4],offset int9mov es:[9*42],cs; ------------------------- 显示 a 到 z -------------------------mov ax,0b800h ; 设置显存段mov es,axmov ah,a ; 要显示的字符串从 a 开始s: mov es:[160*1240*2],ah ; 显示字符call delay ; 调用子程序延时inc ah ; 下一个字符cmp ah,z ; 如果不是z继续循环jna s; ------------- 将中断向量表中 int 9恢复为原来的地址 -------------mov ax,0mov es,axpush ds:[0]pop es:[9*4]push ds:[2]pop es:[9*42]mov ax,4c00hint 21h ; ; --------------------- 子程序 delay ------------------- ; 让CPU空循环模拟延时效果 ; ------------------------------------------------------- ; 参数: 无 ; 返回: 无 ; ------------------------------------------------------- delay:push ax ; 备份寄存器push dxmov dx,2h ; 循环 2h 次可以自己把握mov ax,0 delays: sub ax,1sbb dx,0 ; 10000000h 循环递减cmp ax,0 ; 直到 ax, dx 都为 0 才跳出循环jne delayscmp dx,0jne delayspop dx ; 还原寄存器pop axret ; 返回 ; ---------------------- 子程序 delay ------------------- ; ; ; --------------------- 子程序 int 9 ------------------- ; 调用原 int 9 获取扫描码实现按 Esc 变色 ; ------------------------------------------------------- ; 参数: 无 ; 返回: 无 ; ------------------------------------------------------- int9:push ax ; 备份寄存器push dxpush esin al,60h ; 从60h端口读取数据pushfpushfpop bxand bh,11111100bpush bxpopfcall dword ptr ds:[0] ; 调用原来的 int 9 中断例程cmp al,1jne int9retmov ax,0b800hmov es,axinc byte ptr es:[160*1240*21]int9ret:pop es ; 还原寄存器pop dxpop axiret ; 返回 ; --------------------- 子程序 int 9 ------------------ ; code ends end start检测点 15.1 《汇编语言》- 读书笔记 - 各章检测点归档 - 检测点 15.1 15.5 安装新的 int 9 中断例程 任务安装一个新的 int9 中断例程。功能在 DOS下按F1键后改变当前屏幕的显示颜色其他的键照常处理 分析 改变屏幕的显示颜色。 改变从 B8000H 开始的 4000 个字节中的所有奇地址单元中的内容 mov ax,0b800hmov es axmov bx,1mov cx,2000 s: inc byte ptr es:[bx]add bx,2loop s按键常规处理 直接调用原 int 9 原 int9 入口地址 不能保存在安装程序中。我们把它放在0:0200。 安装新 int9 中断例程 0:0200 ~ 0:0203用来保存原 int9 的地址了。 我们保存新 int9 时从 0:0204 开始。 代码 assume cs:code stack segmentdb 128 dup(0) stack endscode segmentstart: mov ax,stack ; 设置栈段和栈顶位置mov ss,axmov sp,128; -------- 安装: 复制中断例程到目标内存 -------mov ax,cs ;设置 ds:si 指向源地址mov ds,axmov si,offset int9mov ax,0 ;设置 es:di 指向目的地址mov es,axmov di,204h mov cx,offset int9end-offset int9 ;设置 cx为传输长度cld ;设置传输方向为正。movsb中si,di递增rep movsb ;重复复制数据次数由 cx 控制; -------- 安装: 复制中断例程到目标内存 -------; ---------- 备份原 int9 入口到 [0:200~0203] ----------push es:[9*4]pop es:[200h]push es:[9*42]pop es:[202h]; ---------- 备份原 int9 入口到 [0:200~0203] ----------; ---------- 设置中断向量表 ----------cli ; 临时屏蔽中断mov word ptr es:[9*4],204h ; 设置的偏移地址0~3用来存原int9地址了mov word ptr es:[9*42],0 ; 设置的段地址sti ; 恢复中断; ---------- 设置中断向量表 ----------ok: mov ax,4c00hint 21h; ; --------------------- 子程序 int 9 ------------------- ; 调用原 int 9 获取扫描码实现按 Esc 变色 ; ------------------------------------------------------- ; 参数: 无 ; 返回: 无 ; ------------------------------------------------------- int9:push ax ; 备份寄存器push bxpush cxpush esin al,60h ; 从60h端口读取数据; 模拟 int 指令用 call 调用原 int 9pushf ; 进入中断后 IF、TF已经是0 直接入栈即可call dword ptr cs:[200h] ; 调用原来的 int 9 中断例程cmp al,3bh ; 判断是否 F1 键jne int9ret ; 如果不是直接结束mov ax,0b800h ; 设置显存mov es,axmov bx,1mov cx,2000s: inc byte ptr es:[bx]add bx,2loop sint9ret:pop es ; 还原寄存器pop cxpop bxpop axiret ; 返回 int9end:nop; --------------------- 子程序 int 9 ------------------ ; code ends end start运行效果 实验 15 安装新的 int9 中断例程 《汇编语言》- 读书笔记 - 第15章-外中断-实验15 安装新的 int9 中断例程
http://www.w-s-a.com/news/418974/

相关文章:

  • 深圳罗湖企业网站发稿类别是什么
  • 做网站基本语言企业应用软件开发
  • 网站建设与运营 市场分析影视小程序搭建
  • vs 团队网站开发中铁建设门户网登录咋进不去了
  • 快速网站建设公司哪家好优秀的网站建设
  • 网站开发的自适应wordpress搜索词结果按文章标题
  • 微网站是用什么开发的wordpress中英文主题
  • 纯静态网站怎么做淄博seo开发
  • 江西新农村建设权威网站盐步网站制作
  • 网站ui设计例子怎么做打鱼网站
  • 在1688做公司网站wordpress category
  • 单页面 网站 模板网站代理公司
  • 手机网站底部电话代码网站后台点击添加图片没有反应
  • 龙岩建设局网站声明自学制作网站难不难
  • 济南网站优化小黑godaddy中文网站开发
  • 做微课常用的网站广州seo优化推广
  • 主机屋如何做网站电脑网页游戏大全
  • 工作网站建设中布线费用账务处理特色的重庆网站推广
  • dede 网站地图模板htm写作网站水平哪个最好
  • 服务器上的网站erp教学零基础入门
  • 网站建设58设计资料网站
  • 如何把动态图发网站做头像网页设计实训报告小结
  • 做简历用的网站wordpress版权说明
  • 网站关键词有哪些网站新闻前置审批
  • 怎么自己注册网站义乌做公司网站
  • 做哪种网站赚钱苏州住房城乡建设部网站
  • 镇江做网站学编程学哪一种比较好
  • 华美天一建筑公司网站赚钱做任务的网站有哪些
  • asp网站打开速度慢家乡网页设计教程
  • 网站 设计 深圳书店网站的建设