汇编语言 第15章编程及监测点15.1

王爽 《汇编语言》 读书笔记 十七 第十七章 使用BIOS进行键盘输入和磁盘读写 17.1 int9中断例程对键盘输入的处理 一般的键盘输入,在cpu执行完int9中断例程以后,欧放到了键盘缓冲区中。 键盘缓冲区有16个字单元,可以存储15个按键的扫描码和对应的ASCII码。 参照书P300页 关于键盘缓冲区的存储利用了队列或者环形队列数据结构。 17.2 使用int16h中断例程读取键盘缓冲 阅读详情

编程 在屏幕中间依次显示’a’ ~ ‘z’,并可以让人看清。在显示过程中,按下Esc键后,改变颜色。
分析
PC键盘输入的处理过程:
1 键盘产生扫描码
2 扫描码送入60h端口
3 引发9号中断
4 CPU执行执行9号中断例程处理键盘输入

注意这里的前4步仅仅完成了只是对键盘的输入的处理(具体处理过程参见教材 P274~P276),而并没有针对Esc按键进行颜色的变化,处理完前4步后 需要对键盘输入的扫描码进行分析 是否为Esc按键,如果是就进行颜色变换,而第一步和第二步是硬件帮我们直接完成的,所以我们只需要做一下工作即可
1 从60h端口读取扫描码 in al,60h
2 引发9号中断 对于int 9 中断过程 的模拟为 (注意这里是对中断过程的模拟,还没到中断例程的执行)
(1) 获取中断号,这里我们已经知道就是9号
(2) 标志寄存器入栈,pushf IF=0,TF=0
(3) push CS push IP
(4) (IP) = (n4) (CS) = (n4 + 2)
3 执行中断例程,可以使用call dword ptr ds:[0],来模拟 当然需要提前将9号中断的中断向量也就是中断例
程的入口放到 ds:[0] ds:[1]和 ds:[2] ds:[3] 处,这样调用call dword ptr ds:[0]时
(IP) = ((ds)*16+0) (CS)=((ds)*16 +2) ,这里完成了对键盘输入的处理
4 针对键盘的按键Esc时 变换字符的颜色 只需要修改显示的字符的属性即可(参见教材实验9材料)

监测点15.1
1 其实在我们的int9中断例程中,模拟int指令调用原来int9中 中断例程的程序段时可以精简的,因为在进入中断例程后,IF和TF都已经置为零了,就没有必要再进行设置了,对于程序段
pushf
pushf ;开始模拟中断例程第一步 标志寄存器入栈
pop bx
and bh,11111100b;设置TF=0 IF=0 IF第9位 TF第8位
push bx
popf ;注意可以用 popf来设置标志寄存器的值
call dword ptr ds:[0] ;对int指令进行模拟,调用原来的int9中断例程
可以优化为
pushf
call dword ptr ds:[0] ;对int指令进行模拟,调用原来的int9中断例程
这里之前有两个疑惑点
其一 题目中说在调用我们的新的int9中断例程时已经进入了中断例程,这个中断例程是指按下Esc键产生的中断例程(想了好久才想通…)
其二 简化之后的pushf是为了与 执行完我们的新的int9中断例程后 itret相照应 防止栈数据错乱

2 在主程序中,如果在执行设置int 9中断例程的段地址和偏移地址的指令之间,发生了键盘中断,则CPU将转去一个错误的地址执行,将发生错误。找出这样的程序段,改写它们,排除潜在的问题。
程序分析:

【1】关于设置中断向量表的指令,在程序中就2段。

mov word ptr es:[9*4], offset int9

mov es:[9*4+2], cs ;将新的int9入口地址写入中断向量表中

; 将中断向量回写回中断向量表中

    mov ax, 0
    mov es, ax                  ;将es指向0000段内存中断向量表
    push ds:[0]
    pop es:[9*4]
    push ds:[2]
    pop es:[9*4+2] 

   如果在指令执行在这2段中间,引发了键盘中断事件,由于正在设置中断向量表,故(ip)和(cs)值可能不确定。为了避免这2段代码不受到中断事件的干扰,将中断屏蔽了。

【2】sti和cli指令的用法:
cli 禁止中断发生 IF=0
sti 允许中断发生 IF=1
【3】这二段代码前后加上cli和sti指令即可:

