由机器语言到高级语言程序编写编译==.pptxVIP

  • 1
  • 0
  • 约1.18万字
  • 约 64页
  • 2024-01-18 发布于广西
  • 举报

由机器语言到高级语言程序编写编译==.pptx

第6讲由机器语言到高级语言---程序编写编译6.1混合编程6.2C/C++的嵌入式汇编6.3用C/C++调用汇编

6.1混合编程

混合编程即由高级语言来调用或嵌入汇编语言子程序,或用汇编语言调用或嵌入高级语言子程序。汇编程序常以过程的形式同高级语言(如C/C++、BASIC、PASCAL、DELPHI等)一起使用。

6.1混合编程

高级语言和汇编语言连接很容易,因为在高级语言编译后生产的编译程序是一个.OBJ的文件,这与汇编程序输出的目标文件一样都是机器语言程序。那么我们就可以利用link将高级语言程序产生的.OBJ程序与汇编程序产生的.OBJ程序连接起来,形成一个.EXE的可执行文件。

6.1混合编程高级语言与汇编语言的连接应注意下面几个问题:1、两种语言之间的控制传输问题2、参数的传递3、存储分配问题

6.2C/C++的嵌入式汇编在C/C++与汇编语言的混合编程过程中,C/C++调用汇编代码常有两种方法:一、直接在C/C++程序中嵌入汇编语句;二、C/C++调用汇编语言子程序。

6.2C/C++的嵌入式汇编在C或者C++中进行嵌入式汇编需要注意以下要点:嵌入式汇编语言代码支持INTEL80X86CPU的全部32位指令系统,但是不能使用伪指令与宏指令语句,也不能使用结构〔STRUCT〕和记录〔RECORD〕;嵌入式汇编语言可以使用C++程序中标识符,包括标号、变量、函数名、常量、宏、类型名、结构和联合的成员以及类对象的公有〔PUBLIC〕成员变量等;嵌入式汇编语言代码中可以使用汇编语言格式的常数〔131AH〕,也可以使用C++格式的常数〔0X131A〕;嵌入式汇编语言不能使用C++语言的运算符;嵌入式汇编语言代码中的转移指令和C++中的GOTO语句都能跳转到汇编语言或者C++定义的标号;嵌入式汇编语言定义的函数返回值的传递方法与预模块调用汇编中汇编语言程序返回值的传递方法相同,在C++程序编译时会产生“NORETURNVALUE〞警告,可以使用#PRAGMAWARNING(DISABLE:4035)预编译语句禁止该警告。

7.2C/C++的嵌入式汇编

在C/C++程序中嵌入汇编语句在嵌入式汇编中访问C/C++的数据汇编语言程序段编写C函数汇编程序调用C/C++函数

在C/C++程序中嵌入汇编语句第一种方式在C/C++程序中嵌入汇编语句_ASM操作码操作数;或换行操作码是处理器指令或假设干伪指令;操作数是操作码可接受的数据。内嵌的汇编语句可以用分号“;〞结束,也可以用换行符结束;一行中可以有多个汇编语句,相互间用分号分隔,但不能跨行书写。嵌入汇编语句的分号不是注释的开始;要对语句注释,应使用C的注释,如/*…*/。

在C/C++程序中嵌入汇编语句第二种方式,_ASM{汇编程序段}采用花括号的汇编语言程序段形式。_ASM{汇编程序段}如下所示:_ASM{MOVAX,15HMOVCX,9HADDAX,CX}

在C/C++程序中嵌入汇编语句包含在括号中的汇编代码必须按照特定的格式:1〕指令必须括在引号里。2〕如果包含的指令超过一条,那么必须使用新行字符分隔汇编语言代码的每一行。通常,还包含制表符帮助缩进汇编语言代码,使代码行更容易阅读。

例:显示1到1000中任一个数的二进制到十六进制数。#INCLUDEIOSTREAM.HCHAR*BUFFER=ENTERANUMBERBETWEEN0AND1000:;CHAR*BUFFER1=BASE;INTB=0;CHARA;VOIDDISPS(INTBASE,INTDATA){INTTEMP;_ASM{MOVAX,DATAMOVBX,BASEPUSHBXTOP1:MOVEDEX,0DIVBXPUSHDXCMPAX,0JNZTOP1TOP2:POPDXCMPDX,BXJETOP4ADDDX,30HCMPDX,39HJBETOP3ADDDX,7TOP3:MOVTEMP,EX}COUT(CHAR)TEMP;_ASM{JMPTOP2}TOP4:;}VOIDMAIN(VOID){INTI;COUTBUFFER;CIN.GET(A);WHILEA=’0’A=’9’){_ASM{SUBA,30H}B=B*10+A;CIN.GET(A);}FOR(I=2;I17;I++){COUTBUFFER1;DISPS(10,I);COUT(CHAR)(0X20);DISPS(I,B);CO

文档评论(0)

1亿VIP精品文档

相关文档