c语言对应汇编语句(c语言与汇编)

本篇文章给大家谈谈c语言对应汇编语句,以及c语言与汇编对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

1、如何查看C语言对应的汇编语言2、C语言内嵌汇编3、C语言和汇编语言的区别是什么?4、如何C语言与汇编混编

如何查看C语言对应的汇编语言

有两种方法:

(1)增加参数/FA:Project-Setting…,C/C++选项卡中的Project Options中增加参数/FA,编译后debug目录中将会增加对应源文件的汇编文件(*.asm)。

(2)如果想查看C语句对应的汇编代码的话,可以这样:F11单步调试,在debug工具栏中选择“disassembly”即可。每行C代码下面就是对应的汇编代码。

例如:

C代码程序:

int main(){

    int a = 3;

    int b = 4;

    int c = a + b;

    printf(“c=%d/n”, c);

    return 0;

}

对应的汇编代码程序(部分)如下:

5:        int a = 3;

00401028   mov         dword ptr [ebp-4],3

6:        int b = 4;

0040102F   mov         dword ptr [ebp-8],4

7:        int c = a + b;

00401036   mov         eax,dword ptr [ebp-4]

00401039   add         eax,dword ptr [ebp-8]

0040103C   mov         dword ptr [ebp-0Ch],eax

c语言对应汇编语句(c语言与汇编)

C语言内嵌汇编

在调试联盛德W800芯片代码时,看到了下面的代码实现,记录下C语言内嵌汇编语言的实现方式。部分代码如下:

该函数实现功能:将入参newMask的值写入到psr寄存器,用于恢复现场。

代码下载路径:

__asm__ (

汇编语句部分

:输出部分

:输入部分

:破坏描述部分

);

1)C内嵌汇编以关键字 __asm__ 或 asm 开始。如果使用 volatile 关键字,则表示告诉编译器不优化后续的代码。

2) 汇编语句部分:可以包含多条汇编语句,每条语句之间用“ ”或“;”,例:

注:汇编语句中的操作数可以使用占位符引用C语言变量,名称如下:%0,%1,…。

2) 输出部分:在汇编语言中被修改的C变量

3) 输入部分:作为参数输入到汇编语言中的C变量

注:输出和输入部分是针对汇编语句部分的输入和输出参数而言。例:如果汇编语言使用变量设置寄存器,则用输入部分;如果汇编语言从寄存器读取值,保存到变量,则用输出部分。

4) 破坏描述部分:通知编译器使用了哪些寄存器或内存。

5) 每个部分之间用”:”隔开。汇编语句部分必不可少,其他部分可以省略。例: asm(“nop”) ,实现空操作。

C语言和汇编语言的区别是什么?

区别如下:

(1)两者编译组成不同。汇编语言是将由0、1组成的机器语言用具有简单语义的英文代码表示,而C语言不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等。

(2)两者被计算机识别的路径不同。汇编语言通常用于对硬件的直接操控。而且C语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行。

(3)两者用处不同。汇编语言通常用在程序中最核心的、控制硬件的代码,一方面是安全,另一方面提高运行速度。而C语言通常用在计算机外用功能上。

(4)两者学习难易程度不同。汇编语言所需要的编绘知识很多很复杂,经常被开发者使用。而C语言是一门很简单方便的语言,编程者也就不需要有太多的专业知识。

计算机语言(Computer Language)指用于人与计算机之间通讯的语言。计算机语言是人与计算机之间传递信息的媒介。计算机系统最大特征是指令通过一种语言传达给机器。计算机语言从低级到高级可以分为:

(1)机器语言,即由0、1组成的机器硬件可以识别的语言;

(2)低级语言,即汇编语言

(3)中级语言,如C语言

(4)高级语言,如C++,JAVA,C#等。

扩展资料:

如今通用的编程语言有两种形式:汇编语言和高级语言。

汇编语言和机器语言实质是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,容易识别和记忆。源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。

高级语言是绝大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要有太多的专业知识。

高级语言主要是相对于低级语言而言,它并不是特指某一种具体的语言,而是包括了很多编程语言,如流行的vb、vc、foxpro、delphi等,这些语言的语法、命令格式都各不相同。

高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行,按转换方式可将它们分为两类:解释类和编译类。

参考资料:计算机语言_百度百科

如何C语言与汇编混编

