![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
汇编
文章平均质量分 54
起风哥
这个作者很懒,什么都没留下…
展开
-
8086汇编(10、int9键盘中断)
今天我们来实现个功能按F1 不断改变屏幕颜色概念:按键盘会产生扫描码通码 按住不放断码 弹起,通码+80Hint9中断对应的端口为60H,也就是我们按下键盘,就可以从60H中读取到扫描码扫描码的对照表可以参考这篇文章:键盘按键的各种编码对照表如果我们直接改变int9,那么硬件层面的一些其它操作细节会就无法继续了,比如控制键的状态信息的填充,比如后续硬件的应答事件。所以这里我们需要做个事情就是在调用int9之前做一个拦截。也就是我们先从60H端口中把数据读走,然后在调用它原来的中断,做原创 2022-04-03 02:09:44 · 1772 阅读 · 0 评论 -
8086汇编(9、小时间大智慧)
先说明下左移右移得指令SHL (左移<<)SHR(右移>>)左移就是将寄存器中的二进制整体向左移动一位,在低位补0,被移动出去的那一位数放到CF标志位中,右移则相反,移动出去的一位也是放到CF中,例如左移mov al,1000 0001shl al,1 此时al=0000 0010 CF=1右移mov al,1000 0001shr al,1 此时al =0100 0000 CF=1移动4次shl al,4那么它有什么作用呢?操作系统中有一块芯原创 2022-04-01 22:48:51 · 755 阅读 · 0 评论 -
8086汇编(8、自定义中断)
先说明下无符号除法指令为 DIV格式:DIV OPRD如果:OPRD 为单字节即 BL CL则:AX/OPRD结果:AL=商,AH=余数如果:OPRD 为双字节 BX,CX则:DXAX/OPRD结果:AX=商,DX=余数如果除法发生错误会产生0号中断,我们今天要做的就是将0号中断给改了。我们之前知道80x25为彩色缓冲区,那么我们可以往这个区域直接写字符就能显示在屏幕上。DATAS SEGMENT ;此处输入数据段代码 DATAS ENDSSTACKS SEGMENT原创 2022-03-29 23:35:47 · 1041 阅读 · 0 评论 -
8086汇编(7、80x25彩色缓冲区)
内存地址空间种B8000H~BFFFH 共32KB空间,称为80x25彩色字符模式显示缓冲区,向这个地址写入的数据会立即出现在显示器上。显示缓冲区分为8页,没页4KB(约等于4000B),显示器可以显示任意一页的内容,一般情况下显示第0页的内容。讲的通俗点如下:即,如上窗口大小为16025个字节(4000个字节),每两个字节为一个字符,偶数地址存放字符的ascii码,奇数地址存放字符属性,也就是一行可以存放80个字符一共25行,共可以存放8025个字符2000个字符。每个字符可以有FF=2^8=256原创 2022-03-29 01:11:14 · 1042 阅读 · 0 评论 -
8086汇编(6、中断)
什么是中断?中断是bios程序内置的一套cpu调度事件的的程序(个人理解)它需要符合各类硬件厂商的标准,比如你想从硬盘读一些数据到内存,那么你需要调用13号中断。但是标准化的今天,这些厂商遵循了一定的规范和标准,所以能够进行各种适配。中断程序和call指令调用过程类似。我们甚至可以修改中断程序。什么是中断向量表?词听起来很高大上,实际上就是一张表格存着我的程序在内存中的哪个位置,即当我调用int 0的时候,我从内存0:0位置取到4个字节,将高位给cs,将低位给ip,改变程序指令指针寄存器,让cpu跳原创 2022-03-27 16:57:58 · 1713 阅读 · 0 评论 -
8086汇编(5、进位加法)
废话不多说,直接开始写代码。普通指令,以及编程思想我就不介绍了。寄存器大小位16位能存的最大值为0FFFFH=65535,那么如果相加的数值超过这个数产生了进位,那么寄存器不够存了,此时我们就需要用到进位加法指令 adc(add carry)进位加法在两数相加时会带上进位,就是我们平时的算术计算时的算法一样FFFFH+1=10000H ax=0000 进位标志 CF=1寄存器不够存我们可以把数据存哪里?在加一个寄存器来存也可以此时我们可以将低16位存ax 高16位存dx中那么如果两个寄存器还原创 2022-03-27 00:22:18 · 2532 阅读 · 0 评论 -
8086汇编(4、debug调试指令)
r 查看寄存器和修改寄存器例如:#查看寄存器r #修改axr ax #修改cs r cs#修改ipr ip读写命令a 地址 写入汇编指令d 地址 查看数据u 地址 查看汇编指令e 机器码调试命令t 单步执行指令g 地址,执行到该地址p 执行循环种的指令q 退出...原创 2022-03-26 23:20:43 · 496 阅读 · 0 评论 -
8086汇编(3、指令集)
指令集说明1、数据传送指令oprd1 :目的操作数,oprd2 源操作数,操作数可以是寄存器,存储器,累加器mov oprd1,oprd2 传送指令将oprd2的值传送给oprd1movsx oprd1,oprd2 符号填充指令,用oprd2的符号位填充oprd1 的高位movzx oprd1,oprd2 恒用0来填充目的操作数的高位push oprd 将操作数进行压栈与ss:sp相关pop oprd 将栈顶所指的两个字节数据弹出到oprd中xchg oprd1,oprd2 交换两个操作数原创 2022-03-21 22:14:09 · 1389 阅读 · 0 评论 -
8086汇编(2、寄存器)
我们可以打开上一篇安装好的目录直接双击运行dosbox然后敲r指令回车可以看到如下内容这就是所有的寄存器寄存器分为通用寄存器、段寄存器,控制寄存器,变址寄存器、指针寄存器1、通用寄存器16位ax 高8位ah,低8位al16位bx 高8位bh,低8位bl16位cx 高8位ch,低8位cl16位dx 高8位dh,低8位dl2、段寄存器ds(data segment)数据段寄存器es(extra segment) 附加段寄存器ss(stack segment)栈段寄存器cs(原创 2022-03-21 20:42:54 · 446 阅读 · 0 评论 -
8086汇编(1、环境搭建)
大学学的嵌入式,但是汇编、计组,操作系统的课逃了很多没,勉强混个及格,工作10年了现在回过头去发现这几门课非常重要,以前怎么没好好学呢?所以决定沉下心来把这两门课补回来。说句实在点的话,确实什么时候开始学都不晚,但是还是奉劝下在读的同学要好好学习,尽管我知道你们不会听,但是这个话还是该说的说下。因为我自己就是这么过来的。废话不多说,先搭建个环境下载dosboxgit clone https://github.com/2229499815/DOSBox_MASM然后安装MASM_For_Window原创 2022-03-21 20:00:17 · 1498 阅读 · 0 评论