前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【汇编语言王爽】学习笔记p54-p79

【汇编语言王爽】学习笔记p54-p79

作者头像
20岁爱吃必胜客
发布2022-11-13 09:54:22
7810
发布2022-11-13 09:54:22
举报
文章被收录于专栏:进步集

标志寄存器-神秘的第十四个寄存器flag

axbxcxdx sidi bpspip csssdses flag 按位起作用

在这里插入图片描述
在这里插入图片描述

特殊之处 OF(overflow)1:ov ; 0:nv -溢出

DF (direction) 1DN 0UP 方向

SF sign符号 ng pl 1 negative 0positive

ZF zero零值 zr / nz zero / notzero

PF Parity奇偶数 1pe 0 po odd/even

CF carry进位

在这里插入图片描述
在这里插入图片描述

直接访问flag的方法pushf popf

在这里插入图片描述
在这里插入图片描述

ZF 结果是零的话 寄存器就zf=1; 很多如add sub mul都会影响zf

在这里插入图片描述
在这里插入图片描述

PF parityflag - 记录指令执行后结果的所有二进制位中1的个数

1的个数为偶数个 pf=1

在这里插入图片描述
在这里插入图片描述

SF - 结果看作有符号数 结果为负数sf=1;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

见机行事 看作正数负数

在这里插入图片描述
在这里插入图片描述

CF 进位标志 CF=1 有进位或借位----针对无符号数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对比CF–针对无符号数;OF-针对有符号数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

综合 一条指令可以带来多少标志寄存器的变化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

带进位的加法指令adc用cf位记录进位值 adc ax,bx-------就这个机制 -感觉别扭 但是往后看大数相加 合理

在这里插入图片描述
在这里插入图片描述

adc指令应用 大数相加---------分组-低十六位-高十六位 ;地位产生的进位通过adc解决了!

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

128位数相加

在这里插入图片描述
在这里插入图片描述

特别注意:思考!

在这里插入图片描述
在这里插入图片描述

不可以!!!还有个目的是cf清零

不可以!!! inc di不会影响flag 而add di2 会影响

sbb—带借位减法指令 sbb ax bx

在这里插入图片描述
在这里插入图片描述

cmp比较指令 cmp 操作对象1,操作对象2-------二者相减结果不保存----------指令执行后将对flag产生影响—以此确定比较结果

在这里插入图片描述
在这里插入图片描述

无符号数 例如 相等:zf=1 ; 不等于 zf=0 ;小于:cf = 0;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

条件转移指令 jxxx标号-----套路je:jump equal 结果相等跳转

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

条件转移指令的使用—直接考虑cmp和jxxx指令配合出来的逻辑含义就可以了----------例如:cmp ah,bh je sadd ah,bh jmp short ok

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

条件转移指令的应用–本质 转移–修改ip; 和cmp配合使用cmp改变标志位

双分支结构的实现—对比c语言

在这里插入图片描述
在这里插入图片描述

统计8的数量

在这里插入图片描述
在这里插入图片描述

DF方向标志位和段传送—

原本方法:mov ax ,【si】 mov【di】,ax add si,2 add di,2

在这里插入图片描述
在这里插入图片描述

更简洁方法

DF=0:每次操作后si di 递增

在串处理指令中,控制每次操作后si di的增减 ; 对DF位进行设置的指令:cld df=0;std df=1;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

rep指令 —根据cx重复执行后面的指令-------常常与串传送指令搭配 rep movsb

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

中断—导学------精华

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

移位指令

逻辑左移:影响cf 和cf一起左移 补零 循环左移 影响cf 但是后面也得加上移出去的那个数 算数左移

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

shl sal rcl

惯常用法:逻辑左移乘法

在这里插入图片描述
在这里插入图片描述

显示的原理—屏幕的内容=显存中的数据

在这里插入图片描述
在这里插入图片描述

