Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在使用DIV指令之前,为什么EDX应该为0?

在使用DIV指令之前,为什么EDX应该为0?
EN

Stack Overflow用户
提问于 2016-07-16 23:36:34
回答 2查看 9.8K关注 0票数 6

我注意到EDX包含一些随机的默认值,比如00401000,然后我使用这样的DIV指令:

代码语言:javascript
运行
AI代码解释
复制
mov eax,10
mov ebx,5
div ebx

它会导致整数溢出错误。但是,如果我将edx设置为0,并执行相同的操作,则可以正常工作。我相信使用div会导致商覆盖eax,其余的覆盖edx

得到这个整数溢出错误真的让我很困惑。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-17 00:36:27

做什么?

对于32位/32位=> 32位除法:零或符号-将32位被除数从EAX扩展到64位EDX:EAX。

对于16位,使用cwd或xor零位将AX转换为DX:AX。

  • 未签名:依次为XOR EDX,EDX、、CDQ和unsigned

另请参阅When and why do we sign extend and use cdq with mul/div?

为什么(TL;DR)

对于DIV,寄存器EDXEAX形成一个64位值(通常显示为EDX:EAX),然后除以EBX

因此,如果EAX = 10或十六进制A,而EDX是,比如说20或十六进制14,那么它们一起构成了64位值十六进制14 0000 000A或十进制85899345930。如果除以5,则结果为17179869186或十六进制

4 0000 0002是一个不适合32位的值。

这就是为什么你会得到一个整数溢出。

但是,如果EDX仅为1,则可以将十六进制1 0000 000A除以5,结果是十六进制

3333 3335。这不是您想要的值,但它不会导致整数溢出。

要真正将32位寄存器EAX除以另一个32位寄存器,请注意由EDX:EAX形成的64位值的顶部是0

因此,在对单个分区进行之前,通常应该将EDX设置为0

(或者对于签署的部门,cdqidiv之前签署extend EAX into EDX:EAX )

但是EDX不一定要总是0。它可能不会那么大,结果会导致溢出。

我的BigInteger代码中的一个示例:

DIV相除后,商为EAX,余数为EDX。要将BigInteger之类的东西(由许多DWORDS组成的数组)除以10 (例如,将值转换为十进制字符串),可以执行类似以下操作:

代码语言:javascript
运行
AI代码解释
复制
    ; ECX contains number of "limbs" (DWORDs) to divide by 10
    XOR     EDX,EDX      ; before start of loop, set EDX to 0
    MOV     EBX,10
    LEA     ESI,[EDI + 4*ECX - 4] ; now points to top element of array
@DivLoop:
    MOV     EAX,[ESI]
    DIV     EBX          ; divide EDX:EAX by EBX. After that,
                         ; quotient in EAX, remainder in EDX
    MOV     [ESI],EAX
    SUB     ESI,4        ; remainder in EDX is re-used as top DWORD... 
    DEC     ECX          ; ... for the next iteration, and is NOT set to 0.
    JNE     @DivLoop

在该循环之后,整个数组(即BigInteger)表示的值除以10EDX包含除法的剩余部分。

另外,在我使用的汇编程序(Delphi的内置汇编程序)中,以@开头的标签对于函数来说是本地的,即它们不会干扰其他函数中同名的标签。

票数 15
EN

Stack Overflow用户

发布于 2016-07-16 23:39:55

DIV指令将EDX:EAX除以DIV指令后面的r/m32。因此,如果您未能将EDX设置为零,则您正在使用的值将变得非常大。

信任是有帮助的

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38416593

