8086 汇编笔记(十二):int 指令 端口 直接定址表
一、int 指令
int 指令的格式为:int n,n 为中断类型码,它的功能是引发中断过程
CPU 执行 intn 指令,相当于引发一个n号中断的中断过程,执行过程如下:
(1) 取中断类型码 n;
(2) 标志寄存器入栈,IF=0,TF=0;
(3) CS、IP 入栈;
(4) (IP)=(n*4),(CS)=(n*4+2)。
从此处转去执行n号中断的中断处理程序。
二、BIOS 和 DOS 提供的中断例程
系统 ROM 中存放着一套程序,称为 BIOS,除此之外还有 DOS 都提供了一套可以供我们调用的中断例程,不同历程有不同的中断类型码,并且还能根据传入的参数不同而实现不同的功能,也就是说同一个类型码的中断例程可以实现很多不同功能,如 int 10h 是 BIOS 提供的包含了多个和屏幕输出相关子程序的中断例程
BIOS 和 DOS 安装历程的过程是,开机后 CPU 一加电,自动初始化 CS 为 0FFFFH,IP为 0 ,而在这个地方有一个跳转指令,挑战到 BIOS 和系统检测初始化程序。在 BIOS 系统检测初始化程序中会设置中断向量表中的值
三、端口
从 CPU 的角度,将这些寄存器都当作端口,对它们进行统一编址,从而建立了一个统一的端口地址空间。每一个端口在地址空间中都有一个地址。
四、端口的读写
在访问端口的时候,CPU 通过端口地址来定位端口
端口的读写指令只有两条:in 和 out,分别用于从端口读取数据和往端口写入数据
in al 60h ;从 60h 号端口读入一个字节
注意,在 in 和 out 指令中,只能使用 ax 或 al 来存放从端口中读入的数据或要发送到端口中的数据。访问 8 位端口时用 al,访问 16 位端口时用 ax。
五、shl 和 shr 指令
shl 是逻辑左移指令,它的功能为:
1. 将一个寄存器或内存单元中的数据向左移位
2. 将最后移出的一位写入 CF 中
3. 最低位用 0 补充
mov al,01001000b
shl al,1 ;将 a1 中的数据左移一位
执行后 (al)=10010000b,CF=0
shr 是逻辑右移指令,它和 shl 所进行的操作刚好相反
1. 将一个寄存器或内存单元中的数据向右移位
2. 将最后移出的一位写入 CF 中
3. 最高位用 0 补充
mov al,10000001b
shr al,1 ;将 al 中的数据右移一位
执行后(al)=01000000b,CF=1
六、外中断信息
在 PC 系统中,外中断源一共有以下两类:
1. 可屏蔽中断(CPU 可以不响应的外中断)
2. 不可屏蔽中断(CPU 必须响应的外中断)
CPU 是否响应可屏蔽中断,要看标志寄存器的 IF 位的设置
当 CPU 检测到可屏蔽中断信息时,如果 IF=1,则 CPU 在执行完当前指令后响应中断,引发中断过程;如果 IF=0,则不响应可屏蔽中断
当然,如果在中断处理程序中需要处理可屏蔽中断,可以用指令将 IF 设置为 1。8086 CPU 提供的设置 IF 的指令如下:
1. sti,设置 IF=1
2. cli,设置 IF=0
七、PC 机键盘的处理过程
键盘上有一个芯片对键盘中每一个键盘的状态进行扫描,开关按下生成一个扫描码——通码,记录按下的按键位置,开关抬起也会产生一个扫描——断码,码记录松开的位置,都是送入60h端口。通码的第7位为0,断码第7位为1,也就是说断码=通码+80h
BIOS中键盘缓冲区能存储15个键盘输入,每个键盘输入两字节,高位存放扫描码,低位存放字符。此外,0040:17单元存放键盘状态字节,记录了控制键和切换键的状态,记录信息如下:
| 位 | 含义 |
|---|---|
| 0 | 右shift,1表示按下 |
| 1 | 左shift,1按下 |
| 2 | Ctrl,1按下 |
| 3 | Alt,1按下 |
| 4 | ScrollLock状态,1表示指示灯亮 |
| 5 | NumLock状态,1表示小键盘输入的是数字 |
| 6 | CapsLock状态,1表示大写字母 |
| 7 | Insert状态,1表示处于删除状态 |
八、描述了单元长度的标号
下面的程序将 code 段中的a标号处的8个数据累加,结果存储到b标号处的字中
code segmenta: db 1,2,3,4,5,6,7,8b: dw 0start: mov si offset amov bx,offset bmov cx,8s: mov al,cs:[si]mov ah,0add cs:[bx],axinc siloop smov ax,4c00hint 21hcode endsend start
九、在其他段中使用数据标号
注意,在后面加有“:”的地址标号,只能在代码段中使用,不能在其他段中使用
data seqmenta: db 1,2,3,4,5,6,7,8b: dw 0data endscode seqmentstart: mov ax,datamov ds,ax……………………
十、直接定址表
使用查表的方法编写相关程序,如输出一个字节型数据的16进制形式(子程序):
showbyte jmp short show
table db '0123456789ABCDEF'
show:push bx
push es
mov ah,al
she ah,1
she ah,1
she ah,1
she ah,1 ;右移四位,位移子程序限制使用的寄存器数,只能这么移
and al,00001111b
mov bl,al
mov bh,0
mov ah,table[bx] ;高四位作为相对于table的偏移,取得对应字符
mov bx,0b800h
mov es,bx
mov es:[160*12+40*2],ah
mov bl,al
mov bh,0
mov al,table[bx]
mov es:[160*12+40*2+2],al
pop es
pop bx
ret
相关文章:
8086 汇编笔记(十二):int 指令 端口 直接定址表
一、int 指令 int 指令的格式为:int n,n 为中断类型码,它的功能是引发中断过程 CPU 执行 intn 指令,相当于引发一个n号中断的中断过程,执行过程如下: (1) 取中断类型码 n; (2) 标志寄存器入栈,IF0&…...
揭开FFT时域加窗的奥秘
FFT – Spectral Leakage 假设用于ADC输出数据分析的采样点数为N,而采样率为Fs,那我们就知道,这种情况下的FFT频谱分辨率为δf,那么δfFs/N。如果此时我们给ADC输入一个待测量的单频Fin,如果此时Fin除以δf不是整数&a…...
【AI基础】第二步:安装AI运行环境
开局一张图: 接下来按照从下往上的顺序来安装部署。 规则1 注意每个层级的安装版本,上层的版本由下层版本决定 比如CUDA的版本,需要看显卡安装了什么版本的驱动,然后CUDA的版本不能高于这个驱动的版本。 这个比较好理解&…...
【MySQL】聊聊唯一索引是如何加锁的
首先我们要明确,加锁的对象是索引,加锁的基本单位是next-key lock,由记录锁和间隙锁组成。next-key是前开后闭区间,间隙锁是前开后开区间。根据不同的查询条件next-key 可能会退化成记录锁或间隙锁。 在能使用记录锁或者间隙锁就…...
k8s-CCE使用node节点使用VIP--hostNetworkhostPort
CCE使用node节点使用VIP 背景:想在节点上使用VIP,将nodeport服务做到高可用。启动VIP后发现访问失败 部署 ! Configuration File for keepalived global_defs { router_id master-node }vrrp_instance VI_1 {state BACKUPinterface eth0mcast_src_ip 10.1.0.60virtual_rou…...
18、关于优化中央企业资产评估管理有关事项的通知
一、加强重大资产评估项目管理 (一)中央企业应当对资产评估项目实施分类管理,综合考虑评估目的、评估标的资产规模、评估标的特点等因素,合理确定本集团重大资产评估项目划分标准,原则上,企业对外并购股权项目应纳入重大资产评估项目。中央企业应当研究制定重大资产评估…...
AI大模型日报#0610:港大等1bit大模型“解决AI能源需求”、谷歌开源TimesFM时序预测模型
导读:AI大模型日报,爬虫LLM自动生成,一文览尽每日AI大模型要点资讯!目前采用“文心一言”(ERNIE 4.0)、“零一万物”(Yi-Large)生成了今日要点以及每条资讯的摘要。欢迎阅读…...
速盾:图片cdn加速 免费
随着互联网的快速发展,图片在网页设计和内容传播中起着重要的作用。然而,随着网站访问量的增加和图片文件大小的增加,图片加载速度可能会成为一个问题。为了解决这个问题,许多网站使用图片CDN加速服务。 CDN(Content …...
贪心算法例子
贪心算法概述 贪心算法是一种在每一步选择中都做出局部最优选择的算法,以期望通过一系列局部最优选择达到全局最优。贪心算法在许多优化问题中表现良好,特别是在某些特定类型的问题中能够保证找到最优解。 活动选择问题(Activity Selection Problem)背包问题(贪心解法)霍…...
vivado HW_ILA_DATA、HW_PROBE
HW_ILA_DATA 描述 硬件ILA数据对象是ILA调试核心上捕获的数据的存储库 编程到当前硬件设备上。upload_hw_ila_data命令 在从ila调试移动捕获的数据的过程中创建hw_ila_data对象 核心,hw_ila,在物理FPGA上,hw_device。 read_hw_ila_data命令还…...
refault distance算法的一点理解
这个算法看了好几次了,都没太理解,今天记录一下,加深一下印象。 引用某个博客对这个算法的介绍 一次访问page cache称为fault,第二次访问该页面称为refault。page cache页面第一次被踢出LRU链表并回收(eviction)的时刻称为E&#…...
软件安全技术【太原理工大学】
没有划重点,只说了一句课后题和实验中的内容都可能会出。 2022考试题型:选择20个20分,填空10个10分,名词解释4个20分,简答6个30分,分析与论述2个20分,没找到历年题。 如此看来,这门考…...
异常(Exception)
异常是什么 异常就是程序在进行时的不正常行为,就像之前数组时会遇到空指针异常(NullPointerException),数组越界异常(ArrayIndexOutOfBoundsException)等等。 在java中异常由类来表示。 异常的分类 异常…...
一文者懂LLaMA 2(原理、模型、训练)
引言 LLaMA(Large Language Model Meta AI)是Meta(前身为Facebook)开发的自然语言处理模型家族之一,LLaMA 2作为其最新版本,展示了在语言理解和生成方面的显著进步。本文将详细解读LLaMA 2的基本原理、模型…...
MySQL 存储函数及调用
1.mysql 存储函数及调用 在MySQL中,存储函数(Stored Function)是一种在数据库中定义的特殊类型的函数,它可以从一个或多个参数返回一个值。存储函数在数据库层面上封装了复杂的SQL逻辑,使得在应用程序中调用时更加简单…...
设计模式七大原则-单一职责原则SingleResponsibility
七大原则是在设计“设计模式”的时候需要用到的原则,它们的存在是为了保证设计模式达到以下几种目的: 1.代码重用性 2.可读性 3.可拓展性 4.可靠性(增加新的功能后,对原来的功能没有影响) 5.使程序呈现高内聚、低耦合的…...
msfconsole利用Windows server2008cve-2019-0708漏洞入侵
一、环境搭建 Windows系列cve-2019-0708漏洞存在于Windows系统的Remote Desktop Services(远程桌面服务)(端口3389)中,未经身份验证的攻击者可以通过发送特殊构造的数据包触发漏洞,可能导致远程无需用户验…...
Reinforcement Learning学习(三)
前言 最近在学习Mujoco环境,学习了一些官方的Tutorials以及开源的Demo,对SB3库的强化学习标准库有了一定的了解,尝试搭建了自己的环境,基于UR5E机械臂,进行了一个避障的任务,同时尝试接入了图像大模型API,做了一些有趣的应用,参考资料如下: https://mujoco.readthedo…...
hw meta10 adb back up DCIM
1. centos install adb 2. HW enable devlepment mode & enalbe adb debug 3. add shell root/zt/adb-sync python3 ./adb-sync --reverse /sdcard/DCIM/Camera /root/zt/meta10...
Unity2D游戏制作入门 | 12(之人物受伤和死亡的逻辑动画)
上期链接:Unity2D游戏制作入门 | 11(之人物属性及伤害计算)-CSDN博客 上期我们聊到了人物的自身属性和受伤时的计算,我们先给人物和野猪挂上属性和攻击属性的代码,然后通过触发器触发受伤的事件。物体(人物也好敌人也行ÿ…...
等保三级 + 密评双达标:SQL Server TDE + 脱敏最佳实践
一、一次审计惊魂:备份硬盘丢失,患者数据险遭泄露去年底,我院一台 SQL Server 2019 备份服务器因机房搬迁,一块存有全量患者数据的硬盘意外遗失。虽未确认是否被恶意获取,但根据《个人信息保护法》第51条:“…...
Halcon实战:用area_center算子快速搞定图像区域面积与中心点计算(附完整代码)
Halcon实战:用area_center算子快速搞定图像区域面积与中心点计算(附完整代码) 在工业质检、医疗影像或自动化测量领域,图像区域的面积与中心点坐标是最基础却至关重要的特征参数。想象一下这样的场景:生产线上需要统计…...
5分钟搞定B站缓存视频:m4s-converter让离线视频重获新生
5分钟搞定B站缓存视频:m4s-converter让离线视频重获新生 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经在长途旅行中打开…...
前端工程化的构建流程优化
前端工程化的构建流程优化 随着前端项目规模的不断扩大,构建流程的优化成为提升开发效率和性能的关键。前端工程化通过自动化工具和标准化流程,帮助开发者更高效地管理代码、资源和部署。随着项目复杂度增加,构建速度慢、打包体积过大等问题…...
SpringBoot项目实战:用Poi-tl实现数据库表结构文档的自动导出(支持多表分组)
SpringBoot项目实战:用Poi-tl实现数据库表结构文档的自动导出(支持多表分组) 在软件开发的生命周期中,数据库设计文档是不可或缺的一部分。无论是项目交付、团队协作还是后期维护,一份清晰、规范的数据库文档都能极大提…...
鸿蒙ArkTS开发实战:从Java/TS迁移到ArkTS的5个关键语法差异
鸿蒙ArkTS开发实战:从Java/TS迁移到ArkTS的5个关键语法差异 如果你是一名有Java或TypeScript背景的开发者,正准备进军鸿蒙生态的ArkTS开发,那么掌握这些关键语法差异将大幅提升你的迁移效率。ArkTS作为鸿蒙应用开发的主力语言,在设…...
高精度智慧校园安防场景图像识别 校园安全预警系统 校园安防设备智能化识别 深度学习YOLO与校园数字化智能化应用第10393期
数据集 README一、数据集核心信息项目详情类别数量及中文名称9 类(大型构件、门禁、应急门、一键报警、防撞设施、通讯工具、入侵检测、金属探测器、电视)数据总量7000 条数据集格式YOLO 格式最重要应用价值1. 支撑校园安防场景下的目标检测算法训练&…...
【C】运算符优先级
优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右--()圆括号(表达式)/函数名(形参表)--.成员选择(对象)对象.成员名--->成员选择(指针)对象指针->成员名--2-负号运算符-表达式右到左单目运算…...
Phi-4-mini-reasoning vLLM部署进阶:量化加载(AWQ/GGUF)与推理提速实测
Phi-4-mini-reasoning vLLM部署进阶:量化加载(AWQ/GGUF)与推理提速实测 1. 模型简介与部署准备 Phi-4-mini-reasoning 是一个基于合成数据构建的轻量级开源模型,专注于高质量、密集推理的数据,并进一步微调以提高更高…...
WinBtrfs:让Windows用户也能享受Btrfs文件系统的强大功能
WinBtrfs:让Windows用户也能享受Btrfs文件系统的强大功能 【免费下载链接】btrfs WinBtrfs - an open-source btrfs driver for Windows 项目地址: https://gitcode.com/gh_mirrors/bt/btrfs WinBtrfs是一款专为Windows系统设计的开源Btrfs文件系统驱动程序&…...
