Day_04 显示条纹 图案
static unsigned char Table_Rgb
就是一个调色板 数值 就代表 一个颜色
void io_hlt(void);//允许中断
void io_cli(void);//关中断
void io_out8(int nPort, int nData);//向端口 写入RGB
int io_load_eflags(void);//获取标志寄存器
void io_store_eflags(int nEflags);//恢复标志寄存器void init_palette(void);//初始化调色板
void set_palette(int nStart, int nEnd, unsigned char * pRGB);void HariMain(void)
{int i;char *pAdd = (char *)0xa0000; init_palette(); //设定调色板for (i = 0; i <= 0xffff; i++) {*(pAdd+i) = i & 0x0f;}for (;;) {io_hlt();}
}void init_palette(void)
{static unsigned char Table_Rgb[16*3] = {0x00, 0x00, 0x00, /* 0:黑色 */0xff, 0x00, 0x00, /* 1:亮红 */0x00, 0xff, 0x00, /* 2:亮绿 */0xff, 0xff, 0x00, /* 3:亮黄 */0x00, 0x00, 0xff, /* 4:亮蓝 */0xff, 0x00, 0xff, /* 5:量紫 */0x00, 0xff, 0xff, /* 6:浅亮蓝 */0xff, 0xff, 0xff, /* 7:白 */0xc6, 0xc6, 0xc6, /* 8:亮灰 */0x84, 0x00, 0x00, /* 9:暗红 */0x00, 0x84, 0x00, /* 10:暗绿 */0x84, 0x84, 0x00, /* 11:暗黄 */0x00, 0x00, 0x84, /* 12:暗青 */0x84, 0x00, 0x84, /* 13:暗紫 */0x00, 0x84, 0x84, /* 14:浅暗蓝 */0x84, 0x84, 0x84 /* 15:暗灰 */}set_palette(0, 15, Table_Rgb);return;
}void set_palette(int nStart, int nEnd, unsigned char * pRGB)
{int i , eflags;eflags = io_load_eflags(); //记录中断许可标志的值io_cli();//将中断许可标志位置0 不允许 产生中断io_out8(0x03c8, nStart);//将想要设定的调色板号码 写入0X03c8for(i = nStart; i <= nEnd; i++) //按照R G B 的顺序进行写入{io_out8(0x03c9, pRGB[0] / 4);io_out8(0x03c9, pRGB[1] / 4);io_out8(0x03c9, pRGB[2] / 4);pRGB += 3;}io_store_eflags(eflags);//恢复 中断许可标志return;
}
汇编代码
;NASKFUNC 汇编函数库 供C语言调用[FORMAT "WCOFF"] ;制作目标文件的模式
[INSTRSET "i486p"] ;使用到486为止的指令
[BITS 32];制作目标文件的 信息
[FILE "naskfunc.nas"] ;源文件名信息GLOBAL _io_hlt, _io_cli, _io_sti, _io_stihltGLOBAL _io_in8, _io_in16, _io_in32GLOBAL _io_out8, _io_out16, _io_out32GLOBAL _io_load_eflags, _io_store_eflags ;程序中包含的函数名;以下是 实际的函数[SECTION .text] ;目标文件中写了这些后 才能写程序_io_hlt: ; void io_hlt(void);停止运行HLTRET ;函数调用返回_io_cli: ;void io_cli(void)CLI ;将中断标志置0 不允许接受中断RET_io_sti: ;void io_sti(void)STI ;将中断标志 置1 允许中断RET_io_stihlt: ;void io_stihlt(void)CLISTIRET_io_in8: ;int io_in8(int nPort)MOV EDX, [ESP+4]MOV EAX, 0IN AL, DXRET_io_in16: ;int io_in16(int nPort)MOV EDX, [ESP+4]MOV EAX, 0IN AX,DX ;从端口中 读取数据到AXRET_io_in32: ; int io_in32(int nPort)MOV EDX, [ESP+4]IN EAX, DXRET_io_out8: ; void _io_out8(int nPort, int nData)MOV EDX, [ESP+4]MOV AL, [ESP+8]OUT DX, AL ;将AL中的内容写入到 端口RET_io_out16: ; void _io_out16(int nPort, int nData)MOV EDX, [ESP+4]MOV AX, [ESP+8]OUT DX, AX ;将AL中的内容写入到 端口RET_io_out32: ; void _io_out32(int nPort, int nData)MOV EDX, [ESP+4]MOV EAX, [ESP+8]OUT DX, EAX ;将AL中的内容写入到 端口RET_io_load_eflags:PUSHFDPOP EAXRET_io_store_eflags:MOV EAX, [ESP+4]PUSH EAXPOPFDRET
知识点
①VRAM 是 0xa0000- 0xaffff 向里面 写入 数值, 就是代表的颜色
②IN 指令 从指定端口号 读取数值
③OUT指令 从指定寄存器 输出数值 到指定端口号
④CLI指令 将中断允许位 置0 不允许
⑤STI指令 将中断允许位 置1 允许中断
⑥PUSHFD 将标志寄存器 入栈
⑦POPFD 将标志寄存器出栈
Day_04 显示条纹 图案相关推荐
- 三维测量—DLP4500投影条纹图案步骤记录
三维测量-DLP4500投影条纹图案步骤记录 DLP4500投影仪投影步骤记录 硬件连接 条纹图案的制作 固件烧写 投影单个格雷码图案 投影格雷码图案序列 DLP4500投影仪投影步骤记录 实验室买了 ...
- Java黑皮书课后题第6章:*6.6(显示图案)编写方法显示如下图案:public static void displayPattern(int n)
*6.6(显示图案)编写方法显示如下图案:public static void displayPattern(int n) 题目 题目概述 破题 代码 运行示例 题目 题目概述 *6.6(显示图案)编 ...
- 论文学习 | 用于三维条纹图案轮廓快速测量的质量引导泛洪相位展开算法
<用于三维条纹图案轮廓快速测量的质量引导泛洪相位展开算法> 英文原文:Joe, Chicharo F . Fast Quality-guided flood-fill phase unwr ...
- java 星形线代码,JavaScript图形实例:星形条纹图案
1.星形条纹图案 星形线的笛卡尔坐标方程式为: x=r*cos(θ)^3 y=r*sin(θ)^3 (0≤θ≤2π) 圆的笛卡尔坐标方程式为: x=r*cos(θ) y=r*sin(θ) ...
- R语言使用ggplot2可视化:使用ggpattern包在分组条形图中添加自定义条纹图案、添加阴影、条纹或其他图案或纹理(add hatches, stripes or another pattern
R语言使用ggplot2可视化:使用ggpattern包在分组条形图中添加自定义条纹图案.添加阴影.条纹或其他图案或纹理(add hatches, stripes or another pattern ...
- 汇编语言显示“*”符号图案(2)
用汇编语言编写程序,在屏幕上显示图案. 要求在屏幕上显示如下图案: * * * * * * * * * * * * * * * * 其中第一行"*" ...
- c语言 编程显示图案*,C语言中怎么编程在计算机屏幕上显示如下图案?
满意答案 aggaskd2a 2013.07.14 采纳率:41% 等级:11 已帮助:5656人 #include int main() { int i, j; for(i = 0; i &l ...
- ArcGIS标注符号显示动物图案及文字
首先,类型要选择"字符标记符号" 一.在文本符号,esri Covervation中,可以找到鸟.羊.鹿等动物符号样式: 二.在[candara].[windings Latin- ...
- 记录一下HarmonyOS开发app时Image标签无法显示圆形图案的问题
目录 解决方案 环境 图片文件 layout配置 预览效果 解决方案 不废话,我就是换成了图片为圆形的PNG的图片,然后配置后面贴一下. 环境 DevEco Studio 3.0.0. ...
- 汇编语言显示“*”符号图案(1)
现有程序: .MODEL SMALL .STACK 100H .DATA .CODE MAIN PROC MOV CL, 1 MOV BL, 1 MOV ...
最新文章
- mysql分库一个库和多个库_数据库分库后不同库之间的关联
- vs2005什么时候能出正式版
- Java反射之如何判断类或变量、方法的修饰符(Modifier解析)
- 【渝粤题库】广东开放大学企业标准化 形成性考核
- Perhaps you are running on a JRE rather than a JDK? 关于 idea maven 缓存的问题 清理 idea maven 缓存
- xcode7打包ipa文件
- long 雪花算法_雪花算法(SnowFlake)Java版
- 判断是否素数 c语言,判断是否是素数 C语言
- vb教材笔记_vb学习笔记
- 电工技师技能实训考核装置QY-W601C
- java类加载器有几种_请问这几种类加载器有什么区别?
- 微信公众号引流的平台有哪些?
- office2010 错误1706 解决办法
- 一分钟教你解决——浏览器代理服务器被篡改
- 计算机限制无线网络,无线网络连接受限制怎么办 无线网络连接受限解决方法【图文】...
- 高分卫星影像查询地址
- u盘有声音但是不显示怎么办?u盘不显示解决方案
- 整顿风暴后网址导航将何去何从 如何孕育重生
- python 官网下载地址
- 微信小程序接入关联微信公众号official-account方案总结