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博客 上期我们聊到了人物的自身属性和受伤时的计算,我们先给人物和野猪挂上属性和攻击属性的代码,然后通过触发器触发受伤的事件。物体(人物也好敌人也行ÿ…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...