看看你C语言是什么级别
要C是吧,就C个切底咯。条件是不允许你调用任何的函数库,函数库不是C语言必要的一部分,看你能C到什么地方?连最简单的hello world输出都艰难是吧。
程序代码:void prints(char*);
void print(char*);
void crlf();
int main()
{
char s[]="hello world!$";
prints(s);
crlf();
print(s);
getch();
return 0;
}
void crlf()
{
asm mov dl,0dh
asm mov ah,2h
asm int 21h
asm mov dl,0ah
asm int 21h
}
void prints(char* s)
{
asm mov dx,s
asm mov ah,9
asm int 21h
}
void print(char* s)
{
asm mov si,s
asm mov ah,2
print1:
asm lodsb
asm or al,al
asm jz over
asm mov dl,al
asm int 21h
asm jmp print1
over:
asm mov ah,3
asm int 10h
asm dec dl
asm mov ah,2
asm int 10h
asm mov al,20h
asm mov cx,1
asm mov ah,0ah
asm int 10h
}tc编译,应该用堆栈传递的,有点长,算了
程序代码:
#define BLACK 0 //黑色
#define BLUE 1 //蓝色
#define GREEN 2 //绿色
#define CYAN 3 //青色
#define Red 4 //红色
#define MAGENTA 5 //洋红色
#define BROWN 6 //褐色
#define LIGHTGRAY 7 //高亮灰色
#define DARKGRAY 8 //灰色
#define LIGHTBLUE 9 //高亮蓝色
#define LIGHTGREEN 10 //高亮绿色
#define LIGHTCYAN 11 //高亮青色
#define LIGHTRED 12 //高亮红色
#define LIGHTMAGENTA 13 //高亮洋红色
#define YELLOW 14 //黄色
#define WHITE 15 //白色
#define BLINK 16
void print(char* String,int Color)
{
char far* screen_address=(char far*)0xB8000000;
while(*String)
{
*screen_address=*String;
screen_address++;
*screen_address=Color;
String++;
screen_address++
}
}
int main(void)
{
print("hello world",GREEN);
return 0;
}
我以前写了个直接读显存的。原文地址:https://bbs.bccn.net/viewthread.php?tid=220406&highlight=%2Bioriliao