码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-11-24 19:50:43      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:pre   数据   .text   ext   printf   结构   汇编   push   偏移地址   

.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的参数

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

标签:pre   数据   .text   ext   printf   结构   汇编   push   偏移地址   

原文地址:http://blog.51cto.com/13959448/2321380

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!