• 《汇编语言》-- 控制执行流程


    参考文献:

     《汇编语言程序设计》

    ............................................................................................................................................................................................... 

     控制执行流程学习,程序中遇到无条件分支时,指令指针自动跳转到另一个位置,可以使用无条件分支的有三种:

      跳转,调用,中断

      每一种无条件分支在程序中的行为都不同,可以决定在程序逻辑中使用哪一种,下面看一下这几种之间的区别,以及在汇编语言程序中实现它们

    一. 跳转

      跳转是汇编语言程序设计中最基本的分支类型,类似于高级语言中的GOTO语句,但是使用goto会被认为是不良的编码,但是在汇编在不会这么认为。

      实际上单一汇编跳转指令被汇编为跳转操作码的3种不同类型之一:

      短跳转,近跳转,远跳转

      这三种跳转类型由当前指令的内存位置和目的点的内存位置之间的距离决定的。依据跳过的字节数决定使用那种跳转类型

    举个栗子:

      

     1 .section .text
     2 .globl _start
     3 _start:
     4     nop
     5     movl $1, %eax
     6     jmp overhere
     7     movl $10, %ebx
     8     int $0x80
     9 overhere:
    10     movl $20, %ebx
    11     int $0x80

    执行程序:echo $?
    结果:20

     1 objdump -D jmptest
     2 
     3 jmptest:     文件格式 elf64-x86-64
     4 
     5 
     6 Disassembly of section .text:
     7 
     8 0000000000400078 <_start>:
     9   400078:    90                       nop
    10   400079:    b8 01 00 00 00           mov    $0x1,%eax
    11   40007e:    eb 07                    jmp    400087 <overhere>
    12   400080:    bb 0a 00 00 00           mov    $0xa,%ebx
    13   400085:    cd 80                    int    $0x80
    14 
    15 0000000000400087 <overhere>:
    16   400087:    bb 14 00 00 00           mov    $0x14,%ebx
    17   40008c:    cd 80                    int    $0x80
  • 相关阅读:
    在vim中设置将tab自动转化为4个空格
    nginx1.4.6+php5.5.11+mysql5.6.17+mecache+opcache
    Centos7安装杀毒软件ClamAV
    网页中meta标记
    js刷新页面方法大全
    微信第三方登陆,无需注册一键登录,获取用户信息,PHP实现方法
    phpcms v9 如何实现用户登录
    web页面自适应手机屏幕宽度
    微信公共平台消息回复类
    自动回复微信消息
  • 原文地址:https://www.cnblogs.com/mysky007/p/11111780.html
Copyright © 2020-2023  润新知