实验资料:
https://wwpv.lanzoue.com/b05drrb2b
密码:7nwj
附件清单如下:
(1)MSDEV.EXE-----替换后可以修复调试后软件不可用的情况
(2)计算机组成原理实验一(完整).docx ----计算机组成原理实验一的报告模板
(3)1-1.vc6_cn_full ---- vc++编译器安装软件
(4) 2.安装文件替换效果图(修复调试后软件死机BUG)----(1)程序的替换示意图
- 在VC中使用调试功能将下列语句运行的内存存放结果截图,每运行一句需截图一次。
#include<stdio.h>
int main()
{
int a = 你的学号末两位-100; //0x?????????
char b= 你的学号末两位-100;
short c=你的学号末两位-100;
unsigned int d = 你的学号末两位-100;
int e[5]={你的学号末两位-100,你的学号末两位-99,你的学号末两位-98,你的学号末两位-97,你的学号末两位-96};
float f1 = -11.375;
float f2 = 0.1;
a=1 ;//把a的次高字节变成EE ?(作业的要求是将a改成自己的学号!)
return 0;
}
过程参考:
注意:每个变量有自己的数据类型,不同数据类型所占字节数也不同,具体长度参考下图
- 求变量 a 的地址
- 求变量 b 的地址
- 求变量 c 的地址
- 求变量 d 的地址
- 求数组 e 的地址 (注意顺序!)
- 求变量 f1 的地址
- 求变量 f2 的地址
- 求改变值后 变量 a 的地址 (在执行完a的赋值操作后,在左下角标注的地方双击,改成自己的学号,然后地址就会改变了)
下面就是根据我自己学号末二位记录的值
注意:下面代码的第二行有加 #include “stdafx.h” 一行,这是必须的,否则运行错误,具体请看C/C++—— #include“stdafx.h”详解
#include<stdio.h>
#include "stdafx.h"
int main()
{
int a = 16-100; //0xffffffac
char b= 16-100; //0xac
short c=16-100; //0xffac
unsigned int d = 16-100; //0xffffffac
int e[5]={16-100,16-99,16-98,16-97,16-96}; //0xffffffac 0xffffffad 0xffffffae 0xffffffaf 0xffffffb0
float f1 = -11.375; //0xc1360000
float f2 = 0.1; //0xcd3dcccccd
a=1 ;//把a的次高字节变成EE ? //这里填自己学号的那一块
return 0;
}
- 某计算机存储器按字节编址,采用小端方式存放数据。假定编译器规定int 型、float型和 short型长度分别为32位、32 位和16 位,并且数据按边界对齐存储。某C 语言程序段如下:
struct{
char a[3];
float b;
short c;
double d;
short f;
} record;
record.b= 20.59375f;
record.c= -0xDCBA;
若record变量的首地址为0xFF20,则
注意:填写答案时,如须填写英文字母一律使用大写。
(1)地址 0xFF25 中内容为 0x C0。(填十六进制数)
(2)地址 0xFF28 中内容为 0x 46。(填十六进制数)
(3)浮点型 record.b 是按 IEEE754 标准编码后存放。
(4)record.f 的地址为0x FF38。(填十六进制数)
(5)结构体record一共占 32 个字节的大小。(填十进制数)
通过使用VC编译器的调试功能查看内存中的数据,
(1)填写上述空格,并截图你的实验过程;
(2)对以上内存结果进行验算,写出你的理由。
仅供参考!
理由:根据下图可以知道,结构体record的内存占用32个字节,利用软件可以查到,结构体record的首地址为0x 0019ff14,而record.f的地址为0x 0019ff2c,两个地址相差0x 18,所以假如record变量的首地址为0xFF20,则record.f的地址为0xFF38。
- 在VC中使用下列功能,打开每一项功能都截图一张,在图片中圈定打开的内容,说明这个功能要显示什么内容?(如下图所示)
以上是题目描述,以下是参考
使用参考:
使用“监视”和“快速监视”窗口监视变量
使用参考:
查看调用堆栈,并在调试器中使用“调用堆栈”窗口
使用参考:
检查自动和局部变量窗口中的变量
使用参考:
在“寄存器”窗口中查看寄存器值(C#、C++、Visual Basic、F#)
使用参考:
Visual Studio调试器指南—Disassembly窗口
- 在其他任意编译器中(Codeclock/Dev c++/VS)使用调试功能,将下列语句再次运行的内存存放结果截图
#include<stdio.h>
int main()
{
int a = 你的学号末两位-100; //0x?????????
int e[5]={你的学号末两位-100,+1,+2,+3,+4};
float f1 = -11.375;
return 0;
}
在其他任意编译器中(Codeclock/Dev c++/VS)复现(1)中的部分结果,并截图3张
注意,这里要求使用其他的编译器,为了教程通用,统一采用小熊猫C++进行演示,点击此处下载小熊猫C++(密码是f0tp,选择倒数第二个下载)
下面是我的调试过程:
- 变量 a 的地址
- 数组 e 的地址
- 变量 f1 的地址