当前位置: 代码迷 >> C语言 >> [菜鸟]高级语言能内嵌汇编代码这个设计是怎么来的?
  详细解决方案

[菜鸟]高级语言能内嵌汇编代码这个设计是怎么来的?

热度:495   发布时间:2008-02-18 22:22:55.0
[菜鸟]高级语言能内嵌汇编代码这个设计是怎么来的?
我知道C,C++,还有delphi下的pascal,都支持内联汇编,我自己学过一些汇编,知道汇编是怎么回事,但是我又一点没想明白,为什么,高级语言允许内嵌汇编代码(好像并不是所有的高级语言都支持内嵌汇编),而且所有的讲语言方面的书,从来不曾提起在这些语言中内嵌汇编代码的事情,仿佛这并不是这些语言天生就支持汇编一样,那么,到底为什么这些语言能支持内嵌汇编,他们支持的那些汇编代码和我们传统上看到的那些汇编语言有什么不同吗?
搜索更多相关的解决方案: 语言  汇编  代码  

----------------解决方案--------------------------------------------------------
C 和 C++ 都是比较底层的语言。

其它很多语言根本就不是基于硬件的。

[[it] 本帖最后由 cosdos 于 2008-2-18 22:30 编辑 [/it]]
----------------解决方案--------------------------------------------------------
LS金牌了,恭喜呀.

[[it] 本帖最后由 xianshizhe111 于 2008-2-18 22:31 编辑 [/it]]
本帖最近评分记录
2008-02-18 14:27:54
sunkaidong

来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4493
专家分:141
注 册:2006-12-28
  得分:0 
有的时候加一个汇编的头文件就好了,让你的汇编嵌入高级语言,说到底只不过用了编译环境而已....
----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]xianshizhe111[/un] 在 2008-2-18 22:27 的发言:[/bo]

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);
                }
        }
}

----------------解决方案--------------------------------------------------------
  相关解决方案