有的时候加一个汇编的头文件就好了,让你的汇编嵌入高级语言,说到底只不过用了编译环境而已....
----------------解决方案--------------------------------------------------------
呵呵。
----------------解决方案--------------------------------------------------------
这喜,可不能白恭哦(玩笑)
----------------解决方案--------------------------------------------------------
...这
这个问题就象“为什么这个网络游戏允许使用脚本”一样
----------------解决方案--------------------------------------------------------
内联汇编还是汇编.
只不过是在高阶语言内联汇编.
像一个用画点中断画一条线,如果在汇编中得用很复杂的控制语句.
而内联汇编刚可以用高阶语言的控制语句.在高阶语言里内联汇编
的主要原因是为了实现一些高阶语言不能实现功能.
如果你对C语言有一点熟悉的话就可以知当我们需要用到printf函数
时就必须include stdio.h, 如果我禁止你include用任何IO函数库
,那么你就得在C中使用汇编了,像 int 21h int 16h 这些IO中断.
----------------解决方案--------------------------------------------------------
以前我胡乱写的一点点内联汇编代码(TC格式的)
模拟进度条(图形版):http://bbs.bccn.net/thread-193804-1-1
#include <stdio.h>
void redos();
void pause(unsigned int time);
void screen_mode(unsigned char mode);
void point(unsigned int x,
unsigned int y,
unsigned char colorID,
unsigned char color
);
void shape(unsigned int x0,
unsigned int y0,
unsigned int x1,
unsigned int y1,
unsigned char colorID,
unsigned char color
);
int main(void)
{
int x,y;
screen_mode(0x12);
printf("\n\n");
for(x=0; x<=500; x+=30)
{
shape(0,10,x,30,0,1);
printf("%d\%\b\b\b",x/5);
pause(1);
}
printf("100\%\b\b\b");
redos();
return 0;
}
void redos()
{
asm mov ah,7h;
asm int 21h;
asm mov ah,4ch;
asm int 21h;
}
void pause(unsigned int time)
{
asm mov ah,0h;
asm int 1ah;
asm add dx,time;
asm mov bx,dx;
label:
asm int 1ah;
asm cmp bx,dx;
asm jne label;
}
void screen_mode(unsigned char mode)
{
asm mov ah,0h;
asm mov al,mode;
asm int 10h;
}
void point(unsigned int x,
unsigned int y,
unsigned char colorID,
unsigned char color
)
{
asm mov ah,0bh;
asm mov bh,0x(colorID);
asm mov bl,0x(color);
asm int 10h;
asm mov ah,0ch;
asm mov al,0x(color);
asm mov cx,x;
asm mov dx,y;
asm int 10h;
}
void shape(unsigned int x0,
unsigned int y0,
unsigned int x1,
unsigned int y1,
unsigned char colorID,
unsigned char color
)
{
int i_x0, i_y0;
for(i_x0=x0; i_x0<=x1; i_x0++)
{
for(i_y0=y0; i_y0<=y1; i_y0++)
{
point(i_x0, i_y0, colorID,color);
}
}
}
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]xianshizhe111[/un] 在 2008-2-18 22:27 的发言:[/bo]
LS金牌了,恭喜呀.
LS金牌了,恭喜呀.
呵呵。
----------------解决方案--------------------------------------------------------
这喜,可不能白恭哦(玩笑)
----------------解决方案--------------------------------------------------------
...这
这个问题就象“为什么这个网络游戏允许使用脚本”一样
----------------解决方案--------------------------------------------------------
内联汇编还是汇编.
只不过是在高阶语言内联汇编.
像一个用画点中断画一条线,如果在汇编中得用很复杂的控制语句.
而内联汇编刚可以用高阶语言的控制语句.在高阶语言里内联汇编
的主要原因是为了实现一些高阶语言不能实现功能.
如果你对C语言有一点熟悉的话就可以知当我们需要用到printf函数
时就必须include stdio.h, 如果我禁止你include用任何IO函数库
,那么你就得在C中使用汇编了,像 int 21h int 16h 这些IO中断.
----------------解决方案--------------------------------------------------------
以前我胡乱写的一点点内联汇编代码(TC格式的)
模拟进度条(图形版):http://bbs.bccn.net/thread-193804-1-1
程序代码:
#include <stdio.h>
void redos();
void pause(unsigned int time);
void screen_mode(unsigned char mode);
void point(unsigned int x,
unsigned int y,
unsigned char colorID,
unsigned char color
);
void shape(unsigned int x0,
unsigned int y0,
unsigned int x1,
unsigned int y1,
unsigned char colorID,
unsigned char color
);
int main(void)
{
int x,y;
screen_mode(0x12);
printf("\n\n");
for(x=0; x<=500; x+=30)
{
shape(0,10,x,30,0,1);
printf("%d\%\b\b\b",x/5);
pause(1);
}
printf("100\%\b\b\b");
redos();
return 0;
}
void redos()
{
asm mov ah,7h;
asm int 21h;
asm mov ah,4ch;
asm int 21h;
}
void pause(unsigned int time)
{
asm mov ah,0h;
asm int 1ah;
asm add dx,time;
asm mov bx,dx;
label:
asm int 1ah;
asm cmp bx,dx;
asm jne label;
}
void screen_mode(unsigned char mode)
{
asm mov ah,0h;
asm mov al,mode;
asm int 10h;
}
void point(unsigned int x,
unsigned int y,
unsigned char colorID,
unsigned char color
)
{
asm mov ah,0bh;
asm mov bh,0x(colorID);
asm mov bl,0x(color);
asm int 10h;
asm mov ah,0ch;
asm mov al,0x(color);
asm mov cx,x;
asm mov dx,y;
asm int 10h;
}
void shape(unsigned int x0,
unsigned int y0,
unsigned int x1,
unsigned int y1,
unsigned char colorID,
unsigned char color
)
{
int i_x0, i_y0;
for(i_x0=x0; i_x0<=x1; i_x0++)
{
for(i_y0=y0; i_y0<=y1; i_y0++)
{
point(i_x0, i_y0, colorID,color);
}
}
}
----------------解决方案--------------------------------------------------------