30天自制操作系统-第四天

C语言与画面显示的练习
        目标:1、用C语言实现内存写入;2、挑战指针;3、色号设定;
         1、用C语言实现内存写入     
       
_write_mem8:	; void write_mem8(int addr, int data);
MOV		ECX,[ESP+4] ; [ESP+4],addr为第一个参数,故为ESP+4
MOV		AL,[ESP+8]; [ESP+8],data为第二个参数,故为ESP+8		
MOV		[ECX],AL    
RET

    INSTRSET:它用来告诉nask,这个程序是个486用的。
            2、挑战指针
      char *p;//用于BYTE类地址
      short *p;//用于WORD类地址
      int *p;//用于DWORD类地址
      p[i]不一定是数组,它与* ( p+i)意思完全相同。
       3、色号设定
      CPU的引脚与内存、键盘、网卡、声卡、软盘等相连。向设备发送电信号是OUT指令,向设备取得电信号是IN指令。为了区别不同的设备,需要设备号码称为port(端口)。
      调色板的方位步骤:
             1、在一连串的访问中屏蔽中断(比如CLI);
             2、将想要设定的调色板号码写入0x03c8,紧接着,按R,G,B的顺序写入0x03c9。如果还想继续设定下一个调色板,则省略调色板号码,再按照RGB的顺序写入0x03c9就行;
            3、如果想要读出当前调色板的状态,首先要将调色板的号码写入0x03c7,再从0x03c9读取3次。读出的顺序就是R,G,B。如果要继续读出下一个调色板,同样也是省略调色板号码的设定,按RGB的顺序读出。
            4、如果最初执行CLI,那么最后要执行STI。
      EFLAGS寄存器:由名为FLAGS的16位寄存器扩展而来的32位寄存器。FLAGS是存储仅为标志和中断标志等标志的寄存器。进位标志可以通过JC或JNC等跳转指令来简单地判断到底是0还是1。但对于中断标志,没有类似的JI或JNI命令,所以只能读入EFLAGS,再检查第9位是0还是1。
     和EFLAGS寄存器相关的,没有“MOV EAX,EFLAGS”之类的指令。对于EFLAGS寄存器的读写只能通过PUSHFD和POPFD指令。   
PUSHFD POP EAX  ;MOV EAX,EFLAGS
PUSH EAX POPFD ;MOV EFLAGS,EAXA
      用static定义的数组类型一般的DB形式,避免了赋值。
      table_rgb:
             DB 0x00, 0x00,0x00,0xff,......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值