汇编文件大写.S后缀和小写.s后缀的区别

首先两者都是汇编源程序,
大写的.S文件只是多了一个预处理功能,所以写关于硬件的汇编使用大写.S 。
小写的.s文件,在后期阶段不会再进行预处理操作了,所以我们不能在其内写上预处理语句。

比如在u-boot源码的u-boot/u-boot-v2020.10/arch/riscv/cpu目录下对应的start.S文件大量使用预处理指令,如下所示:

其次我们可以在GCC编译器下使用gcc命令测试一下。gcc与g++分别是GNU的c & c++ 编译器 gcc/g++ 在执行编译工作的时候,总共需要4步:

1、预处理,生成 .i 的文件[预处理器cpp]
2、将预处理后的文件转换成汇编语言, 生成文件 .s [编译器egcs]
3、有汇编变为目标代码(机器代码)生成 .o 的文件[汇编器as]
4、连接目标代码, 生成可执行程序 [链接器ld]

编译器的核心任务是把C程序翻译成机器的汇编语言(assembly language)。汇编语言是人类可以阅读的编程语言,也是相当接近实际机器码的语言。由此导致每种 CPU 架构都有不同的汇编语言。
实际上,GCC 是一个适合多种 CPU 架构的编译器,不会把C程序语句直接翻译成目标机器的汇编语言,而是在输入语言和输出汇编语言之间,利用一个中间语言,称为 RegisterTransfer Language(简称 RTL,寄存器传输语言)。借助于这个抽象层,在任何背景下,编译器可以选择最经济的方式对给定的操作编码。而且,在交互文件中针对目标机器的抽象描述,为编译器重新定向到新架构提供了一个结构化的方式。但是,从 GCC 用户角度来看,我们可以忽略这个中间步骤。

通常情况下,GCC 把汇编语言输出存储到临时文件中,并且在汇编器执行完后立刻删除它们。但是可以使用-S选项让编译程序在生成汇编语言输出之后立刻停止

如果没有指定输出文件名,那么采用-S选项的 GCC 编译过程会为每个被编译的输入文件生成以.s作为后缀的汇编语言文件。如下例所示:

TieTouXiaoGe@tst-vps:~/demo$ gcc -S demo.c
TieTouXiaoGe@tst-vps:~/demo$ ls
demo.c  demo.s
TieTouXiaoGe@tst-vps:~/demo$ cat demo.s.file   "demo.c".text.section        .rodata
.LC0:.string "successful...".text.globl  main.type   main, @function
main:
.LFB0:.cfi_startprocpushq   %rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq    %rsp, %rbp.cfi_def_cfa_register 6subq    $16, %rspmovl    $0, -4(%rbp)jmp     .L2
.L3:leaq    .LC0(%rip), %rdicall    puts@PLTaddl    $1, -4(%rbp)
.L2:cmpl    $2, -4(%rbp)jle     .L3nopleave.cfi_def_cfa 7, 8ret.cfi_endproc
.LFE0:.size   main, .-main.ident  "GCC: (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0".section        .note.GNU-stack,"",@progbits
TieTouXiaoGe@tst-vps:~/demo$

可以在往后拓展一下,执行汇编链接步骤再执行可执行程序看看结果:

TieTouXiaoGe@tst-vps:~/demo$ as demo.s -o demo.o
TieTouXiaoGe@tst-vps:~/demo$ ls
demo.c  demo.o  demo.s
TieTouXiaoGe@tst-vps:~/demo$ gcc demo.o -o demo
TieTouXiaoGe@tst-vps:~/demo$ ls
demo  demo.c  demo.o  demo.s
TieTouXiaoGe@tst-vps:~/demo$ ./demo
successful...
successful...
successful...
TieTouXiaoGe@tst-vps:~/demo$

谢谢。

