快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

计算机系统基础实验-定点数加减法的机器级表示-创新互联

实验序号:2 实验名称:定点数加减法的机器级表示
适用专业:软件工程 学 时 数:2学时

成都创新互联公司专注于天津企业网站建设,自适应网站建设,电子商务商城网站建设。天津网站建设公司,为天津等地区提供建站服务。全流程按需网站建设,专业设计,全程项目跟踪,成都创新互联公司专业和态度为您提供的服务一、实验目的

1、掌握定点数加法的机器级表示。
2、掌握定点数减法的机器级表示。
3、掌握EFLAGS中4个牵涉到计算的标志位的计算方法。
4、掌握计算溢出的判定方法。

二、实验要求

按照实验题目的要求,编写程序并上机调试

三、实验设备、环境

计算机、Windows 7 、Visual C++ 6.0

四、实验步骤及内容

用C语言编写二进制数运算模拟程序

1.编写整数加减法器:
设在main中有如下数组:

char int1[5];
char int2[5];

编写函数

int addsub(char int1[],char int2[],int flag,int m,int n);

当flag为0时表示加法运算,当flag为1时表示减法运算,做4位的加减法运算,返回4位结果。m和n分别是int1和int2的大小。在函数中必须要计算OF,CF,SF,ZF,并输出4个值,根据值输出是否产生了溢出,是哪一种溢出。

提示:
1.要注意到减法运算本质仍然是做加法,只不过要将减数取补码而已。
2.注意OF和CF并不只是判定最高位是否有进位
3.注意判定是否溢出必须要知道数是有符号还是无符号才行,加法器本身没有能力判定这一点。

五、讨论、思考题

1、为什么要用补码来表示整数?
2、机器底层是如何判定溢出的?
3、为什么编译器一定要知道数据的类型才能够做计算?

#includeint addsub(char int1[], char int2[], int flag, int m, int n);

int main()
{char input[10];
    scanf("%s", input);
    char int1[5];
    char int2[5];
    for (int i = 0; i< 4; i++)
    {int1[i] = input[i] - '0';
        int2[i] = input[i + 5] - '0';
    }
    int flag = input[4]=='-'?1:0;
    addsub(int1, int2, flag, 4, 4);
    printf("结果:%d%d%d%d\n", int2[0], int2[1], int2[2], int2[3]);
    printf("ZF=%d,SF=%d,CF=%d,OF=%d",int1[0], int1[1], int1[2], int1[3]);
    return 0;
}

int addsub(char int1[], char int2[], int flag, int m, int n)
{if(flag) {for(int i = 0; i< 4; i++ ) int2[i] = !int2[i];
        for(int i = n - 1, carry = 1; ~i; i--) {int c = carry, b = int2[i];
            int2[i] = int2[i] ^ carry;
            carry = b & c;
            if(carry == 0) break;
        }
    }
    int carry[5] = {0}, res[4] = {0};
    for(int i = n - 1; ~i; i-- ) {int a = int1[i], b = int2[i], c = carry[i + 1];
        res[i] = a ^ b ^ c;
        carry[i] = (a & c) | (b & c) | (a & b);
    }
    int OF = 0, ZF = 0, SF = 0, CF = 0;
    CF = carry[0] ^ flag;
    SF = res[0];
    ZF = !(res[0] | res[1] | res[2] | res[3]);
    OF = carry[0] ^ carry[1];
    int1[0] = ZF, int1[1] = SF, int1[2] = CF, int1[3] = OF;
    for(int i = 0; i< 4; i++ ) int2[i] = res[i];
    return 0;
} 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享标题:计算机系统基础实验-定点数加减法的机器级表示-创新互联
标题来源:http://6mz.cn/article/jgoec.html

其他资讯