;在中断向量表中设置新的中断入口地址的时候不让其发生中断
cli
mov word ptr es:[94],offset int9
mov word ptr es:[9
4+2],cs
sti

恢复中断向量表int9的源地址时:
cli
push ds:[0]
pop es:[94]
push ds:[2]
pop es:[9
4+2]
sti

汇编语言 王爽(第三版)实验十五 assume cs:codestack segment db 128 dup(0) stack endscode segment start: mov ax,stack mov ss,ax mov sp,128 push cs pop ds mov si,offset int9start 阅读详情

相关推荐

OpenSceneGraph编译、安装、开发环境

详细描述WIndows 10下使用Visual Studio 2019编译OpenSceneGraph 3.6.5的操作流程

国产CAx(CAD/CAE/CAM)软件研发 8772

(二十六)《汇编语言(王爽)》 | 检测点 15.1

《汇编语言(王爽)》 | 检测点 15.1

Skies_的博客 2530

使用 Claude Skills 构建专业级 AI Agent:技术实践指南

Claude Skills(也称)是一组基于文件系统的可重用资源包,为 Claude 提供特定领域的专业知识、标准化工作流程和最佳实践。与传统一次性 Prompt 不同,Skills 是持久化、自动触发、支持代码执行的智能模块。让 AI 真正理解并执行你的工作方式。Claude Skills 正在重新定义 AI 助手的边界——从“回答问题”升级为“执行专业工作的能力”。其可组合、可移植、高效、强大的特性,使其成为自动化重复任务、标准化工作流、提升团队效率的理想工具。未来已来。

weixin_44058951的博客 2226

《汇编语言》- 读书笔记 - 第15章-外中断

《汇编语言》第15章读书笔记,主要讨论外中断。介绍了接口芯片和端口在CPU与外设数据交换中的作用,可屏蔽中断和不可屏蔽中断处理流程,STI,CLI指令。阐述了键盘输入的处理,包括扫描码生成和中断响应。最后,通过示例展示了如何编写int9中断例程,在DOS环境下响应特定按键改变屏幕颜色。

灵台方寸山斜月三星洞 1395

从MRF8P9040N数据手册到ADS仿真:手把手教你搞定LDMOS功放设计(附完整模型下载)

本文详细解析了MRF8P9040N LDMOS功率放大器的数据手册关键参数,并提供了在ADS中进行仿真的完整指南。从模型导入、直流工作点验证到负载牵引与阻抗匹配设计,逐步指导工程师完成高效功放设计。文章还包含调试技巧和常见问题解决方案,帮助优化射频功放性能。

weixin_27015733的博客 490

Mediapipe姿态估计——用坐标计算手指关节弯曲角度并实时标注

利用mediapipe搭建姿态检测模型;mediapipe人体标注节点坐标;mediapipe计算手指弯曲角度并实时渲染;mediapipe计算关节弯曲角度。mediapipe手势识别;mediapipe姿态检测模型;mediapipe学习。

kalakalabala的博客 1万+

汇编语言检测点15.1

汇编语言检测点15.1 建议先自己思考问题的答案,不懂则返回看书 1、精简代码为: pushf call dword ptr ds:[0] 2、使用cli和sti,成对使用 cli ; TF = 0 不响应中断 push ds:[0] pop es:[9*4] push ds:[2] pop es:[9*4+2] sti ; TF = 1 可以响应中断 ...

shaco_的博客 1460

SRv6项目实践(三):P4Runtime基础以及交换机控制

在正式介绍P4runtime基础之前,先说一说P4的编译和实现的过程该文件包含了各个表和操作,它们的id用一个索引值来表示,比如a表用b操作,不会直接说用名字为B的操作,而是说用索引为xxx的操作,然后锁定到b上执行相关的功能,其次,用了一个bitwith来描述,要访问的数据的比特长度是多长。p4c编译器将p4编译成两份文件,其中一份是,另一份是,将这两个文件再整合起来,作为配置,放到交换机中。

a1164520408的博客 3411

王爽《汇编语言》(第四版)第十五章 检测点15.1

在 int 9 中断例程中,模拟 int 指令调用原 int 9 中断例程的程序段是可以精简的,因为在进入中断例程后,IF 和 TF 都已经置 0,没有必要再设置。在主程序中,如果在设置 int 9 中断例程的段地址和偏移地址之间发生了键盘中断,则 CPU 将转去一个错误的地址执行,将发生错误。在上述设置地址前加上 cli,设置地址后加上 sti 即可避免因中断造成的地址设置错误。来自键盘的中断是一种可屏蔽中断,CPU 根据标志寄存器 IF 的值来决定是否响应该中断,如果为 1 则响应,为 0 则不响应。

