xorl %eax, %eax

2023-11-11

这是GNU的汇编
xorl    %eax, %eax(这句起什么作用)
按位异或,相同的位置为0,不同的位置为1,eax和eax的每一位都相同,所以相当于清零。
        movl    8(%ebp), %ecx
        testl   %ecx, %ecx(这句起什么作用)
    jle     .L3
8(%ebp)是第一个参数,检验它的值,若小于等于0则转

其它的,看看GNU汇编的语法吧。


在汇编代码中经常看到  

[plain]  view plain copy
  1. xorl %edx, %edx  

        这个指令可以将寄存器 %edx 设置为 0,运用了对任意x,x^x = 0 这一属性。将寄存器 %edx 设置为 0 的更直接的方法是用指令 movl $0, %edx。使用 objdump 对比发现使用 xorl 的版本只需要 2 个字节,而是用 movl 的版本需要 5 个字节。



TEST 指令是进行与运算 不保留结果 
JL  指令是有符号当选条件转移指令  含义是小于/不大于(A>B) 转移   
其标志位 是SF≠OF AND ZF=0转移
sunshine  
      [第6楼]   [ 回复时间:2007-11-14 09:39 ]   [引用]   [回复]   [ top ]
荣誉值:106 
信誉值:0 
注册日期:2007-06-26 15:10
JL  指令是有符号当选条件转移指令  含义是小于/不大于转移    
其标志位 是SF≠OF AND ZF=0转移
nekaxi  
      [第7楼]   [ 回复时间:2007-11-14 18:39 ]   [引用]   [回复]   [ top ]
荣誉值:9 
信誉值:6 
注册日期:2007-10-10 08:31
test    ebx, ebx  
jl      short 0044ABC5 ----------->摘自反汇编代码,使用应该不会有错吧? 

test    ebx, ebx一般用来判断EBX是否为0,所以上面的用法的确令人费解!!!!
cxn  
      [第8楼]   [ 回复时间:2007-11-14 22:33 ]   [引用]   [回复]   [ top ]
荣誉值:179 
信誉值:6 
注册日期:2007-07-09 19:18
这个是汇编的技巧,刚开始也很费解呵呵. 
TEST影响 C,O,P,Z,S  而JL根据 SF≠OF AND ZF=0跳转 
要想跳转至少ebx中的数不能为0 (为0了ZF就该为1了) 
而OF位没有溢出所以始终为0 所以只能是SF为 1 才跳转 
所以 条件满足SF=1 OF=0 ZF=0时也就是当ebx中的数为负数时才跳转. 
也就是如果ebx中的数为负跳到0044ABC5 

同上指令还可以写为  
AND EBX,EBX 
JL SHORT 0044ABC5 
或 
OR EBX,EBX 
JL SHORT 0044ABC5 
这两条是不是更令人费解?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

