16位汇编,看到别人写的3行代码对一个32位数求补,举例子论证

NEG是求补指令,把他之后的操作数求补(先求反再加1)
本指令影响标志位CF、OF、SF、PF、ZF及AF.

有一个32位的数
高16位存储在Dx
低16位存储在Ax,写出指令对其求反

NEG DX
NEG AX
SBB DX,0

NEG后面的操作数,如果值不为0,CF就总为1
让我死都不明白的是为什么NEG指令要这样设置,为什么如果NEG后面操作数不为0就让那个CF等于1?当操作数为0时,取反加1还是0进了一位,当操作数为0的时候CF才应该等于1啊,而其他数求补都没有进位,为什么CF就等于1了呢?
后来发现在这道题中就可以看出这样设置非常正确
举个例子,假如DX和Ax中的数都不为0,
设Dx= 0000 0000 0000 1000
AX= 0000 0000 0000 0010
这个数完整的是
0000 0000 0000 1000 0000 0000 0000 0010
求补
1111 1111 1111 0111 1111 1111 1111 1110

分别求反两个数
则DX=1111 1111 1111 1000
AX=1111 1111 1111 1101
这个数完整写出来
1111 1111 1111 1000 1111 1111 1111 1101
对比正确求反结果,DX多加了一个1(注:求反与求补不同)

NEG指令设置的是后面的操作数只要不为0则CF为1
所以在SBB(sub with borrow)的时候,把CF减了进去

我们再来看当其中DX和AX其中一个为0的时候
我们就设DX= 0000 0000 0000 1000
AX=0000 0000 0000 0000 0000
NEG DX
则dx=1111 1111 1111 1000
NEG AX
AX仍然为0,且CF=0
SBB DX,0
DX<- DX-0-CF
即:DX<- DX-0-0
DX的值不变
得到1111 1111 1111 1000 0000 0000 0000 0000
我们来求补0000 0000 0000 1000 0000 0000 0000 0000 这个数
先求反1111 1111 1111 0111 1111 1111 1111 1111
加1
1111 1111 1111 1000 0000 0000 0000 0000
得出的结果是正确的

其实现在看这个问题不是很难,不过我们知道了为什么NEG指令对后面操作数如果不是0,CF就等于1,和平常的无符号数溢出有点不一样

小谈16位汇编NEG求补指令相关推荐

  1. 研究16位汇编NEG求补指令

    转自: http://bbs.pediy.com/showthread.php?t=81209 [文章标题]: 研究16位汇编NEG求补指令  [文章作者]:  hzmslx 我是个菜鸟··学16位汇 ...

  2. 汇编中求补指令NEG的小问题..

    今天上汇编课,讲到快下课的时候介绍求补指令NEG...大意为:NEG指令的操作是用0减去操作数,结果送回该操作数所在地址.然后teacher又说"大家别忘啦,求补要加1啦~balabalab ...

  3. 16位汇编相关寄存器

    文章目录 1 寄存器的组成部分 1.1 8086寄存器组成 1.2 8086处理器是小端模式 2 X86 16位汇编所涉及的寄存器 3 寄存器的用法 3.1 DS和ES 3.2 CS和IP 1 寄存器 ...

  4. 手把手教你在64位Win7下部署16位汇编学习环境

    实现方式是VirtualBox虚拟机+精简的32位xp系统.指导小白用,高手就直接跳过吧. 一.背景 初学者学习汇编语言通常是从16位汇编开始,但是现在的64位Win7系统明确表示不支持16位的程序. ...

  5. c语言将两个16位变为一个32位,16位汇编第六讲汇编指令详解第第三讲(示例代码)...

    16位汇编第六讲汇编指令详解第第三讲 1.十进制调整指令 1. 十进制数调整指令对二进制运算的结果进行十进制调整,以得到十进制的运算结果 2.分成压缩BCD码和非压缩BCD码调整 简而言之: 以前的时 ...

  6. 【汇编语言】16位汇编总结

    16位汇编语言 学习操作系统前对汇编语言进行快速学习,参考汇编语言进行总结. Before Learning 进制: 字节和字: 字节,即Byte,是由八个位组成的一个单元,也就是8个bit组成1个B ...

  7. 16位汇编第第四讲常用的7种寻址方式

    常用的7中寻址方式 昨天稍微讲了一下,立即数寻址,今天继续讲解寻址方式. (注意,这个属于简陋版的,写了4个小时的博客,也就是第一版,保存了一下,但是博客出问题了,重新打开后发现保存的内容没了,让我很 ...

  8. 16位汇编 Hook int 0实例

    div除法溢出之后, 会调用中断0, 显示Divide overflow, 我们修改中断向量表里对应的0号中断的处理地址, 将我们的代码执行起来, 达到hook的目的 assume cs:codeco ...

  9. 16位汇编 写入显存B800:0000 输出字符串

    B8000H-BFFFFH的内存空间是显存地址, 32K大小, 向这个地址写入数据就可以打印到屏幕上了. assume cs:code, ds:datadata segmentdb 'Hello,te ...

最新文章

  1. 收藏 | Redis 使用 10 个小技巧
  2. .Net - Lambda 表达式
  3. (四)建筑物多边形化简系统——“去尾巴”和分割复杂多边形
  4. tp5缓存在html怎么用,tp5.1缓存Cache的使用
  5. 真实经历:整整一年了,他是这样从程序员转型做产品经理的
  6. 一个 Task 不够,又来一个 ValueTask ,真的学懵了!
  7. [转]为什么python标准库没有实现链表
  8. kotlin特性之object、apply用法总结
  9. python实现判断一个字符串是否是合法IP地址
  10. alisql mysql5.7_wps2016抢鲜版_AliSQL 5.6.32 vs MySQL 5.7.15抢鲜测试-云栖社区-阿里云
  11. 高效能人士的七个习惯(零)前言
  12. Android 9.0 USER_ROTATION重启后恢复默认值
  13. 票务网 php,电影票务网站的设计与制作
  14. 开放数据库:中医古方数据库
  15. 书评《半小时漫画中国史》
  16. 微信小程序之swiper无限轮播实现效果
  17. logTracker错误日志跟踪组件(二)
  18. labview在不同VI间传递波形(全局变量)
  19. Git 2.38发布,引入巨型仓库管理工具Scalar
  20. Nginx的 http_image_filter_module 模块使用说明

热门文章

  1. android版本360ui,国产手机UI系统有哪些
  2. 互联网人才泡沫:百度腾讯阿里大打人才争夺战
  3. 武汉东西湖区小进规市场主体奖励申报条件、材料及流程梳理
  4. STM32F103C8T6_UART1(RS485通讯)复用PB6+PB7
  5. 什么推动了食品价格上涨(图)
  6. [附源码]java毕业设计宠物店管理系统
  7. Dijkstra算法以及与其他最短路径算法简要对比
  8. layui弹出层第一次打开不居中,第二次才居中
  9. 股票分析师如何在市场中利用Arron实现炒股
  10. 如何应对stata do文件打开乱码问题