显示缓冲区 每个两个字节,一行八十个-----一行160字节

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

显示想显示的东西 不同颜色

在这里插入图片描述
在这里插入图片描述

标号

在这里插入图片描述
在这里插入图片描述

改进

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

改进:标号法a: db 1,2,3,4 ; 然后 用这个数据 就直接 mov si ,offset a ; 随后 做各种操作就直接cs:【si】

更加改进: 去掉:的数据标号 adb 1,2,3,4,后面就直接 mov si,0 ;然后直接操作 a【si】像数组一样

在这里插入图片描述
在这里插入图片描述

a db 1,2,3,4,5,6,7,8; b dw 0 其中 b代表地址为code:8,长度为字的内存单元—还表明了长度!

在这里插入图片描述
在这里插入图片描述

常用方式 数据段中用数据标号

注意:a db 1,2,3,4,5,…---------a相当于保存开始的地址—也就是指针; c dw offset a,offset b; c还是指针,相当于指针的指针;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据的直接定址表----最简方案 查表 做成一个表 直接要啥给啥

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

利用表 在两个数据集合之间建立一种映射关系

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

定址表 – 空间换时间

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码的直接定址表—

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

中断-内(INT)-外(键盘等)

在这里插入图片描述
在这里插入图片描述

0: 除法错误div除法溢出;1:单步 4:into 溢出中断; n INT指令 下面举例

13,10表示回车换行; $结束符号

int 21h中断—然后看ax里面,ax里面是ah是9,执行九号操作 去显示那个ds:dx–然后是里面是显示helloworld

hello world的写法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

cpu接到中断信息 去执行中断处理程序–需要改变cs:ip------根据中断信息去找中断处理程序-----查中断向量表

在这里插入图片描述
在这里插入图片描述

8086cpu的中断向量表—找cs:ip

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

案例 0号中断

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

中断过程—cpu硬件自动完成,用终端类型码找到中断向量,并用它设置cs:ip80

8086CPU中断过程1.从中断中获取中断类型码2.标志寄存器的值入栈----中断过程重要改变标志寄存器的值,需要先行保护。3设置标志寄存器的第八位tf和第九位if的值为0.4cs内容入栈5ip内容入栈6从中断向量表中读取中断处理程序的入口地址,设置cs:ip

在这里插入图片描述
在这里插入图片描述

编制中断处理程序----常驻内存

在这里插入图片描述
在这里插入图片描述

自己编织中断处理程序–除法错误为例

在这里插入图片描述
在这里插入图片描述

do0子程序–自己制作

在这里插入图片描述
在这里插入图片描述

把自己的程序安装到内存里面 再把这个地址写道中断向量表

在这里插入图片描述
在这里插入图片描述

用内存复制的那个程序指令----从si 复制到 di----串传送-----长度–offset do0end-offset do0

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

设置中断向量表 就是把内存那个地方改一下数值

在这里插入图片描述
在这里插入图片描述

小结!!!

在这里插入图片描述
在这里插入图片描述

常驻内存程序编制-----套路-----由自己安装到内存的指定区域的代码和数据

在这里插入图片描述
在这里插入图片描述

如果是haike呢–她骗人安装他的程序,然后运行。他的程序把自己的脏东西串传送到内存某个地方,然后触发中断,让自己的脏东西获得cpu运行,然后就可以显示自己的东西了。或者简单点,别人运行他的程序,他就直接开始干活了,脏东西挥洒了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

单步中断–寄存器flag—TF trap flag ,tf=1每条指令执行后产生陷阱,由系统控制计算机,当tf=0,cpu正常工作,不产生陷阱

if interrupt flag 当if=1,允许cpu相应可屏蔽中断请求,if=0关闭中断

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

中断不响应情况

在这里插入图片描述
在这里插入图片描述

原因–设置ss:sp强制要求连续完成 以此保证栈的准确正确

在这里插入图片描述
在这里插入图片描述

