为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
C++

.section .data

  myvalue:

     .byte 67,68,69,70,0

  mygs:

     .asciz "%c\n"

.section .text

.globl main

   main:

    #基地址(偏移地址[必须为寄存器],数据元素变址,数据元素长度[必须为寄存器],)

    #基地址+偏移地址+数据元素变址*数据元素长度

    movl $2,%ecx

    movl myvalue(,%ecx,1),%ebx #将myvalue的变址为2,长度为1的数据值移到ebx中

    push %ebx

    push $mygs    

    call printf

    push $0

    call exit

这段代码将输出ASCII码为69的字符“E”

有2种方式,能以变址和基址结构的方式访问内存

1)基地址(偏移地址[必须为寄存器],数据元素变址,数据元素长度[必须为寄存器],)

2)基地址+偏移地址+数据元素变址*数据元素长度

上面代码采用了第1种方式:

movl $2,%ecx

movl myvalue(,%ecx,1),%ebx

myvalue这个变量的内容是:67,68,69,70,0

%ecx寄存器的值是数据元素变址,是2,数据元素长度是1

67所在内存地址加上变址2,就是myvalue的以1个字节为单位组成的5个元素中,第3个元素的位置

movl myvalue(,%ecx,1),%ebx 将第3个元素E的ASCII码放在ebx寄存器中,然后入栈,做为printf的参数

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


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消