Intel8086处理器使用NASM汇编语言实现操作系统08-关于负数的相关处理idiv/cbw/cwde/cdqu/cwd/cdq/cdo/
创始人
2024-05-30 02:45:37
0

很多人都知道一个有符号的数,最高位是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

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...