散尽千分!!高分求助!!不够再加!!说话算数!!!谁解决了 给1000分!各路英雄豪杰都来看看怎么解决这个问题!!

zenghuajie 2006-05-10 08:47:06
兄弟在dos中写一个直接写屏的程序:实现画彩色点 现在要移植到linux0.11中 请问该如何修改 编译的时候报错 汇编有错 请问如果这段程序能够在linux0.11中执行 是否需要把前面的那段汇编改为ATT汇编,如果要改怎么修改呢,另外如果此程序无法在linux0.11中执行,请教各位高人给个程序 ,如何实现在linux0.11中实现画彩色点呢!!兄弟跪求各路英雄豪杰相助!!!!
#define MODE_VGA13H 0x13
#define MODE_TEXT 0x03

void setmode(char mode) /*置视频模式的函数*/
{
asm mov ah,0x00 /* 用00h功能设置视频模式*/
asm mov al,mode /* L寄存器放欲设置的视频模式号,这里以13h视频模式为例*/
asm int 0x10
}

char far * vediobuf=(char far*)0xa0000000L;
void putpixel(int x,int y,int c)
{
*(vediobuf+x+320*y)=c;
}

int getpixel(int x,int y)
{
return *(vediobuf+x+320*y);
}

void main(void)
{
int i;
int j;


setmode(MODE_VGA13H);


for(i=0;i<20;i++)
for(j=0;j<320;j++)
putpixel(j,i,j);

getch();

setmode(MODE_TEXT);
}

...全文
565 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
zenghuajie 2006-05-19
  • 打赏
  • 举报
回复
楼上的讲法都不大对头~~在linux用户空间也能实现图形界面 虽然linux不能直接访问内存 但是它提供了mem作为内存镜像 这样就可以直接写入了内存了 具体参看linux0.99源代码
yzx1983 2006-05-19
  • 打赏
  • 举报
回复
应该主要是32位模式下进行实地址操作的问题

int 0x10是bios中断,这个可以脱离dos没问题,但是用户程序试图用它来操作实地址应该不太可能吧。
snailbreak 2006-05-16
  • 打赏
  • 举报
回复
不会
code_tin 2006-05-16
  • 打赏
  • 举报
回复
我也觉得如果是用中断进行绘图(DOS下面经常这么做,调用int中断)
那么到linux下面就要大幅度的修改了
universes 2006-05-16
  • 打赏
  • 举报
回复
mark先
zixuefeng_net 2006-05-16
  • 打赏
  • 举报
回复
没用过,
也不懂。
UP
+
learn!
Leomaxking 2006-05-16
  • 打赏
  • 举报
回复
没有linux
gjianpro 2006-05-11
  • 打赏
  • 举报
回复
帮UP了..
lj860603 2006-05-11
  • 打赏
  • 举报
回复
帮UP了..
寻开心 2006-05-11
  • 打赏
  • 举报
回复
linux不熟悉,怀疑这个是不可移植内容

dos下这个是限于pc上面的,在windows下就不可为的
windows下是禁止这种直接内存访问更改显示的
archerchun 2006-05-11
  • 打赏
  • 举报
回复
帮你up
zenghuajie 2006-05-11
  • 打赏
  • 举报
回复
楼上的代码报错~~~
xuelong_zl 2006-05-11
  • 打赏
  • 举报
回复
再就是楼主要用的环境也说得不明确,linux下是分as16,as两种自带的汇编编译器的,不知道楼主用的是哪个??

狗的程序是as下,如果是as16下会有问题...,linux下嵌入汇编的格式网上讲得不少,google一下吧
xuelong_zl 2006-05-11
  • 打赏
  • 举报
回复
狗的这个程序....

第一不建议用movl,建议用movb..

第二中断向量值在linux和dos(或win)下不一定是一样的,如果楼主用系统调用的话是int $80;

所以还是建议楼主先看看linux方面的相关资料吧.....
goodluckyxl 2006-05-11
  • 打赏
  • 举报
回复
void setmode(char mode) /*置视频模式的函数*/
{
reguster int_res;
_asm_ ("movl $0x00, %ah"
"movl mode,%al "
"asm int $0x10 " );
}
xuelong_zl 2006-05-11
  • 打赏
  • 举报
回复
linux0.11中用的汇编编译器用的是as16,而现在linux中用的是as(也就是32位下的),很难帮你做测试

查一下as16的语法吧
caiyujie87 2006-05-11
  • 打赏
  • 举报
回复
不懂 up
铖邑 2006-05-11
  • 打赏
  • 举报
回复
有空再帮你看吧
jixingzhong 2006-05-11
  • 打赏
  • 举报
回复
主要部分是不需要修改的了 ...

至于汇编,
改成 目标环境能够支持的方式就可以了,
因为不同的环境对内嵌汇编的支持方式有一些区别 ...
delphihero 2006-05-11
  • 打赏
  • 举报
回复
dos 可以写,但进入保护模式的windows linux 就难说了。用opengl 库,里面调用glDrawPixels()功能一样的。
加载更多回复(13)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