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 显示条纹 图案相关推荐

  1. 三维测量—DLP4500投影条纹图案步骤记录

    三维测量-DLP4500投影条纹图案步骤记录 DLP4500投影仪投影步骤记录 硬件连接 条纹图案的制作 固件烧写 投影单个格雷码图案 投影格雷码图案序列 DLP4500投影仪投影步骤记录 实验室买了 ...

  2. Java黑皮书课后题第6章:*6.6(显示图案)编写方法显示如下图案:public static void displayPattern(int n)

    *6.6(显示图案)编写方法显示如下图案:public static void displayPattern(int n) 题目 题目概述 破题 代码 运行示例 题目 题目概述 *6.6(显示图案)编 ...

  3. 论文学习 | 用于三维条纹图案轮廓快速测量的质量引导泛洪相位展开算法

    <用于三维条纹图案轮廓快速测量的质量引导泛洪相位展开算法> 英文原文:Joe, Chicharo F . Fast Quality-guided flood-fill phase unwr ...

  4. java 星形线代码,JavaScript图形实例:星形条纹图案

    1.星形条纹图案 星形线的笛卡尔坐标方程式为: x=r*cos(θ)^3 y=r*sin(θ)^3       (0≤θ≤2π) 圆的笛卡尔坐标方程式为: x=r*cos(θ) y=r*sin(θ)  ...

  5. R语言使用ggplot2可视化:使用ggpattern包在分组条形图中添加自定义条纹图案、添加阴影、条纹或其他图案或纹理(add hatches, stripes or another pattern

    R语言使用ggplot2可视化:使用ggpattern包在分组条形图中添加自定义条纹图案.添加阴影.条纹或其他图案或纹理(add hatches, stripes or another pattern ...

  6. 汇编语言显示“*”符号图案(2)

    用汇编语言编写程序,在屏幕上显示图案. 要求在屏幕上显示如下图案: * * * * * * *     * * * * *      * * *        * 其中第一行"*" ...

  7. c语言 编程显示图案*,C语言中怎么编程在计算机屏幕上显示如下图案?

    满意答案 aggaskd2a 2013.07.14 采纳率:41%    等级:11 已帮助:5656人 #include int main() { int i, j; for(i = 0; i &l ...

  8. ArcGIS标注符号显示动物图案及文字

    首先,类型要选择"字符标记符号" 一.在文本符号,esri Covervation中,可以找到鸟.羊.鹿等动物符号样式: 二.在[candara].[windings Latin- ...

  9. 记录一下HarmonyOS开发app时Image标签无法显示圆形图案的问题

    目录 解决方案 环境 图片文件 layout配置 预览效果 解决方案     不废话,我就是换成了图片为圆形的PNG的图片,然后配置后面贴一下. 环境     DevEco Studio 3.0.0. ...

  10. 汇编语言显示“*”符号图案(1)

    现有程序: .MODEL  SMALL .STACK  100H .DATA .CODE MAIN    PROC     MOV   CL, 1     MOV   BL, 1     MOV   ...

最新文章

  1. mysql分库一个库和多个库_数据库分库后不同库之间的关联
  2. vs2005什么时候能出正式版
  3. Java反射之如何判断类或变量、方法的修饰符(Modifier解析)
  4. 【渝粤题库】广东开放大学企业标准化 形成性考核
  5. Perhaps you are running on a JRE rather than a JDK? 关于 idea maven 缓存的问题 清理 idea maven 缓存
  6. xcode7打包ipa文件
  7. long 雪花算法_雪花算法(SnowFlake)Java版
  8. 判断是否素数 c语言,判断是否是素数 C语言
  9. vb教材笔记_vb学习笔记
  10. 电工技师技能实训考核装置QY-W601C
  11. java类加载器有几种_请问这几种类加载器有什么区别?
  12. 微信公众号引流的平台有哪些?
  13. office2010 错误1706 解决办法
  14. 一分钟教你解决——浏览器代理服务器被篡改
  15. 计算机限制无线网络,无线网络连接受限制怎么办 无线网络连接受限解决方法【图文】...
  16. 高分卫星影像查询地址
  17. u盘有声音但是不显示怎么办?u盘不显示解决方案
  18. 整顿风暴后网址导航将何去何从 如何孕育重生
  19. python 官网下载地址
  20. 微信小程序接入关联微信公众号official-account方案总结

热门文章

  1. JavaScript之WebSocket 技术
  2. linux下添加定时任务
  3. filebeat配置文件
  4. tcp/ip源代码(17)——ip_fragment
  5. 解决 Files 的值 HEAD无效。路径中具有非法字符...
  6. RSync实现文件同步备份配置详解
  7. Python中父类和子类间类属性(非实例属性)的设置获取的传递
  8. 【HTTP】Fiddler(一) - Fiddler简介和使用
  9. pure-ftpd 配置
  10. ******多个政府网站 嫌犯潜逃永州落网