xorl %eax, %eax 的相关文章

  • 13 51单片机汇编:用Keil C51模拟器进行IO输入并打印输入结果[系列教程之13]

    51单片机汇编 用Keil C51模拟器进行IO输入并打印输入结果 系列教程之13 该系列主仓库地址 https gitee com langcai1943 8051 from boot to application 本工程地址 https
  • 汇编王爽老师实验12,显示0号除法溢出中断

    整个程序不能脱离dosbox 在dosbox中触发中断 本程序的思路是 先编写0号中断子程序 在主程序中运用传送方法把中断子程序传送至内存段 1设置传送的起点2设置传送的终点3设置传送的代码段长度4设置传送的方向5rep 启动传送6修正中断
  • 使用Clang作为编译器 —— Assembling a Complete Toolchain

    装配一个完整的工具链 1 介绍 2 工具 2 1 Clang 前端 2 2 其他语言的语言前端 2 3 汇编器 2 4 链接器 3 运行时库 3 1 编译器运行时 Compiler runtime 3 2 原子库 Atomics libra
  • 上帝模式下的shellcode

    github https github com Wker666 讲解视频 https www bilibili com video BV1oY411E7hX p 1 share medium iphone share plat ios sh
  • LCD 驱动

    LCD的型号是 CM162 4 有U1 U2 外形尺寸 L W H mm 80 36 12 点数 mm 5 8 内藏控制器 SPLC 780 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 GND VDD VO
  • C语言 cortex-A7核 点LED灯 (附 汇编实现、使用C语言 循环实现、使用C语言 封装函数实现【重要、常用】)

    1 汇编实现 text global start start LED1点灯 gt PE10 RCC章节初始化 CC INIT 1 使能GPIOE组控制器 通过RCC MP AHB4ENSETR寄存器设置GPIOE组使能0x50000A28
  • 利用DOSBox运行汇编超详细步骤

    最近学校要求用汇编写课设 本来复习的好好的 结果笔试取消 无奈只有配置环境自己写课设了 起初是利用VS2017进行配置 但后面运行好像有些问题 就想到用DOSBox了 以下是详细步骤 第一步 下载好相关文件 文件我放在下面链接里 资源文件
  • 探讨STOS指令

    转载在http hi baidu com darks00n blog item 4c019ec42ad0cdcad00060b1 html 下面是一段win32 console程序 Debug版 的反汇编代码 很程式化的东西 本文不讨论这段
  • 汇编语法

    1 通用寄存器 EAX EBX ECX EDX ESI EDI ESP EBP 它 们 的低 16 位就是 8086 的 AX BX CX DX SI DI SP BP 它们的含义如下 EAX 累加器 EBX 基址寄存器 Base ECX
  • linux汇编编译器:GAS和NASM的比较

    GAS即GNU AS汇编编译器 其属于AT T风格 我们常用的GNU的产品还有GCC G NASM是Linux平台下常用的汇编编译器 是intel风格的汇编编译器 MASM是Windows平台下的汇编编译器 也使用Intel风格 我们学80
  • 汇编符号语言

    CSDN话题挑战赛第1期 活动详情地址 第1期话题PK赛 参赛话题 汇编知识分享 话题描述 我们的计算机知识就像一座金字塔 底层是数学 上面是数字电路 然后是汇编 再往上是操作系统 网络 数据库 高级编程语言 框架等等 我们不可能精通这个金
  • ARM中的程序状态寄存器(CPSR)

    31 30 29 28 27 8 7 6 5 4 3 2 1 0 N Z C V 保留 I F T M4 M3 M2 M1 M0 N Negative Less Than I IRQ disable Z Zero F FIQ disable
  • libtool的作用及应用

    gcc library makefile archive command object 注意 本文为转载 原文也是转载 但是为了尊重他人得劳动成果 我将将转载网址贴出来 libtool常见于autoconf automake 单独用的例子很
  • 汇编语言+IDA安装问题解决汇总

    利用汇编语言计算机和人类链接更为便捷如下图所示 寄存器 简单讲就是CPU可以存储数据的器件 一个CPU可以有多个寄存器 AX BX是两个不同的寄存器 16位处理器有14个寄存器 AX BX CX DX SI DI SP BP IP CS S
  • 汇编语言(王爽第三版) 实验5编写、调试具体多个段的程序

    参考 http blog sina com cn s blog 171daf8e00102xclx html 汇编语言实验答案 王爽 https wenku baidu com view a1cd7c6c1fb91a37f111f18583
  • [培训-DSP快速入门-8]:C54x DSP汇编语言之寻址方式

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 119023151 目录 第1章
  • Windows游戏加速外挂-变速齿轮 学习笔记-【第一篇】

    找到两篇文章 是比较流行的方法 接下来记录一下收获 第一篇文章 变速齿轮 研究手记 转自 http www newasp net tech 58262 html 注意 如果你看了本文 对我们这个软件有兴趣 请到我们的主页www vrbrot
  • 8086乘法指令MUL,IMUL

    对于加减指令来说CPU对有符号加减和无符号加减一视同仁 根据我们需要把它作为有符号的结果还是无符号的结果 但是乘除法指令区分有符号乘除和无符号乘除指令 无符号数乘法指令MUL MULtiply MUL OPRD OPRD可以用除立即数以外的
  • 程序员的自我修养——链接、装载与库

    1 温故而知新 操作系统概念 北桥 连接高速芯片 系统调用接口 以软件中断的方式提供 如Linux使用0x80号中断作为系统调用接口 多任务系统 进程隔离 设备驱动 直接使用物理内存的弊端 地址空间不隔离 内存使用效率低 程序运行的地址不确
  • [原创]C++98升级到C++20的复习旅途-从汇编及逆向角度去分析“constexpr“关键字

    简介 常用网名 猪头三 出生日期 1981 XX XX QQ 643439947 个人网站 80x86汇编小站 https www x86asm org 编程生涯 2001年 至今 共22年 职业生涯 20年 开发语言 C C 80x86A

