上一题下一题
跳转到
 
 
  世界如此多姿,发展如此迅速,窥一斑未必还能知全豹。但正如万花筒一样,每一个管窥都色彩斑斓。  
 
 
  知识通道 | 学习首页 | 教师首页 | PK首页 | 知识创造首页 | 企业首页 | 登录
 
本文对应知识领域
汇编指令的嵌入
作者:未知 申领版权
2010年12月12日 共有 2604 次访问 【添加到收藏夹】 【我要附加题目
受欢迎度:

    汇编指令的嵌入
    为了提高C语言程序内某特殊功能段的处理效率,我们可以在其源程序中嵌入一段汇编语言程序段。这样做,虽然能达到提高了程序处理效率的目的,但它无疑以丧失源程序的可移植性为代价。所以,当想用C语言和汇编语言混合编程时,程序员需要权衡采用这种方法的利与弊。
    在C语言中,嵌入汇编语言的语法如下(*):
    asm <opcode> <operands> <; or newline>
    注意:这里的分号';'不是汇编语言中起注释作用的分号,而是作为语句的分隔符。
    若C语言源程序中嵌入一条汇编语句,则可按下列方式来做:
    asm mov ax, data
    若要嵌入一组汇编语句,则需要用括号'{'和'}'把它们括起来。
    asm {
    mov  ax, data1
    xchg  ax, data2
    mov  data1, ax          //实现整型变量data1和data2之值的交换
    }
    例12.1 在C语言源程序中嵌入汇编语言语句实现赋值语句A=A B C,其中:A、B、C都是整型变量。
    解: ……
    asm {push ax            //实现整型变量A=A B C
    mov  ax, A
    add  ax, B
    add  ax, C
    mov  A, ax
    pop  ax
    }
    12.2 C语言程序的汇编输出
    在Turbo C 或Borland C 编程环境下,我们可TCC或BCC行命令把一个C语言的源程序转换成汇编语言的源程序。通过阅读汇编语言程序可以很准确地知道C语言语句的功能是如 何实现的,这样,可为将来学习《编译原理》课程中的"寄存器调度"和"代码生成"等相关知识打下良好的基础。
    C语言源程序转换的命令格式如下:
    TCC -S t1.cpp 或 BCC -S t1.cpp      ;假设其文件名为t1.cpp
    若命令TCC/BCC不带参数的话,则将显示其使用方法。
    下面是C语言程序及其相对应的汇编语言程序,希望读者能逐行对照理解它们语句之间的转换关系,这将能进一步理解高级语言的语句功能。
    1、C语言程序清单
    #include <stdio.h>
    int sum(int a, int b, int c)
    {
    return (a b c);
    }
    void main()
    {int a, b, c;
    a = b = 12;
    c = 32;
    printf("%d", sum(a,b,c));
    }
    2、生成的汇编语言程序清单
    

 
    
……                                           ;一系列辅助说明信息
    
 
    
_TEXT  segment byte public 'CODE'            ;代码段的开始
    
 
    
;int sum(int a, int b, int c)                      ;C语言语句
    
 
    
 
    
 
    
;{
    ;return(a b c); 
    
 
    
 
    
 
    
;} 
    
 
    
 
    
 
    
;void main()  
    
 
    
;{int a, b, c;                                    ;局部变量是用堆栈来存储的,请见第7.5.10节
    
 
    
; a = b = 12;                                    ;给局部变量赋值
    
 
    
 
    
 
    
; c = 32;  
    
 
    
; printf("%d", sum(a,b,c));                        ;调用系统标准函数 
    
 
    
; }  
    
 
    
_TEXT      ends                                ;代码段的结束
    
 
    
_DATA     segment  word  public  'DATA'       ;数据段的定义
    s@  label  byte
    db  '%d'
    db  0
    _DATA      ends
    
 
    
public   _main                     ;下面说明函数的属性,请见第7.6.3节
    public   @sum$qiii
    extrn   _printf : near
    _s@   equ  s@
    end
    

 

相关新闻

肢体语言塑造你自己
注释
《大学及其作用》
大学及其作用
杂谈语言(之六)——文字改革(下):一失足成千古恨的文字改革
杂谈语言(之五)——文字改革(上):半吊子的改革最糟糕!
杂谈语言(之四)——续谈广东话的口头语(2)
杂谈语言(之四)——续谈广东话的口头语(1)
杂谈语言(之三)——那些深受古汉语影响的语言(方言)
杂谈语言(之二)——语言学习的边际成本递减效应

您可能对这些感兴趣  

干货分享|10本最受国外孩子喜爱的英文词典——上
从孩子的表现看父母的缺点!请家长对号入座,看看你是哪一类?
20条制作PPT的视觉原则
培训简史:培训者必知的历史轨迹
广田丰管理培训生人才培养调查报告
第4讲 作为上司的职业经理
第3讲 作为同事的职业经理
第2讲 作为下属的职业经理
第1讲 培养经理人的管理素养
酒店前台新员工上岗培训计划

题目筛选器
日期:
类型:
状态:
得分: <=
分类:
作者:
职业:
关键字:
搜索

 
 
 
  焦点事件
 
  知识体系
 
  职业列表
 
 
  最热文章
 
 
  最多引用文章
 
 
  最新文章
 
 
 
 
网站介绍 | 广告服务 | 招聘信息 | 保护隐私权 | 免责条款 | 法律顾问 | 意见反馈
版权所有 不得转载
沪ICP备 10203777 号 联系电话:021-54428255
  帮助提示    
《我的太学》是一种全新的应用,您在操作中遇到疑问或者问题,请拨打电话13564659895,15921448526。
《我的太学》