int n引发中断

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

疑问 什么时候if tf恢复?

@

int指令调动子程序,此子程序就是中断处理程序简称 中断例程 ------可以自定义中断例程来实现特定功能

具体7ch 存在0000:7ch*4这个地方

在这里插入图片描述
在这里插入图片描述

中断例程 参数:放在ax里面可以

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

出入栈 操作一一对应,执行irep返回的时候意义出栈

在这里插入图片描述
在这里插入图片描述

中断例程2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

bios 和 dos中断处理

bios–在系统版的rom存放–容量8KB,地址从FE000H开始

在这里插入图片描述
在这里插入图片描述

BIOS要做硬件系统的检测和初始化工作,外部中断和内部终端的中断例程也在里面 对于硬件设备进行io的中断例程,还有和其他硬件操作的中断例程 里面都有---------ddr3八脚直接式BIOS芯片

bios 如此好 解放了大量程序员工作 不去理解底层

在这里插入图片描述
在这里插入图片描述

BIOS-比如显示内容 必须要算 推算了解显示的内存区域在哪里

在这里插入图片描述
在这里插入图片描述

bios的10h中断,(ah)=2调用第十号h终端的2耗子程序没设置光标位置

(ah)=9 调用10h中断的9号子程序 在光标位置显示字符

bios调用两个中断完成 显示高亮闪烁a

在这里插入图片描述
在这里插入图片描述

直接BIOS终端手册-----例子

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

汇编还有DOS中断–强大

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结-bios,dos中断

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

程序返回 int 21H DOS中断例程----其实就是mov ax,4c00h int 21h

显示高亮a 方便的 dos中断例程!!牛逼

在这里插入图片描述
在这里插入图片描述

Bios和dos中断例程的安装过程

在这里插入图片描述
在这里插入图片描述

端口的读写–声音为例: out in 等指令

在这里插入图片描述
在这里插入图片描述

in al 61h 这条指令为例实际上就是控制 设备控制器(61h)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意 端口-------就是外部设备

cpu可以访问三种东西,十四个寄存器,内存单元,端口—就—外部设备-------各种网卡 显卡。。主板上的接口芯片。

在这里插入图片描述
在这里插入图片描述

各种芯片都有寄存器,由cpu读写

cpu把各个寄存器当作端口统一编制,某几个地址对应一个设备

端口读写就用in out来操作

在这里插入图片描述
在这里插入图片描述

端口的读写,cpu地址线选中芯片寄存器,cpu发出控制线的读命令,然后通过数据线送进cpu数据

在这里插入图片描述
在这里插入图片描述

精彩!

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

IO端口分配–共

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

in out只能用ax或者al来存放端口读入数据或者发送的数据

# CMOS RAM芯片—包含一个实时钟(电子表)和一个128个存储单元的ram存储器------这个128B的ram里面存内部实时钟 系统配置信息,相关的程序(用于开机时配置系统信息)

在这里插入图片描述
在这里插入图片描述

这块ram靠电池供电 不丢失信息—芯片由70h 71h端口读写-------70h提供地址 71提供数据

在这里插入图片描述
在这里插入图片描述

提取CMOS RAM存储的时间信息

提取cmos ram时间 信息 —时间信息用BCD码存放的-------

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

外设的连接和中断

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

外中断—可屏蔽中断-cpu检测到可屏蔽终端信息的时候如果IF=1那么cpu执行完当前指令后响应中断 引发中断过程,IF=0那么不响应可屏蔽中断

不可屏蔽中断 必须相应的外中断,cpu检测到不可屏蔽信息是 ,执行完当前指令后立即响应,引发终端过程,

对于8086。不可屏蔽中断的中断类型码固定为2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

外中断处理过程–1.取中断类型吗 对比内部终端 cpu内部自己生产 2. 标志寄存器入栈 置if0 tf0如果中断过程中想要处理可屏蔽中断 可以用指令将if置为1 3 csip入栈 4 转去处理中断处理

