栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C指针原理(4)-AT&T汇编

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C指针原理(4)-AT&T汇编


首先我们先用汇编编写一个helloworld,注意我们直接在汇编代码中调用C语言的printf函数将"hello,worldn" 输出在屏幕上。

.section .data

  output:

  .asciz "hello,worldn"  

.section .text

   .global  main

   main:

   push $output

   call printf

   addl $4,%esp

   push $0

   call exit

上述代码中,

push $output将参数入栈,以便printf调用,

然后调用printf,printf会在栈中取出它需要的参数

2)我们直接使用GCC编译后运行 

deepfuture@ubu-s:~$ gcc -o  test test.s

deepfuture@ubu-s:~$ ./test

hello,world

3)那么调用C库函数所需要的参数入栈的顺序是什么?

再看一个例子

.section .data

  myvalue:

     .byte 67,68,69,70,0

  mygs:

     .asciz "%sn"

.section .text

.globl main

   main:

    movl $myvalue,%ecx

    push %ecx

    push $mygs    

    call printf

    push $0

    call exit

67,68,69,70是C、D、E、F的ASCII码,0是字符串终结符

 这段代码的功能是输出“CEDF”,相当于下面的C代码

#include

int main( void )

{

     char myvalue[]={67,68,69,70,0};

     printf( "%sn" ,myvalue);

     return 0;

}

其中,后面的0表示字符串的终结符。

第一个参数最后一个入栈,按调用的相反顺序入栈

©著作权归作者所有:来自51CTO博客作者myhaspl的原创作品,如需转载,请注明出处,否则将追究法律责任


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/232724.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号