汇编语言.两有符号数运算,如何自己判断是否溢出

计算机中的溢出,是指数据过大,超出了预定的范围。


八位二进制,可以代表自然数:0~255;


      也可以代表整数:-128~+127。


判断溢出,常用的方法:


1。你用十进制,人工计算。和,在容许范围之内,就没有溢出。


  这种方法最简单。而且,对无符号数、带符号数,都是适用的。


2。你用二进制,人工计算。和的符号,属于合理,就没有溢出。


  这种方法稍稍麻烦。只能判断“带符号数”的溢出。


3。你编个程,让 CPU 计算。如果 OF = 0,就没有溢出。


  这种方法,难度较大。


4。你把两个数据,显示出来,求大家帮你判断。


  在你那边,网络通了吧。



当标志寄存器中的溢出标志OF(OVERFLOW)为1,就是溢出,为0就是没溢出。

执行指令后看PSW中的OV位,OV=1则刚刚运算结果溢出。

汇编语言 两个有符号数相加10111010和11010011,结果是 (0DH) 溢出么?~

结果是8DH,而不是0DH,有溢出被舍弃。

补码加法运算溢出判断三种方法:
[方法一]
Xf、Yf分别两个数的符号位,Zf为运算结果符号位。
当Xf =Yf =0(两数同为正),而Zf=1(结果为负)时,负溢出;
当出现Xf =Yf =1(两数同为负),而Zf=0(结果为正),正溢出.
[方法二]
Cs表示符号位的进位,Cp表示最高数值位进位,⊕表示异或。
若 Cs⊕Cp =0 ,无溢出;
若 Cs⊕Cp =1 ,有溢出。
[方法三]
用变形补码进行双符号位运算(正数符为00,负数符号以11)
若运算结果的符号位为"01",则正溢;
若结果双符号为10,则负溢出;
若结果的双符号位为00或11,无溢出。

#13965638230# 汇编语言带符号加法的编程 - ******
#於迹# ;prog name:calculating with signed byte ;;;; date: 08.10.27 ;;;; author: ivshe...

#13965638230# 汇编语言 两个有符号数相加10111010和11010011,求结果时最高位符号位是否参与运算,其 - ******
#於迹# CPU,他不管数字代表什么,只是按照二进制数,进行运算.空1011 1010 +1101 0011 ------- (1)1000 1101

#13965638230# 如何用汇编语言编写 1*1+2*2+3*3+...........10*10 - ******
#於迹# 带符号数乘法指令 IMUL(Integer MULtiply)格式: IMUL OPRD ---- 功能: 完成两个带符号数的相乘 ----==================================== 说明: 1. 其中OPRD为任一通用寄存器或存储器操作数. ---- 2. MUL指令对带符号相乘时,不能...

#13965638230# 汇编语言中,+128有符号数该如何表示, - 128有符号数有该如何表示 - ******
#於迹# 用汇编语言编程时,可以使用十进制数、正负号、加减乘除符号等等.+128有符号数该如何表示,就写成:+128; -128有符号数有该如何表示,就写成:-128.即可.

#13965638230# 在汇编语言中怎样判断2个操作数是是无符号数作运算还是有符号数作运算 - ******
#於迹# 呵呵,有没有符号不是你问计算机,是你要告诉计算机该符号是不是有符号数. 比如你用MUL指令,计算机就把该符号当成无符号数计算.

#13965638230# 汇编中如何计算有符号数是否溢出 - ******
#於迹# 八位的是这样 有进位是第七位向高位进位,才是有进位, 进位标志位为1,也即第七位有进位 如果第六位有进位,而第七位无进位 或者第七位有进位而第六位无进位,则为溢出 两者没什么太大的联系 十六位类似 add ax,90h没有进位的,十六位加法 最高位是符号位,标志着数值的正负 负数保存以补码的形式,自己算时要改过来的

#13965638230# 将有符号数运算汇编代码改成无符号数运算代码 - ******
#於迹# 这个题目牵涉到有符号还是无符号就是乘法指令和除法指令了,有符号数乘法指令使用IMUL,除法使用IDIV,而无符号数使用乘法是MUL,除法是DIV,就是没有I,这是书上的知识点,自己可以找找资料,如果你上面的程序没错的话,改掉这两处就好了.

#13965638230# 汇编源程序怎么表示有符号数 - ******
#於迹# 51的8位,最高位定义为符号位 0为正 1为负

