C指针原理(5)

[plain]  view plain copy print ?
  1. .section .data  
  2.   myvalue:  
  3.      .byte 67,68,69,70,0  
  4.   mygs:  
  5.      .asciz "%c\n"  
  6.      
  7. .section .text  
  8. .globl main  
  9.    main:  
  10.     #基地址(偏移地址[必须为寄存器],数据元素变址,数据元素长度[必须为寄存器],)  
  11.     #基地址+偏移地址+数据元素变址*数据元素长度  
  12.     movl $2,%ecx  
  13.     movl myvalue(,%ecx,1),%ebx #将myvalue的变址为2,长度为1的数据值移到ebx中  
  14.     push %ebx  
  15.     push $mygs      
  16.     call printf  
  17.     push $0  
  18.     call exit  
  19.          
  20.       
  21.       

这段代码将输出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的参数

转自:http://blog.csdn.net/myhaspl/article/details/14140445

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值