C指针原理-AT&T汇编

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C指针原理-AT&T汇编相关的知识,希望对你有一定的参考价值。


.section .data
  myvalue:
     .byte 67,68,69,70,0
  mygs:
     .asciz "%c
"

.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指针原理-AT&T汇编的主要内容,如果未能解决你的问题,请参考以下文章

C指针原理-AT&T汇编

C指针原理-AT&T汇编

C指针原理-AT&T汇编

汇编(AT&T 32 位)scanf 问题

x86-64 汇编中的数组元素比较(AT&T 语法)

Linux 汇编语言开发指南 Intel 格式--AT&T 格式