java打印对象内存地址 分布式事务 事务消息 分布式事务 几种解决方案 分布式事务-Seata 分布式事务-Seata 分布式事务-LCN-TCC 分布式事务-LCN 分布式事务-消息队列-定时任务-本地事件表 Zuul网关实战02 Zuul网关实战01 灰度发布落地实战2 灰度发布落地实战1 Gsnova on Heroku build Systemd Debian system initialization manage multi id_rsa ubuntu 64bits cannot run 32bits app REHL power auditing Debug Assembly for ARMv8 on QEMU ARM体系结构--寄存器 Run Debian iso on QEMU ARMv8 QEMU ARM64 guide cross compiler install buildroot install QEMU install python入门--数据结构 python入门--内置数据类型 python入门--类 异常 python入门--条件表达式 方法 python入门--数字 字符串 数组 RTC驱动分析 块设备驱动 TCP UDP socket 触摸屏驱动 USB驱动 LED按键中断 LCD 驱动 驱动信号 根文件系统 实验 内核实验 字符设备驱动程序 绪论 uboot 实验 LCD 实验 系统时钟和UART 中断控制器 Nand Flash控制器 MMU 实验 储存管理器实验 GPIO实验 点亮LED 编译加载驱动 制作烧写内核 dnw替代方法 MINI2440 TQ2440安装配套Linux 使用NFS 制作烧写跟文件系统 grub引导Windows 烧写裸版程序-linux Ubuntu 网络没有 eth0 Linux自动挂载 烧写裸板程序 电路基础 Mac词典 Vim插件 Assembly 综合研究 Assembly 指令总结 Assembly 直接定址表 Assembly 使用BIOS进行键盘输入和磁盘读写 Assembly 外中断 Assembly 端口 Assembly int指令 Assembly 内中断 Assembly 标志寄存器 Assembly 转移指令的原理 Assembly Call和ret指令 Assembly 数据处理两个基本问题 Assembly 灵活定位内存地址 Assembly 包含多个段的程序 Assembly [bx] loop Assembly 第一个程序 Assembly 寄存器 (内存访问) Assembly 寄存器 AWS VPN with EC2 hidden file in picture(linux) Assembly 基础 idea shortcuts 常用快捷键 idea plugin folder install ruby and jekyll

Assembly 使用BIOS进行键盘输入和磁盘读写

2014年10月04日

###int 9中断例程对键盘输入的处理 一般的键盘输入,在CPU执行完int 9中断例程后,都放到了键盘缓冲区中。键盘缓冲区中又16个字单元,可以存储15个按键的扫描码和对应的ASCII码

键盘缓冲区是用环形队列结构管理的内存区

观看flash

###使用int 16h中断例程读取键盘缓冲区 int 16h 包含的最重要的一个功能是从键盘缓冲区中读取一个键盘输入,该功能的编号为0,进行如下工作:

  1. 检测键盘缓冲区中是否有数据
  2. 没有则继续做第1步
  3. 读取缓冲区第一个字单元中的键盘输入
  4. 将读取的扫描码送入ah,ASCII码送入al
  5. 将已读取的键盘输入从缓冲区中删除

int 9中断例程向键盘缓冲区中写入,int 16h 中断例程从缓冲区中读出

int 9中断例程是在有键盘按下的时候向键盘缓冲区中写入数据;而int 16h中断例程在应用程序对其进行调用的时候,将数据从键盘缓冲区中读出

###字符串的输入 字符串的存储空间实际上是一个字符栈 源代码

###应用int 13h 中断例程对磁盘进行读写 以3.5英寸软盘为例,分为上下两面,每面有80个磁道,每个磁道又分为18个扇区,每个扇区的大小为512个字节

则:2面 * 80磁道 * 18扇区 * 512字节 = 1440KB 约等于 1.44MB

只能以扇区为单位对磁盘进行读写。在读写扇区的时候,要给出面号、磁道号、和扇区号。面号和磁道号从0开始,而扇区号从1开始。

读取0面0道1扇区的内容到0:200的程序:

mov ax,0
mov es,ax
mov bx,200h

mov al,1	;读取的扇区数
mov ch,0	;磁道号
mov cl,1	;扇区号
mov dl,0	;驱动器号 软驱从0开始,0:软驱A,硬盘从80h开始,80h:硬盘C
mov dh,0	;磁头号(对于软盘即面号,因为一个面用一个磁头来读写)
mov ah,2	;int 13h的功能号(2表示读扇区,3表示写扇区)
int 13h

返回参数:

操作成功:(ah)=0,(al)=读入的扇区数

操作失败:(ah)=出错代码

千万不要随便对硬盘中的扇区进行写入,很可能覆盖掉重要的数据