#13965638230# 汇编语言,有符号数值从大到小排序,并输出中文"完成" - ******
#於迹# CODE SEGMENT ASSUME CS:CODE DAT1 DB 13,10,'完成.',13,10,'$' START: PUSH CS POP DS PUSH CS POP ES CALL INPUTNUM LEA DI,@ARRAY MOV CX,@NUM CALL SELECTSORT MOV AH,2 MOV DL,13 INT 21H MOV DL,10...

#13965638230# 汇编语言中,计算机如何识别是否为有无符号运算 - ******
#於迹# 让-127加1的话 那么这个结果的sf寄存器值到底是0还是1, --是1.为什么这样运行后sf寄存器的值默认为0(也就是有符号数的正数) --是1. --为什么你说是0?不是应该为1吗 ?? --是1.127加1等于-126,sf应该是1才对 --对.

  • 汇编语言无符号数与有符号数转换
  • 答:也许你要的是,知道一个有符号数求它的相反数:0b4h 先把它的二进制形式写出来:10110100 取反:01001011 加一:01001100 再写成十六进制:4ch

  • 用汇编语言实现从键盘输入两个2位数并进行相加,最后输出结果
  • 答:DISPL ENDP ;完成显示功能子程序定义 ADDA PROC NEAR ;实行加法运算子程序过程定义,属性为NEAR MOV DX,SI MOV BP,DI MOV BX,05 TRAN_HEX: SUB BYTE PTR[SI+BX-1],30H ;把ASCII码数转化为十六进制 SUB BYTE...

  • 51单片机 用汇编语言怎么编程:几个有符号数的比较大小
  • 答:51单片机中,没有专门的有符号数比较指令,只能通过一些变通的方法来实现,比如:比较30H和40H中有符号数的大小,结果放在R2中,大于则为1,等于为0,小于为128:CMPDAT:MOV A,30H JB ACC.7,CMPF1 MOV B,A MOV A,...

  • 单片机如何进行两个有符号数的相乘?
  • 答:在 keil编译器里面 使用C语言编程 将变量定义为有符号数 就可以实现你需要的功能 若是想知道原理,可以再网上搜索单片机通用子程序 里面大部分都有多字节的有符号和无符号数的四则运算 ...

  • 无符号数和有符号数在汇编程序里如何区分?
  • 答:加减运算指令是不区分有符号和无符号的,在计算机对有符号整数的表示只采取一种编码方式,不存在正数用原码,负数用补码的问题。在汇编语言里声明变量的时候,没有signed和unsignde之分,汇编器全部将输入的整数字面量当作有...

  • 汇编语言如何判断是有符号运算,还是无符号运算?
  • 答:所以只要你能读懂代码,那这个运算的类型你也肯定能看出来 对于乘法和除法就简单了,直接从指令就能看出来,无符号的乘除是MUL和DIV,有符号的是IMUL和IDIV 浮点数的话全都是有符号数,没有无符号的 ...

  • 汇编语言中的加减法~~~困扰我很久了。。有高人吗
  • 答:一、只有一个标准!在汇编语言层面,声明变量的时候,没有 signed 和 unsignde 之分,汇编器统统,将你输入的整数字面量当作有符号数处理成补码存入到计算机中,只有这一个标准!汇编器不会区分有符号还是无符号然后用两个...

  • 关于汇编的一道题目,AX中有符号数除以2的正确指令是?
  • 答:sar是保留符号位,把剩下的二进制位向右移一位(原最低位丢弃)把n进制数右移1位就相当于原数除以n取整,比如十进制数123,右移一位是12("3"被丢弃),而123/10=12 总线接口单元,执行单元,与存储器传送信息,...

  • 用汇编语言实现(25*20+10)/100的操作。如用MOV,等命令来实现 (带符 ...
  • 答:该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。必须注意:DEBUG把键入的数字均看成十六进制数,所以如要键入十进制数,则其后应加以说明,如100D。 7)反汇编命令U(Unassemble)有两种格式。

  • 汇编语言带符号加法的编程
  • 答:mov ax,0ff00h ;此处有符号扩展 mov bx,0h mov al,datax mov bl,datay idiv bl call disp jmp exit _overflow:mov dx,offset ofmsg mov ah,9h int 21h jmp exit ;;;disp proc ;; procedure name:disp ;;...

    为传递更多家电数码信息,若有事情请联系
    数码大全网