1.在C中内嵌汇编语句

在#pragma asm 与#pragma endasm 中加入要内嵌的汇编语句

例子:

#include reg52.h

void main()

{

P0^1=1;

#pragma asm

汇编延时程序

#pragma endasm

P0^1=0;

}

2.C程序调用汇编

(1)C文件格式

C程序调用汇编函数之前必须先用extern对函数加以声明

例子:

#includereg51.h

extern void DLY1s();

void main()

{

P2=0xff;

DLY1s();

P2=0;

}

(2)汇编文件格式

用NAME定义模块名,PUBLIC声明为公共函数,RESG为汇编函数起始标志

例子1:

;;************************************

;Delay time 1s

;;************************************

NAME DLY1s ;定义模块名

PUBLIC DLY1s ;声明为公共函数

SEG_DLY1s SEGMENT CODE ;在程序存储区中定义段

USING 1

RSEG SEG_DLY1s ;函数起始位置

;;————————–

DLY1s: SETB RS0

MOV R4,#04H

DLY100: MOV R3,#0FFH

DLY101: MOV R2,#0FFH

DLY102: NOP

NOP

DJNZ R2,DLY102

DJNZ R3,DLY101

DJNZ R4,DLY100

CLR RS0

RET

;;———————————–

END

例子2:

;;************************************

;Delay time 10ms

;;************************************

NAME DLY10ms

PUBLIC DLY10ms

SEG_DLY10ms SEGMENT CODE

USING 1

RSEG SEG_DLY10ms

;;————————–

DLY10ms: SETB RS0

MOV R3,#32H

DLY101: MOV R2,#31H

DLY102: NOP

NOP

DJNZ R2,DLY102

DJNZ R3,DLY101

CLR RS0

RET

;;———————————–

END

3.汇编调用C函数

(1)汇编文件格式

EXTRN CODE(function) ;声明所要调用的C函数

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN:MOV 30H,#5

MOV 31H,#6

CALL function ;调用C函数

MOV P2,32H

END

(2)C文件格式

#include reg51.h

#include absacc.h

void function()

{

DBYTE[0x32]=DBYTE[0x30]+DBYTE[0x31];

}

注:该方法简单且容易掌握,却有存储空间使用效率低的缺点,但在项目对存储空间需求较低的情况下,该方法是一个不错的选择。

4通过寄存器传递参数的混合调用

相互之间的调用必须满足上述C调汇编和汇编调C的规则

例子1 C调用汇编:

C文件:

#include reg51.h

unsigned int ADD1(unsigned int a,unsigned int b)

void main()

{

unsigned int c;

c=ADD1(100,100);

}

汇编文件:

NAME _ADD1

PUBLIC _ADD1

SEG_ADD1 SEGMENT CODE

USING 1

RSEG SEG_ADD1

_ADD1:

MOV A,R5

ADD A,R7

MOV R7,A

MOV A,R4

ADDC A,R6

MOV R6,A

RET

END

注:当通过寄存器传递参数时在汇编里定义函数要用“_函数名”来定义函数

例子2 汇编调用C:

汇编文件:

EXTRN CODE(_function) ;声明所要调用的C函数,通过寄存器则函数为_function

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN: MOV R7,#5 ;把所要传送的值放入响应寄存器单元

MOV R5,#6

CALL _function

MOV A,R7

END

C文件:

#include reg51.h

unsigned char function(unsigned char a,unsigned char b)

{

return(a+b);

}

关于c语言对应汇编语句和c语言与汇编的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年4月4日 02:37:14
下一篇 2024年4月4日 02:43:24

