用自己的语言解释一段简单的汇编

简介: .section .data values:    .int 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60 .section .text .globl _start _start:    nop                        ##空格  ,固定格式 为了gdb调试            movl values, %eax

.section .data

values:

   .int 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60

.section .text

.globl _start

_start:

   nop                        ##空格  ,固定格式 为了gdb调试        

   movl values, %eax          ## eax=values[0]=10

   movl $values, %edi         ## $values 内存地址存放到edi

   movl $100, 4(%edi)         ## 十进制立即数100到edi地址4字节之后

   movl $1, %edi              ## 十进制1到edi

   movl values(, %edi, 4), %ebx  ## 将values标签第2个的4字节到ebx

   movl $1, %eax                 ## 立即数1到eax

   int $0x80                     ##退出

 

 可以看出  本段程序最后的ebx值为100

 .int 32位     一个数据元素占 4个字节=内存一个单元

 分析:

movl values, %eax    标签values(也就是values数组中的值)到寄存器eax;

movl $values, %edi   标签values地址(数值10 的地址)到edi;也就是edi有了values数组中的地址

movl $100, 4(%edi)   edi寄存器地址后4个字节,也就是第二个元素15被100替代

movl $1, %edi        重新赋值edi=1累加器

movl values(, %edi, 4), %ebx   在标签values也就是values数组找到下标为1的4个字节的数值,实际就是100赋值到ebx

 

目录
相关文章
|
11天前
|
程序员 编译器
计算机语言分为三种:机器语言、汇编语言和高级语言
计算机语言分为三种:机器语言、汇编语言和高级语言
|
11月前
|
Java 编译器 程序员
机器语言,汇编语言,高级语言,c,java语言编译到运行过程
机器语言,汇编语言,高级语言,c,java语言编译到运行过程
|
自然语言处理 算法 编译器
C--语言的词法文法语法语义分析及MIPS汇编生成
C--语言的词法文法语法语义分析及MIPS汇编生成
216 0
C--语言的词法文法语法语义分析及MIPS汇编生成
|
Windows 程序员 C语言
|
5天前
|
存储 C++
C/C++中的整数除法运算与汇编指令DIV和IDIV
C/C++中的整数除法运算与汇编指令DIV和IDIV
15 1
|
5天前
|
存储 安全 程序员
C/C++中的整数乘法运算与汇编指令MUL和IMUL
C/C++中的整数乘法运算与汇编指令MUL和IMUL
11 0
|
5天前
|
编译器 C++
C/C++中的逻辑运算与汇编指令的交互
C/C++中的逻辑运算与汇编指令的交互
8 0
|
5天前
|
编译器 程序员 C++
C/C++逻辑与运算与汇编指令的关系
C/C++逻辑与运算与汇编指令的关系
10 0
|
5天前
|
程序员
汇编语言中的带符号比较跳转指令
汇编语言中的带符号比较跳转指令
12 0
|
5天前
|
程序员
深入理解汇编:平栈、CALL和RET指令详解
深入理解汇编:平栈、CALL和RET指令详解
11 1