不可频闭终端: 标志寄存器入栈if=0tf=0;注意csip入栈,3ip=(8),cs=(0ah)

注意 不可屏蔽中端中断值固定为2

注意8086 设置if指令 sti set if为1,cli clear 清理为0

在这里插入图片描述
在这里插入图片描述

PC键盘的处理过程----1键盘输入2引发9号中断3执行int9中断例程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

pc机键盘的处理过程-引发终端

在这里插入图片描述
在这里插入图片描述

bios 键盘缓冲区在内存 能存放十五个键盘输入 用一个字存 高位的前半个字放扫描码 低位放字符码 也就是ascii码

在这里插入图片描述
在这里插入图片描述

控制键 切换键 处理就是 用内存的一个字节0040:17这个地方一个字节来存放键盘键盘状态---------键盘状态

在这里插入图片描述
在这里插入图片描述

执行int 9--------读出60h端口中的扫描码—根据扫描码分情况对待—如果自福建的扫描码,就把他的字符码送到内存的bios键盘缓冲区

如果控制键的扫描码 就将其转变为状态字节就那个 字节里面–内存的 写入内存中存储状态字节的单元然后对键盘系统进行县官的控制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实例 输入a处理过程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

定制键盘输入处理----int9 中断例程----满足个性需求

在这里插入图片描述
在这里插入图片描述

依次显示a-z

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

按下esc后改变现实颜色–

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

按下esc改变颜色的实现—v1.0

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

改写中断例程-以int9 为例-------和定制处理不同,常驻内存,更加持久-------设备底层技术常用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

很享受的感觉

@ 如何操作外部设备

键盘操作为例

在这里插入图片描述
在这里插入图片描述

对键盘输入的处理的int9h中断和int 16h中断

在这里插入图片描述
在这里插入图片描述

输入引发的动作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

读出来 —程序员用 int16h–来做—16字 用环形队列 可存储扫描15个按键扫描码----(因为是环形的留一个判空–数据结构)

在这里插入图片描述
在这里插入图片描述

小结 调用16h从缓冲区读数据------int 9 和int 16是相互配合的程序------软硬件搭配 9是硬件------16软件来做

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

应用实例 用键盘输入更改屏幕颜色

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

应用 字符串输入

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

程序的处理过程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

磁盘读写----硬盘,-------

在这里插入图片描述
在这里插入图片描述

BIOS提供磁盘的直接服务 int13h

在这里插入图片描述
在这里插入图片描述

用BIOS 对 磁盘进行读操作 int13h

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

卧槽 从扇区,磁道,面都有规定—如 读取c盘 0面 1扇区的内容到0:200--------还有磁头号 驱动器号—是硬盘还是软盘

写操作

在这里插入图片描述
在这里插入图片描述

dos中断对磁盘文件的支持 int 21h

在这里插入图片描述
在这里插入图片描述

dos中断对文件操作非常强大-------比c语言提供的强大很多--------用指定的驱动器和路径创建一个新目录---------用手册

在这里插入图片描述
在这里插入图片描述

让计算机唱歌最后--------

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关硬件以及控制--------主要有芯片8253和 芯片8255

在这里插入图片描述
在这里插入图片描述

8253芯片(定时/计数器)的设置

在这里插入图片描述
在这里插入图片描述

注意:8253初始化 --就这样设置—ax放唱歌的频率值(大致是)8255(并行io)控制扬声器的开关------------这两个芯片的驱动 都是通过端口操作进行的

在这里插入图片描述
在这里插入图片描述