星辰大海的博客 511

YOLOv11 改进入门篇 | 轻量级涨点技巧:GhostConv 替代普通卷积的实战指南

摘要: 本文介绍如何通过GhostConv改进YOLOv11,实现轻量化涨点。YOLOv11深度增加导致参数量、延迟和内存占用上升,GhostConv通过“本征特征+线性变换”策略,在精度几乎无损的情况下降低30%-50%计算量。文章详细解析GhostConv原理,对比普通卷积的参数量和FLOPs优势,并提供完整的代码级改造流程,包括模块实现、注册及网络配置。实验表明,该方法有效提升边缘端推理效率,适用于移动端等资源受限场景。

shrgegrb的博客 1656

【阿里AgentScope框架】多框架组合:AgentScope加LangChain,让你的开发效率直线上升

本文以一个例子来看下AgentScope框架和LangChain如何实现融合使用,真的超级简单,一看就懂。这是一种思路,为多种框架的融合使用提供借鉴。

同学小张的博客 3473

王爽汇编第二版检测点15.1(整理)

对于15.1的答案精简为 pushf call dword ptr ds:[0] 我觉得似乎不用pushf了吧,因为这是中断例程,占用的是中断类型码9的中断向量, 那在中断发生时,中断过程中,标志寄存器入栈是cpu硬件完成的啊,而且IF和TF也都由硬件置0,干嘛还

绝迹·危言的专栏 4094

Python爬虫实战教程:如何高效爬取税务局通知通告

税务局发布的通知通告包含政策法规、办税指南、公告信息等,是纳税人、企业合规经营的重要参考。官网发布频率高,手动查看不便,自动爬取并保存,方便信息及时掌握及历史数据归档。本文以合法合规的方式示范,建议实际应用前确认目标网站允许爬取的范围和方式。建议使用pandas进行数据清洗,如去重、空值处理等。对于研究税务政策、进行大数据分析、搭建行业信息平台,爬取税务局通知通告信息尤为关键。公告列表以分页形式展现,包含标题、发布时间和详情页链接。进行政策趋势图、发布频率统计等可视化。爬取公开数据时,务必遵守网站的。

2201_76125261的博客 1781

汇编语言(完结)

汇编语言汇编语言-基础知识01汇编语言的组成-基础知识021.5 指令和数据1.6 存储单元1.7 cpu对存储器的读写指令和数据-基础知识03地址总线数据总线控制总线基础知识04基础知识05内存地址空间(概述)主板接口卡各类存储器的芯片 汇编语言-基础知识01 因为他是在硬件上面的编程语言,效率高 比汇编更低级的就是i机器语言 MOV 把后面的传给前面 寄存器,是cpu中存储数据的器件,一个cpu有多个寄存器 汇编语言,对吧,给了编译器。 C语言先编汇编,再变成编 汇编语言的组成-基础知识

hxhxhxhxx的博客 4789

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

汇编语言(王爽)监测点6.1

(1) 用内存0:0-0:15单元的内容改写程序中的数据 assume cs:codesg codesg segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h;数据部分 start: mov ax,0 mov ds,ax;ds为0 mov bx,0 mov cx,8 s: mov ax,[bx];用ax来装0:0中的数据 mov cs:[bx],ax;将ax赋值给程序数据部分,就是最上面的八个数据,这里这八个数据是当

weixin_51187775的博客 1317

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

《汇编语言》笔记

《汇编语言(第三版)》笔记 1.1机器语言 1.机器语言:机器指令的合集 2.机器指令:一列二进制数字。 3.计算机将指令转变为相应的一列高低电平,以驱动计算机的电子器件进行运算。 (此处计算机指可以执行机器指令,进行运算的机器。) 4.不同的CPU(Central Processing Unit,中央处理单元,一种微处理器)由于硬件设计和内部结构的不同,由不同的电平脉冲控制,每一种微处理器都有自己的机器指令集(机器语言) 1.2汇编语言的产生 由于机器语言的难于辨别和记忆,汇编语言产生了. 汇编指

ff_11111的博客 674

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