汇编文件大写.S后缀和小写.s后缀的区别相关推荐

  1. c语言gcc汇编文件,[汇编]gcc生成汇编.s文件 $ gcc -Og -S sum.c /$ gcc -Og -S -masm=intel sum.c 与 反汇编 objdump...

    目录 - C语言源码文件:sum.c - gcc 生成的汇编语言文件 sum.s x86-64 AT&T 语法格式 x86-64 Intel格式 - 反汇编 objdump 3.1 输出 AT ...

  2. 7-9 把字符串中的大写字母改成小写字母 (10分)

    把字符串中的大写字母改成小写字母,其他字符不变. 输入格式: 输入一个长度不超过20的包含大小写母和数字的字符串. 输出格式: 输出大写字母改成小写字母后的字符串. 输入样例: 在这里给出一组输入.例 ...

  3. c语言中大写字母A转小写,C语言 | 大写字母A转换为小写a

    C语言 | 大写字母A转换为小写a "要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人-万中无一" --包租婆这道理放在C语言学习上也一并受用.在编程方面有着天赋异禀的 ...

  4. vue中通过自定义指令将汉字转化为首字母大写、首字母小写、大写、小写的拼音

    使用情景: 在文本框中输入内容,例如姓名 在页面中将姓名转化为姓名的拼音,包括大写拼音.小写拼音.首字母大写拼音.大写拼音缩写.小写拼音缩写 新建一个 pinyin.js 文件 这是一串又臭又长的un ...

  5. C语言实现大写字母A转换为小写a

    例3:C语言实现将大写字母A,输出为小写字母a 解题思路:字符数据以ASCII码存储在内存的,形式与整数的存储形式相同,所以字符型数据和其他算术型数据之间可以互相赋值和运算. 比如A在ASCII码表的 ...

  6. 【C语言】大写字母A转小写字母a

    C语言之大写字母A转小写字母a 字符数据以ASCII码存储在内存的,形式与整数的存储形式相同, 所以字符型数据和其他算术型数据之间可以互相赋值和运算. #include<stdio.h> ...

  7. GCC -S 选项 (生成汇编文件)

    GCC -S 选项 (生成汇编文件) 编译器的核心任务是把 C 程序翻译成机器的汇编语言 (assembly language).汇编语言是人类可以阅读的编程语言,也是相当接近实际机器码的语言.由此导 ...

  8. 让Keil生成汇编文件、bin文件

    // 生成汇编文件: $K\ARM\ARMCC\bin\fromelf.exe --text -a -c --output=@L_asm.txt "!L" // 生成bin文件: ...

  9. ARM汇编文件的组成和汇编指令类型

    ARM汇编文件的组成 指令:编译完成后作为一条指令(机器码)存储在内存单元中,CPU执行时能够完成处理的操作 伪指令:在编译时替换成能被识别的ARM指令 伪操作:知道编译器进行编译,编译完成后不生成指 ...

最新文章

  1. C# Note34: 异常机制相关小点
  2. java 面试题之银行业务系统
  3. centos7安装配置ELK(Elasticsearch+Logstash+Kibana)
  4. Scrapy练习——爬取京东商城商品信息
  5. 7 SD配置-企业结构-定义-定义信贷控制范围
  6. element 输入框怎么加单位_抖音上的人声配音怎么制作?
  7. Linux查找历史命令
  8. 在线十六进制颜色随机生成器
  9. STM32_I2SSAI
  10. matlab norm函数使用_「matlabnorm」matlab中norm函数的用法 - 金橙教程网
  11. matlab freqz-m,Matlab函数freqs和freqz
  12. 基于大数据的数据仓库-数据仓库的概念
  13. 如何把两个视频拼在一个画面上?这样制作“画中画”
  14. jee6 学习笔记 5 - Struggling with JSF2 binding GET params
  15. Java面试宝典2017版
  16. STM32 TIM1PWM波输出
  17. 独家!天才少年 Vitalik:“中国开发者应多关注以太坊!”
  18. react核心精讲视频与实战教程
  19. DirectX的设置
  20. 第四届橙瓜网络文学奖二次元分类目前评分前四名竟然脑洞这么大?

热门文章

  1. 南阳题目364-田忌赛马
  2. X-Powered-by
  3. 377. 组合总和 Ⅳ
  4. 5点聊透技术领导力本质
  5. python模拟蚂蚁森林能量产生过程代码_用Python实现定时自动化收取蚂蚁森林能量,再也不用担心忘记收取了...
  6. ios和Android端ijkplayer集成及使用
  7. OpenCV2:imread 和 imwrite
  8. 【手绘漫画】图解LeetCode之两两交换链表中的节点(LeetCode 24)
  9. pyqt 使用问题总结
  10. Android性能优化之图片压缩综合解决方案