一道关于汇编程序的问题

一道关于汇编程序的问题,第1张

我大概说下,好久没动这个了,有可能不会。。呵呵~~

MOV AX,0FF64H //ax=0xff al=0x64

NEG AL //al=0-0x64=0x9c

SUB AL,9DH //al=0x9c-0x9d=0xff 此时,AX=0XFFFF

NEG AX //ax=0-0xff=0x01

DEC AL //al=0x01-1=0

NEG AX //AX=0-0=0

嗯。。结果就为零了。。

NEG XX 结果就是将0-XX

SUB AL,9DH 结果是AL=AL-9DH

明白不?

x+y补 = x补 + y补

x-y补 = x补 + -y补

=====================

求-y补的方法:①求出y补 ② 第一步求到的数,连同符号位全部“求反”。③ 最后末尾加1

例:y=01001

①y补 = 01001 //正数补码,还是正数

② 10110

③ 10111

所以-y补 = 10111

====================

上题:x+y:

(1)x补 = 01001 //正数的补码等于正数

y补 = 01100

01001+01100 = 10101

模4补码表示 001001 + 001100 = 010101 // 01表示两个正数之和大于或等于1的情况,称为数值的“上溢”

(2)x补= 10100数值位取反等于11011 末尾加1等于 11100 //真值为负数时,求补码的方法是,符号位保持不变,数值位取反后末尾加1

y补 = 01001

11100+01001 = (溢出了)用模4补码表示为 100101 // 10表示溢出,但是最高位为1表示为负数,10表示为小于或等于-1的情况,称为“下溢”

===========================

上题:x-y

(1)这个比较简单,自己根据我写的方法算算

(2)x-y补 = x补 + -y补

x补= 11100 // 负数求补,符号位保持不变,真值位取反后,末尾加1

y补 = 01001

-y补 = 10110 + 1 = 10111

11100 + 10111 = 110011

#include <stdioh>

int main() {

int m,n = 0,t = 0;

scanf("%d",&m);

/填写程序段begin/

while(m) {

t = m%10;

if(t%2 == 0) ++n;

m /= 10;

}

printf("偶数个数为:%d\n",n); //计算出来偶数的个数赋值给n输出

return 0;

/end/

}

就是1111 1111求补最简单的办法就是用 1 0000 0000去减那个数,得出来的就是要求的东西还有楼主不要随便打负号有没有负号是不一样的

例如1 0000 0000-0000 1000=1111 1000求出来的就是8的补码

-001111-000101=????

此题没有溢出!

因为:

-001111补码:110001

-000101补码:111011

相加:

110001+111011=101100

101100原码:-010100

只有当减数与被减数的符号相反,但是结果与减数符号相同时,才产生溢出

以上就是关于一道关于汇编程序的问题全部的内容,包括:一道关于汇编程序的问题、用补码运算方法求x+y=x-y= (1) x= 0.1001 y= 0.1100 (2) x= -0.0100 y= 0.1001、求将下列程序补充完成!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9764644.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存