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博客 上期我们聊到了人物的自身属性和受伤时的计算,我们先给人物和野猪挂上属性和攻击属性的代码,然后通过触发器触发受伤的事件。物体(人物也好敌人也行ÿ…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