汇编语言知识点总结之二:第二章《寄存器》

一个典型的CPU由运算器、控制器、寄存器等器件组成: 运算器进行信息处理; 寄存器进行信息存储; 控制器控制各种器件进行工作; 内部总线连接各种器件,在他们之间进行数据的传送; 对于一个汇编程序员来说,CPU中的主要部件是寄存器。寄存器是CPU中程序员可以用指令读写的部件。程序员通过改变各种寄存器中的内容来实现对CPU的控制。 8086CPU有14个寄存器,每个寄存器有一个名称。这些寄存器是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。 1、通用寄存器:

wuwuku123的博客 4335

(三十)《汇编语言(王爽)》 | 检测点 17.1

《汇编语言(王爽)》 | 检测点 17.1

Skies_的博客 1861

16位汇编笔录

计算机系列书籍 数字设计和计算机体系结构 计算机组成(原书第5版) Intel汇编语言程序设计(第四版) 计算机系统结构——量化研究方法(第三版) 框内的代码为模型 ;================================================ assume cs:code,ds:data,ss:stack data segment db 128 du...

qq_41027516的博客 2953

《汇编语言》检测点15.1

(1)仔细分析一下上面的int 9中断例程,看看是否可以精简一下? 其实在我们的int 9中断例程中,模拟int指令调用原int 9中断例程的程序段是可以精简的,因为在进入中断例程后,IF和TF都已经置零,没有必要再进行设置了。对于程序段: pushf pushf pop ax

来自东印度的人 571

汇编语言(王爽版)学习笔记 第十五章 外中断(检测点15.1)

文章目录15.1 接口芯片和端口15.2 外中断信息1.可屏蔽中断2.不可屏蔽中断15.3 PC机键盘的处理过程1.键盘输入2.引发9号中断3.执行int 9中断例程15.4 编写int 9中断例程 15.1 接口芯片和端口 15.2 外中断信息 1.可屏蔽中断 2.不可屏蔽中断 15.3 PC机键盘的处理过程 1.键盘输入 2.引发9号中断 3.执行int 9中断例程 15.4 编写int 9中断例程 键盘输入的处理过程: 1.键盘产生扫描码 2.扫描码送入60h端口 3.引发9号中

Kni9hT's Blog 1027

王爽《汇编语言》检测点1.1详解

(1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为 13位。 (2)1KB的存储器有 1024 个存储单元,存储单元的编号从 0 到 1023 。 (3)1KB的存储器可以存储 8192(2^13) 个bit, 1024个Byte。 (4)1GB是 1073741824 (2^30) 个Byte、1MB是 1048576(2^20) 个Byte、1KB是 1024(2^10)个Byt

Control Complexity 2556

汇编语言(王爽)-实验十五

assume cs:code,ss:stack stack segment db 32 dup (0) stack ends code segment start: mov ax,stack mov ss,ax mov sp,32 ;暂存原9号中断入口地址 mov ax,0 mov es,ax push es:[9*4] pop es:[200

476

汇编语言学习笔记(【汇编语言】小甲鱼零基础汇编)

汇编语言学习笔记(【汇编语言】小甲鱼零基础汇编) 目录 第〇章 课程资料 第一章 基础知识 第二章 寄存器(CPU工作原理) 第三章 寄存器(内存访问) 第四章 第一个程序 第五章 [BX]和loop指令 第六章 包含多个段的程序 第七章 更灵活定位内存地址 第八章 数据处理的两个基本问题 第九章 转移指令的原理 第十章 call和ret指令 第十一章 标志寄存器 第十二章 内中断 第十三章 int指令 第十四章 端口 第十五章 外中断 第十六章 直接定址表 第十七章 使用BIOS进入键盘输入和磁盘读写

inv1796915552的博客 3万+

检测点15.1

题目(一):仔细分析一下上面的int9中断例程,看看是否可以精简?对于程序段:pushfpushfpop axand ah,11111100bpush axpopfcall dword ptr ds:[0] 可以精简为:___(1)________(2)_____ 解答:因为是在int9中调用原来的int 9中断例程,而在我们进入int9这个中断

njutyangxiao的专栏 1510
上一篇: 汇编语言 第14章实验
下一篇: 汇编语言 第15章 编程 按下F1键换色
危楼百尺高
博客等级 码龄9年 12粉丝 29原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值