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

来源:互联网 发布:股票基本面软件 编辑:程序博客网 时间:2024/06/05 03:40
.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的参数


本博客所有内容是原创,如果转载请注明来源

http://blog.csdn.net/myhaspl/




原创粉丝点击