音符和发音频率的对应关系 对应这个 让计算机唱歌

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 标志寄存器-神秘的第十四个寄存器flag
  • 特殊之处 OF(overflow)1:ov ; 0:nv -溢出
  • DF (direction) 1DN 0UP 方向
  • SF sign符号 ng pl 1 negative 0positive
  • ZF zero零值 zr / nz zero / notzero
  • PF Parity奇偶数 1pe 0 po odd/even
  • CF carry进位
  • 直接访问flag的方法pushf popf
  • ZF 结果是零的话 寄存器就zf=1; 很多如add sub mul都会影响zf
  • PF parityflag - 记录指令执行后结果的所有二进制位中1的个数
  • SF - 结果看作有符号数 结果为负数sf=1;
  • 见机行事 看作正数负数
  • CF 进位标志 CF=1 有进位或借位----针对无符号数
  • 对比CF–针对无符号数;OF-针对有符号数
  • 综合 一条指令可以带来多少标志寄存器的变化
  • 带进位的加法指令adc用cf位记录进位值 adc ax,bx-------就这个机制 -感觉别扭 但是往后看大数相加 合理
  • adc指令应用 大数相加---------分组-低十六位-高十六位 ;地位产生的进位通过adc解决了!
  • 128位数相加
  • 特别注意:思考!
  • sbb—带借位减法指令 sbb ax bx
  • cmp比较指令 cmp 操作对象1,操作对象2-------二者相减结果不保存----------指令执行后将对flag产生影响—以此确定比较结果
  • 无符号数 例如 相等:zf=1 ; 不等于 zf=0 ;小于:cf = 0;
  • 条件转移指令 jxxx标号-----套路je:jump equal 结果相等跳转
  • 条件转移指令的使用—直接考虑cmp和jxxx指令配合出来的逻辑含义就可以了----------例如:cmp ah,bh je sadd ah,bh jmp short ok
  • 条件转移指令的应用–本质 转移–修改ip; 和cmp配合使用cmp改变标志位
  • 双分支结构的实现—对比c语言
  • 统计8的数量
  • DF方向标志位和段传送—
  • DF=0:每次操作后si di 递增
  • 在串处理指令中,控制每次操作后si di的增减 ; 对DF位进行设置的指令:cld df=0;std df=1;
  • rep指令 —根据cx重复执行后面的指令-------常常与串传送指令搭配 rep movsb
  • 中断—导学------精华
  • 移位指令
  • 惯常用法:逻辑左移乘法
  • 显示的原理—屏幕的内容=显存中的数据
  • 显示缓冲区 每个两个字节,一行八十个-----一行160字节
  • 显示想显示的东西 不同颜色
  • 标号
  • 改进:标号法a: db 1,2,3,4 ; 然后 用这个数据 就直接 mov si ,offset a ; 随后 做各种操作就直接cs:【si】
  • 更加改进: 去掉:的数据标号 adb 1,2,3,4,后面就直接 mov si,0 ;然后直接操作 a【si】像数组一样
  • a db 1,2,3,4,5,6,7,8; b dw 0 其中 b代表地址为code:8,长度为字的内存单元—还表明了长度!
  • 常用方式 数据段中用数据标号
  • 注意:a db 1,2,3,4,5,…---------a相当于保存开始的地址—也就是指针; c dw offset a,offset b; c还是指针,相当于指针的指针;
  • 数据的直接定址表----最简方案 查表 做成一个表 直接要啥给啥
  • 利用表 在两个数据集合之间建立一种映射关系
  • 定址表 – 空间换时间
  • 代码的直接定址表—
  • 中断-内(INT)-外(键盘等)
  • 0: 除法错误div除法溢出;1:单步 4:into 溢出中断; n INT指令 下面举例
  • 13,10表示回车换行; $结束符号
  • int 21h中断—然后看ax里面,ax里面是ah是9,执行九号操作 去显示那个ds:dx–然后是里面是显示helloworld
  • hello world的写法
  • cpu接到中断信息 去执行中断处理程序–需要改变cs:ip------根据中断信息去找中断处理程序-----查中断向量表
  • 8086cpu的中断向量表—找cs:ip
  • 案例 0号中断
  • 中断过程—cpu硬件自动完成,用终端类型码找到中断向量,并用它设置cs:ip80
  • 8086CPU中断过程1.从中断中获取中断类型码2.标志寄存器的值入栈----中断过程重要改变标志寄存器的值,需要先行保护。3设置标志寄存器的第八位tf和第九位if的值为0.4cs内容入栈5ip内容入栈6从中断向量表中读取中断处理程序的入口地址,设置cs:ip
  • 编制中断处理程序----常驻内存
  • 自己编织中断处理程序–除法错误为例
  • do0子程序–自己制作
  • 把自己的程序安装到内存里面 再把这个地址写道中断向量表
  • 用内存复制的那个程序指令----从si 复制到 di----串传送-----长度–offset do0end-offset do0
  • 设置中断向量表 就是把内存那个地方改一下数值
  • 小结!!!
  • 常驻内存程序编制-----套路-----由自己安装到内存的指定区域的代码和数据
  • 单步中断–寄存器flag—TF trap flag ,tf=1每条指令执行后产生陷阱,由系统控制计算机,当tf=0,cpu正常工作,不产生陷阱
  • if interrupt flag 当if=1,允许cpu相应可屏蔽中断请求,if=0关闭中断
  • 中断不响应情况
  • 原因–设置ss:sp强制要求连续完成 以此保证栈的准确正确
  • int n引发中断
  • 疑问 什么时候if tf恢复?
  • int指令调动子程序,此子程序就是中断处理程序简称 中断例程 ------可以自定义中断例程来实现特定功能
  • 具体7ch 存在0000:7ch*4这个地方
  • 中断例程 参数:放在ax里面可以
  • 出入栈 操作一一对应,执行irep返回的时候意义出栈
  • 中断例程2
  • bios 和 dos中断处理
  • bios–在系统版的rom存放–容量8KB,地址从FE000H开始
  • BIOS要做硬件系统的检测和初始化工作,外部中断和内部终端的中断例程也在里面 对于硬件设备进行io的中断例程,还有和其他硬件操作的中断例程 里面都有---------ddr3八脚直接式BIOS芯片
  • bios 如此好 解放了大量程序员工作 不去理解底层
  • BIOS-比如显示内容 必须要算 推算了解显示的内存区域在哪里
  • bios的10h中断,(ah)=2调用第十号h终端的2耗子程序没设置光标位置
  • (ah)=9 调用10h中断的9号子程序 在光标位置显示字符
  • bios调用两个中断完成 显示高亮闪烁a
  • 直接BIOS终端手册-----例子
  • 汇编还有DOS中断–强大
  • 小结-bios,dos中断
  • 程序返回 int 21H DOS中断例程----其实就是mov ax,4c00h int 21h
  • 显示高亮a 方便的 dos中断例程!!牛逼
  • Bios和dos中断例程的安装过程
  • 端口的读写–声音为例: out in 等指令
  • in al 61h 这条指令为例实际上就是控制 设备控制器(61h)
  • 注意 端口-------就是外部设备
  • cpu可以访问三种东西,十四个寄存器,内存单元,端口—就—外部设备-------各种网卡 显卡。。主板上的接口芯片。
  • 各种芯片都有寄存器,由cpu读写
  • cpu把各个寄存器当作端口统一编制,某几个地址对应一个设备
  • 端口读写就用in out来操作
  • 端口的读写,cpu地址线选中芯片寄存器,cpu发出控制线的读命令,然后通过数据线送进cpu数据
  • 精彩!
  • IO端口分配–共
  • in out只能用ax或者al来存放端口读入数据或者发送的数据
  • # CMOS RAM芯片—包含一个实时钟(电子表)和一个128个存储单元的ram存储器------这个128B的ram里面存内部实时钟 系统配置信息,相关的程序(用于开机时配置系统信息)
  • 这块ram靠电池供电 不丢失信息—芯片由70h 71h端口读写-------70h提供地址 71提供数据
  • 提取cmos ram时间 信息 —时间信息用BCD码存放的-------
  • 外设的连接和中断
  • 外中断—可屏蔽中断-cpu检测到可屏蔽终端信息的时候如果IF=1那么cpu执行完当前指令后响应中断 引发中断过程,IF=0那么不响应可屏蔽中断
  • 不可屏蔽中断 必须相应的外中断,cpu检测到不可屏蔽信息是 ,执行完当前指令后立即响应,引发终端过程,
  • 对于8086。不可屏蔽中断的中断类型码固定为2
  • 外中断处理过程–1.取中断类型吗 对比内部终端 cpu内部自己生产 2. 标志寄存器入栈 置if0 tf0如果中断过程中想要处理可屏蔽中断 可以用指令将if置为1 3 csip入栈 4 转去处理中断处理
  • 不可频闭终端: 标志寄存器入栈if=0tf=0;注意csip入栈,3ip=(8),cs=(0ah)
  • 注意 不可屏蔽中端中断值固定为2
  • 注意8086 设置if指令 sti set if为1,cli clear 清理为0
  • PC键盘的处理过程----1键盘输入2引发9号中断3执行int9中断例程
  • pc机键盘的处理过程-引发终端
  • bios 键盘缓冲区在内存 能存放十五个键盘输入 用一个字存 高位的前半个字放扫描码 低位放字符码 也就是ascii码
  • 控制键 切换键 处理就是 用内存的一个字节0040:17这个地方一个字节来存放键盘键盘状态---------键盘状态
  • 执行int 9--------读出60h端口中的扫描码—根据扫描码分情况对待—如果自福建的扫描码,就把他的字符码送到内存的bios键盘缓冲区
  • 如果控制键的扫描码 就将其转变为状态字节就那个 字节里面–内存的 写入内存中存储状态字节的单元然后对键盘系统进行县官的控制
  • 实例 输入a处理过程
  • 定制键盘输入处理----int9 中断例程----满足个性需求
  • 依次显示a-z
  • 按下esc后改变现实颜色–
  • 按下esc改变颜色的实现—v1.0
  • 改写中断例程-以int9 为例-------和定制处理不同,常驻内存,更加持久-------设备底层技术常用
  • 很享受的感觉
  • @ 如何操作外部设备
  • 键盘操作为例
  • 对键盘输入的处理的int9h中断和int 16h中断
  • 输入引发的动作
  • 读出来 —程序员用 int16h–来做—16字 用环形队列 可存储扫描15个按键扫描码----(因为是环形的留一个判空–数据结构)
  • 小结 调用16h从缓冲区读数据------int 9 和int 16是相互配合的程序------软硬件搭配 9是硬件------16软件来做
  • 应用实例 用键盘输入更改屏幕颜色
  • 应用 字符串输入
  • 程序的处理过程
  • 磁盘读写----硬盘,-------
  • BIOS提供磁盘的直接服务 int13h
  • 用BIOS 对 磁盘进行读操作 int13h
  • 卧槽 从扇区,磁道,面都有规定—如 读取c盘 0面 1扇区的内容到0:200--------还有磁头号 驱动器号—是硬盘还是软盘
  • 写操作
  • dos中断对磁盘文件的支持 int 21h
  • dos中断对文件操作非常强大-------比c语言提供的强大很多--------用指定的驱动器和路径创建一个新目录---------用手册
  • 让计算机唱歌最后--------
  • 相关硬件以及控制--------主要有芯片8253和 芯片8255
  • 8253芯片(定时/计数器)的设置
  • 注意:8253初始化 --就这样设置—ax放唱歌的频率值(大致是)8255(并行io)控制扬声器的开关------------这两个芯片的驱动 都是通过端口操作进行的
  • 音符和发音频率的对应关系 对应这个 让计算机唱歌
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档