随机推荐

  • 【探索AI潜能,连结现代通讯】相隔万里,我们与AI一同赏月。

    1 写在前面 近年来 AI得到了迅猛的发展 尤其是大模型的出现受到了广泛的关注和讨论 ChatGPT 文心一言等纷纷登场 可谓是百家争鸣 而AI大模型所延申出的子项目如AI绘画 AI写作等 在各自的领域展示出了惊人的潜力 最圆的月亮在中秋
  • Winform项目之学生成绩管理系统设计与实现(三)

    1 班级管理 private ClassService classService new ClassService public ListClassForm InitializeComponent this dgvListClass Row
  • 排序算法——交换排序(快排*)和归并排序

    上篇文章介绍了插入排序和选择排序 详见https mp csdn net postedit 97524495 3交换排序 所谓交换 就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置 交换排序的特点是 将键值较大的记 录向序
  • Qt线程---链接信号与槽的connect

    connect用于连接qt的信号和槽 在qt编程过程中不可或缺 它其实有五个参数 只是一般使用默认值 在满足某些特殊需求的时候可能需要手动设置 1 Qt AutoConnection 默认值 使用这个值则连接类型会在信号发送时决定 如果接收
  • 用VUE实现登录页

    代码展示 1 头部实现
  • 动态、静态链接库的使用和讲解

    目录 一 静态库 静态库链接案例 二 动态库 动态库链接案例 三 两者的对比 大家有没有想过为什么要用链接库 其实使用链接库是为了你所在的公司以及你个人的方便 比如 实现资源共享 便于维护和升级 比较安全 一 静态库 1 静态库的命名格式
  • Unity XR 教程专栏引导

    下面对我出过的 Unity XR 开发教程做个分类 XR Interaction Toolkit 系列教程 该专栏介绍了用 OpenXR XR Interaction Toolkit 开发的基础用法 学习后能够对 XR 开发中的手部动画 移
  • WebStorm 2018 最新激活码 license server

    最新的激活码 可以用的 还是热的 将地址 http active chinapyg com 或者 http idea toocruel net 任意一个复制到License Server中
  • eclipse运行程序时只有run on server

    最近写jsp的程序比较多 写java程序时 发现一点击运行按钮就开始启动服务器了 这是因为没有写主函数的原因 注意这个问题
  • Django基础 one

    一 DRF视图 1 Django REST framework是一个建立在Django上的Web开发框架 可以快速开发REST API接口 2 它提供了序列化器Serialzier ModelSerializer 的定义 可以帮助我们简化序
  • mongodb教程_MongoDB教程

    mongodb教程 Welcome to the MongoDB tutorial index post MongoDB is one of the most widely used NoSQL database 欢迎使用MongoDB教程
  • 终于搞定了部分网站无法打开的问题

    最近机器出现一个烦人的问题 有些网站无法打开 最初以为是实验室网络的问题 后来发现别人的机器能打开 于是开始折腾自己的机器了 hosts文件没有异常 关掉杀毒软件 防火墙 症状依旧 在浏览器地址栏中敲入url回车之后 浏览器很快报错无法访问
  • 使用过滤器,格式化超过1万和1千的数字,保留一位小数

    filters handleCount count if count gt 10000 count count count 1000 10000 W else if count gt 1000 count count count 100 1
  • 如何查找出Linux使用的shell版本号

    一 找出正在使用的shell类别 有很多种方法可以找出目前正在使用的shell类别 最简单的方法是使用特殊的shell参数 1 通过特殊的shell参数 可以查找出正在运行的shell的PID 参数是只读的不能修改 下面的指令也可以显示正在
  • uni-app image懒加载

    1 uni app官方给的文档注意看 lazy load Boolean false 图片懒加载 只针对page与scroll view下的image有效 微信小程序 百度小程序 字节跳动小程序 飞书小程序 只针对page与scroll v
  • windows 安装 Linux 子系统教程 (wsl)

    目录 背景 安装 wsl 安装 php 背景 因为日常工作中有一些场景需要使用 Linux 环境 并且有时候需要写一些自动化脚本来方便提效 而 wsl 具备安装便捷 占用轻量 使用便捷的特性 所以 wsl 无疑是最好的选择 安装 wsl 使
  • cmake 返回当前路径的上层路径 string(REGEX REPLACE...)

    返回当前路径的上层路径 先上实现代码 string REGEX REPLACE learn basic 1 PROJECT INIT PATH PROJECT SOURCE DIR 说明 CMakeLists txt 所在路径 可由cmak
  • 3、Jupyter Notebook,Matplotlib的使用

    目录 1 Jupyter Notebook使用 1 1 界面启动 创建文件 1 1 1 界面启动 1 1 2 新建notebook文档 2 Matplotlib使用 2 1 实现一个简单的Matplotlib画图 2 2 Matplotli
  • USB OTG的工作原理

    USB OTG的工作原理 OTG补充规范对USB 2 0的最重要的扩展是其更具节能性的电源管理和允许设备以主机和外设两种形式工作 OTG有两种设备类型 两用OTG设备 Dualrole device 和外设式OTG设备 Peripheral
  • xorl %eax, %eax

    这是GNU的汇编 xorl eax eax 这句起什么作用 按位异或 相同的位置为0 不同的位置为1 eax和eax的每一位都相同 所以相当于清零 movl 8 ebp ecx testl ecx ecx 这句起什么作用 jle L3 8