相关推荐

  • c语言改写模式,c语言实现修改功能

    c语言程序修改? 1、这个程序有4个错误,我都加粗了,第一个是m没有赋初值,第二个是while表达式中的ch=getchar()需要括号括起来,第三个是m=m*10+ch-0中的0也需要用单引号括起来,第四个是第2个while中为m!=0。 2、define容易造成误会,因为不符合一般的编程习惯,false 0, true 1;scanf放在你的那个地方是达…

    2024年5月23日
    3800
  • c语言控制代码的换码序列,c语言交换代码

    求C语言编程大神解答一下下面这个编程代码? k==5,用5去除125余0,所以r=125%5中r为0。由于!0为1,所以执行while循环体:先打印出5(k的值),再n=n/k==125/5=25;由于251则再打印出*号。这一循环结果输出是5*。 下面是我的代码,三个函数分别对应三个问题。 在实现基本要求的前提下,拓展了可以从键盘输入的功能,以下为各题代码…

    2024年5月23日
    5500
  • c语言扫描io脚状态,c语言端口扫描

    求51单片机的上升沿和下降沿C语言检测程序列子,端口就是普通IO口。 上升沿触发是当信号有上升沿时的开关动作,当电位由低变高而触发输出变化的就叫上升沿触发。也就是当测到的信号电位是从低到高也就是上升时就触发,叫做上升沿触发。 单片机怎么计算1s内下降沿的个数的C语言程序或者计算两个下降沿的时间(检测脉冲频率)计算1s内下降沿的个数方法是,一个定时器设置定时1…

    2024年5月23日
    4300
  • c语言mallloc使用的简单介绍

    C语言中使用malloc必须加#includemallo.h? 1、在C语言中使用malloc函数进行动态内存分配。malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void malloc(unsigned int num_bytes);功能:分配长度为num_bytes字节的内存块。 2、你可以看一下C语言那本…

    2024年5月23日
    4300
  • c语言三位小数,C语言三位小数

    怎样用C++语言输出精确到小数点后三位的数? 1、用C++语言输出精确到小数点后三位的数,可以参考下面给出的代码:coutsetiosflags(ios:fixed)setprecision(3)。其中 setiosflags中set是设置的意思。ios是iostream的缩写,即输入输出流。flags是标志的意思。 2、要精确到小数点后若干位,则数据类型为…

    2024年5月23日
    7200
  • c语言21点游戏,二十一点游戏代码c语言

    如何使用C语言编写简单小游戏? 1、数学知识:长方形的面积S=a*b 长方形周长L=2*(a+b)其中a b分别为长方形的宽和高。算法分析:长方形面积及周长均依赖于宽和高,所以先要输入宽高值,然后根据公式计算,输出结果即可。 2、/*也不知道你是什么级别的,我是一个新手,刚接触编程语言,以下是我自己变得一个小程序,在所有c语言的编译器(vc++0、turbo…

    2024年5月23日
    6300
  • c语言当中的null,C语言当中的符号

    C/C++中,NULL和null的区别是什么? nul 和 null要看编译器,不同的编译器有所区别。 所以C或者C++中都使用一个特殊定义NULL表示无效值,其本质就是未定义具体数据类型的0值。 null是是什么都没有的意思。在java中表示空对象。 本意是“空的;元素只有零的”意思。计算机中通常表示空值,无结果,或是空集合。\x0d\x0a在ASCII码…

    2024年5月23日
    4400
  • 包含c语言对txt文件命名的词条

    如何在C语言编程里面修改源文件名字 如果你是在WINDOWS的话,简单了,随便用个编辑器,比如记事本,然后写c源程序,保存到你想要保存的位置。如果你在DOS下,可以用edit,写好以后,按alt键,选择文件菜单,然后保存。 用open打开文件,注意操作模式使用“修改”或者“添加” 用write或者fprintf向文件中写入你的内容。 用close关闭文件。 …

    2024年5月23日
    4800
  • 学c语言编程,学c语言编程用什么软件

    编程开发必须要学C语言吗? 1、要学习。编程开发的学习内容主要包括c语言、python和c+语言。C语言作为一种简单灵活的高级编程语言,它是一个面向过程的语言,一般是作为计算机专业的基础入门语言课程。 2、C语言。对于刚接触编程的人来说,先学习C语言是非常重要的。C语言可以说是是计算机编程语言的鼻祖,其他的编程语言几乎全是由C语言变化衍生出来的。 3、不需要…

    2024年5月23日
    3400
  • c语言用string定义字符串,c语言中用string类型来处理字符串类型

    C++怎样定义定义字符串 1、第一是字符数组来表示字符串。用下面的语句声明:char a[10];C语言中字符数组与字符串的唯一区别是字符串末尾有一个结束符\0,而字符数组不需要。 2、在C中定义字符串有下列几种形式:字符串常量,char数组,char指针 字符串常量 即:位于一对双括号中的任何字符。双引号里的字符加上编译器自动提供的结束标志\0字符,作为 …

    2024年5月23日
    4200

发表回复

登录后才能评论



关注微信