很多人都知道一个有符号的数,最高位是1,则表示负数,最高位是0,则表示正数,如果假设我的CPU是4位CPU,那么对于1001这个数,是表示+9,还是表示-7呢???

其实CPU并不关心这个数是+9还是-7,因为这个数字是个结果,至于它代表正还是负,这取决于编程人员自身,换句话说这也取决于使用的编译器,或者说取决于你使用的高级编程语言

无论0B1001表示正还是负,它+1之后,值都是0B1010,它-1之后,值都是0B1000,所以结果是没问题的,CPU就负责算减法还是加法就可以了,至于结果,你希望它是正还是负??

下面是一段Java的代码,很明显这段代码的行1是错误的,编译的时候就过不去,直接报错,而行2就是正确的,这说明在Java开发语言中,int类型是有符号数,那么既然是有符号数,则必须将32位的int类型中的最高位表示正负,而剩下31位,用来存放数字,所以在JDK处理的时候,JDK是知道自己有正负功能的,所JDK会判断最高位是0还是1(正还是负),这与CPU和操作系统没有关系,而是JDK来决定这个数是正还是负

public static void main(String[] args) {int a=4294967295; // 行1,4294967295=2的32次方-1int b=2147483647; // 行2,4294967295=2的31次方-1
}

所以你一定要明白,CPU和操作系统是不关心内存(或寄存器)中的值是正还是负的,正负只是程序员强加的概念,因为不管正负,最终的二进制结果都是相同的,CPU只是单纯执行指令,获取结果,至于如何使用这个结果,是程序员自己决定,很明显上述使用了JAVA举例,你应该明白Java是如何使用这个结果的,当然其他语言也是一样的

add加法指令

mov ax,666
add ax,3        ;cpu执行完本行,ax中的值是669

sub减法指令

mov ax,666
sub ax,3        ;cpu执行完本行,ax中的值是663

idiv负数除法指令
在这篇文章中已经使用了div(除法)指令来编写程序,不过div是正数的除法指令,很明显与加减法不同,乘除法并不能使用相同的指令,因为二进制结果不一样,我们同样假设现有一个4位的CPU,若现在内存中(或寄存器)的值是1001,用这个值除以十进制的2,那么CPU应该调用div(正数)指令执行除法,还是使用idiv(负数)指令执行除法????
在上面的Java例子中,我们已经非常明确的说过,这取决于程序员(或编译器),在这个例子中,如果是JAVA等其他高级语言,那么会调用idiv指令,因为它们都是支持正负的,并且约定最高位如果是1,则表示负数,所以会调用idiv指令

mov  ax,0B1001
mov  bh,2
idiv bh         ;用ax/bx,商放到al中,余数在ah中,与div没什么不同,只是结果不一样

到这里文章基本结束,下面介绍几个拓展有符号数指令,假设有如下代码

mov  dx,FFFF ;注意是idiv bx,被除数高位会在dx,低位在ax中,因为我用不到dx,所以先将所有的位都置1(因为是负数)
mov  ax,0D-7    ;10进制-7
mov  bx,2
idiv bx

从上面的代码可以看到mov dx,1这行需要我们进行思考,然后再写出这行代码,而且有一个比mov更快速的指令,也就是下面这些
cbw: 将AL中有符号的数拓展到AX,,如果AL中的值是-7,则cbw执行完毕,AX中的值是FFF9
cwde: 将AX中有符号的数拓展到EAX
cdqe: 将EAX中有符号的数拓展到RAX
cwd: 将AX中的有符号数扩展到DX:AX,如果AX中的值是-7,则cwd执行完毕,DX中的值是FFFF
cdq: 将EAX中的有符号数扩展到EDX:EAX
cdo: 将RAX中的有符号数扩展到RDX:RAX