复制
相关文章
Python 实战(1):在网页上显示信息
上次简单介绍了 web.py。今天先来粗略解释下那个 hello world 页面的代码: import web 导入 web.py 模块。 urls = ( '/', 'index' ) 这是指定网站 url 的匹配规则,左边是正则表达式,右边是对应处理函数的名称。 class index: def GET(self): return "Hello, world!" 这便是处理请求的函数 index。GET 和 POST 是 HTTP 的两种请求方式,一般来说,GET 用于请求网
Crossin先生
2018/04/16
1.7K0
在3D游戏中显示网页
在游戏中显示网页? 为什么要这么做呢? 其实可以做不少的应用: 嵌入帮助文档, 比如技能介绍, 可以做得很漂亮, 各种排版方式用传统UI做起来很费劲 活动公告页面直接在游戏中查看 游戏内的BBS/社区
逍遥剑客
2018/05/21
6960
直接iframe方式在网页上显示天气插件
天气预报调用网址(可定制):http://www.tianqi.com/plugin/
科控物联
2023/09/22
1.5K0
直接iframe方式在网页上显示天气插件
Chrome、FF在swf处理中的问题小记
当时的需求是点击网页装扮的时候会弹出一个层,层内有很多TAB选项卡,而有一个对图片处理的swf(让用户选择一张图片、编辑图片)放在其中一个选项卡中,而当来回切换tab选项卡的时候,swf会被重新加载。那时候还没有chrome,所以在ff会遇到这个问题,IE下不会。后面在小组内我记得有总结过FF下什么情况下会触发swf的重新渲染:
meteoric
2018/11/16
1.7K0
将jpeg图片显示在framebuffer上
点击(此处)折叠或打开 /************************************************** * example5.c * Author: T-bagwell * * Compile:gcc -Wall example5.c -o example5 *************************************************/ #include <stdio.h> #inclu
用户3765803
2019/03/05
1.4K0
【JavaScript小项目】在网页上显示选择的图片
思路分析 选用<input type="file">原生组件,实现该组件美化。 选用<img src="file">实现图片预览。 代码实现 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>图片预览</title> <script src="js/test.js"> function upload(file) { cons
efonfighting
2020/02/13
1.2K0
Swf Decrypt详解
攻击在持续,攻击的技术在演进。防御者需要持续的跟进研究和投入。最近Flash 0day频繁出现,将我们更多的目光集中到flash上。 Flash作为脚本语言,可以编译,不少的恶意flash文件通过各种加密、混淆、动态解密来对抗人工分析和引擎检测。通过动态执行,常见的动态解密的swf都可以解决。 不过遇到很多条件判断、环境依赖的限制,往往又无法稳定dump出解密的swf文件和关键的数据(shellcode)。如果能在静态的方法对混淆、加密的swf文件直接进行反混淆、反编译,则将能有效提升检测效果。 市面上
FB客服
2018/02/06
2.3K0
Swf Decrypt详解
在web网页上打开电脑本地exe应用
2、在 HKEY_CLASSES_ROOT 下新增一项 SSOPluginsFile.myp, 这个可以自定义命名,但需要和上方测试的html代码中a标签的href属性保持一致
星辰sea
2023/06/10
2.5K0
在web网页上打开电脑本地exe应用
Android在ImageView上直接显示网络图片
在原生的ImageView中,没有一个方法是可以直接显示网络的图片的,当我们经常需要显示网络图片时,每次都有一大堆的操作,这会很麻烦,今天就教大家在ImageView上轻松显示网络图片。
夜雨飘零
2020/05/06
6.4K0
在CVM上搭建网页服务器(LNMP)
LNMP是一组可用于为动态网页和Web应用程序提供服务的软件。这是一个描述Linux操作系统的首字母缩略词,带有Nginx(发音为“ Engine-X”)Web服务器。后端数据存储在MySQL数据库中,动态处理由PHP 处理。
小皇帝James
2018/07/13
6.7K1
网页title图标_php 数据库显示在页面并能修改
重新定义TCPDF中的K_PATH_IMAGES常量(define(‘K_PATH_IMAGES’, xxxx) , 需要定义在加载tcpdf.php 之前)
全栈程序员站长
2022/10/03
4.4K0
layui单选框未显示的问题
一开始还没导入idea的时候,单纯点击一个网页是有显示出来的,当我把这个带有单选框的网页放到idea的项目中去的时候,发现单选框没显示出来。 1.首先在确认js.css等东西有导入,和之前的网页也没有什么区别 2.网上查询之后, 解释:有些时候,你的有些表单元素可能是动态插入的。这时 form 模块 的自动化渲染是会对其失效的。虽然我们没有双向绑定机制, 但没有关系,你只需要执行 form.render(type, filter); 方法即可。
全栈程序员站长
2022/08/23
5.6K0
PYTHON实现swf提取
#! /usr/bin/env python #coding=utf-8 import sys,os ##参数处理for windows,和操作系统交互 import re ##正则表达式处理工具 import struct ##二进制数据操作 def extract_swf(filename, buf, offset): try: length = struct.unpack_from('<L', buf, offset+4)[0] swfname = f
py3study
2020/01/10
2.3K0
(译)SDL编程入门(2)在屏幕上显示图像
注意:从现在开始,教程将只涉及源代码的关键部分。如果想看完整的程序,你必须下载完整的源码。
arcticfox
2020/09/24
2.9K0
Flex开发中使用Ant编译.mxml成.swf后,在.swf里使用Session的解决方法 博客分类: RIA FlexAntServl
Flex开发中使用Ant编译.mxml成.swf后,在.swf里使用Session的解决方法
阿敏总司令
2019/02/28
6580
React报错之无法在未挂载的组件上执行React状态更新
原文链接:https://bobbyhadz.com/blog/react-cant-perform-react-state-update-on-unmounted-component[1]
chuckQu
2022/08/19
2.9K0
网页标签闪烁 + 显示隐藏密码
感觉标签闪烁蛮有意思的,再加一篇凑一下字数。点击下方阅读原文,查阅文档,里面会有平时的积累。
OBKoro1
2020/10/27
2.7K0
网页标签闪烁 + 显示隐藏密码
点击加载更多

相似问题

条件eax != 0和edx == 0?

14

为什么在一段时间内"movl $1,%edx“而不是"movl $0,%edx”

13

在逻辑NEG和and指令之后,EDX有什么值?

10

其余的DIV不在EDX中。

10

为什么此过程在没有"mov edx,0“的情况下失败?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档