|
发表于 2013-1-31 21:53:05
|
显示全部楼层
本帖最后由 消失在黑暗中 于 2013-1-31 22:24 编辑
如果真想深究,建议学下操作系统原理。硬件都有驱动,比如主板驱动,网卡驱动,显卡驱动,键盘驱动,USB都有驱动等等。系统的内核就是驱动层面。操作系统管理资源,控制各种硬件。编写的软件无法直接操作硬件,除非你能写驱动,而是通过操作系统这个管理者,间接的操控硬件。软件是通过应用程序接口api间接控制硬件,比如在屏幕上显示文字,图像等等。
如果有人能用汇编就能操作硬件,牛逼啊!首先问你,驱动你都会写啊!
我以api的角度举个例子,软件是如何通过系统操作硬件的:
[code]HDC hDC;//设备上下文,这个叫法很多,总的说是GDI的数据结构。
HBITMAP hBitmap;//hbitmap是位图资源标示,res与代码编译生成的pe文件的资源区,
HBRUSH hBrush,hOldBrush;//画刷资源标示
RECT rect;
hDC=GetDC(hWnd);//获取hWnd窗口的dc
//由锯齿位图的位数据来创建一个位图
hBitmap=CreateBitmap(8,8,1,1,Zigzag);//根据资源生成位图,Zigzag指向位图的数据源,Zigzag可以用数组定义
//用新创建的位图来创建一个画刷
hBrush=CreatePatternBrush(hBitmap);//用指定的位图创建画刷
//将新创建的画刷选入DC中,从而使其成为当前画刷
hOldBrush=(HBRUSH)SelectObject(hDC,hBrush);
GetClientRect(hWnd,&rect);
//用当前画刷来填充一个区域
PatBlt(hDC,rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,PATCOPY);//gdi函数,
SelectObject(hDC,hOldBrush);
ReleaseDC(hWnd,hDC);
//撤销新创建的位图和画刷
DeleteObject(hBrush);
DeleteObject(hBitmap);
如果真想用汇编 写个窗口,然后再窗口上输出图像,难!事实上都是api间接通过系统对硬件的操作
|
|