Intel8086处理器使用NASM汇编语言实现操作系统08-关于负数的相关处理idiv/cbw/cwde/cdqu/cwd/cdq/cdo/相关推荐

  1. Intel8086处理器使用NASM汇编语言实现操作系统15-段的定义section/vstart和align语法

    vstart用法 如果一个程序有a,b两个段,那么如下的程序,最后2个字节存放的是b_label距离程序起始位置段a中mov ax,1的偏移量 section a ;NASM汇编中使用section关 ...

  2. Intel8086处理器使用NASM汇编语言实现操作系统10-硬盘读取(in/out)

    本示例遇到的新汇编指令in,out out 正确写法 out 0xf3,ax ;将ax里的值放到0xf3端口,且只能是ax,al,eax out dx,ax ;第1操作数如果是寄存器,则必须使用dx ...

  3. Intel8086处理器使用NASM汇编语言实现操作系统04-实模式-屏幕显示不定长度的字符串(cmp/je)

    本示例遇到的新汇编指令cmp,je cmp正确写法 cmp eax,666 ;用eax里的值减去666,如果值为0,则将ZR(ZF)标志位=1;如果发生借位或进位,CF(CY)标志位=1;如果溢出,则 ...

  4. Intel8086处理器使用NASM汇编语言实现操作系统09-关于数组复制的实现/movsb/movsw/cld/std/rep

    本文介绍movsb和movsw指令,它是C++中memcpy函数的实现,在Java语言的ArrayList实现类中就使用了该指令,不过在Java中的方法是System.arraycopy方法 首先要了 ...

  5. NASM汇编语言与计算机系统13-段的定义/vstart和align语法

    vstart用法 如果一个程序有a,b两个段,那么如下的程序,最后2个字节存放的是b_label距离程序起始位置段a中mov ax,1的偏移量 section amov ax,1mov ax,2a_l ...

  6. NASM汇编语言与计算机系统03-实模式-屏幕显示HelloWorld(mov,jmp,time,dd,dw,$$)

    本文涉及到的汇编指令mov,jmp,times(独有),dd(独有),dw (独有),$,$$ dd/dw times 10 dd 0 ;dd表示一个双字,在8086下占用4个字节 times 10 ...

  7. NASM汇编语言与计算机系统02-实模式-显存原理

    显卡以高频的刷新速度一直不停的扫描显存中的数据,将显存中的数据显示到屏幕上 显卡有两种模式 1.文本模式:为了方便叙述,本文的代码示例采用文本模式 2.图形模式 对于CPU来说,显存也是内存,显存的地 ...

  8. NASM汇编语言与计算机系统01-环境搭建

    使用的程序有4个,分别是 1.Nasm汇编编译器 2.Sublime文本工具(一会需要安装NASM插件) 3.VirtualBox虚拟机 4.Bochs虚拟机调试器(一个带有调试功能的虚拟机) 1.安 ...

  9. NASM汇编语言与计算机系统13-段的定义vstart和align语法

    vstart用法 如果一个程序有a,b两个段,那么如下的程序,最后2个字节存放的是b_label距离程序起始位置段a中mov ax,1的偏移量 section amov ax,1mov ax,2a_l ...

最新文章

  1. c 清除 html标签,13.4. 去除HTML的标签tag:htmlRemoveTag
  2. tensorflow.reshap(tensor,shape,name)的使用说明
  3. C# 学生成绩管理系统 完整版
  4. 花5分钟时间来了解一下高性能网关Kong会有意外收获
  5. 百度分布式配置管理平台-Disconf
  6. 视觉SLAM十四讲学习笔记-第三讲-旋转矩阵和Eigen库
  7. 基于Linux和MiniGUI的嵌入式系统软件开发指南(五)
  8. Android_组件的显示与隐藏
  9. LIO-SAM探秘第三章之代码解析(四) --- mapOptmization.cpp (2)
  10. 康拓电梯卡延期与通楼修改教程
  11. MQTT.fx工具测试mqtt
  12. 用PS自己制作一寸证件照照片
  13. mui中双webView的刷新
  14. 接口测试之postman
  15. 解决服务器上中文显示乱码问题
  16. XMind 2022 for Mac(思维导图软件)中文免费版
  17. 全息网御上榜《CCSIP 2022中国网络安全产业全景图》
  18. python能否取代excel_行,Python玩大了!​取代Excel,程序员:太牛!你怎么看?...
  19. 申报指南|教你如何优雅地报名、提交项目申请书
  20. minMaxLoc用法

热门文章

  1. (转)Openbravo ERP架构分析
  2. 2021SC@SDUSC 开源项目GFPGAN -7-experiments
  3. 微擎系统内置的所有函数大全,一共5435个,可以当作微擎开发函数手册来查看(下篇)
  4. Hexo博客备份方案
  5. 网关(Gateway)
  6. 中国将取代德国成世界第三大经济体
  7. Python 打造基于有道翻译的命令行翻译工具(命令行爱好者必备)
  8. 分位数回归—R语言实现
  9. 分子间相互作用力——氢键,卤键,硫键,π-π堆积,盐桥,阳离子-π,疏水作用力
  10. 微积分学 \ 线性代数 \ 概率论与数理统计