(附录二)
汇编语言程序设计
实验报告
软件学院
一、 实验目的与意义
了解和掌握 MOV、PUSH、POP、XCHG四条指令的作用和在编程中的用法。
二、 实验环境
操作系统:windows7
调试软件名称及版本号:Microsoft Visual Studio2008
三、 实验的预习内容
预习的主要内容:在实验前主要预习了MOV、PUSH、POP、XCHG四条指令的作用及用法,看了这4条指令使用的格式以及几个应用的例子,了解了MOV、PUSH、POP、XCHG的使用方法。
实验思路:把具体是数值用MOV指令传给寄存器,通过寄存器的数值变化来了解MOV的作用,通过观察寄存器PUSH或POP之前和之后的变化,了解push和pop的用作,通过XCHG作用于两个寄存器,观察使用前后的变化,了解XCHG的作用
四、 实验的步骤与调试方法
1.实验的大致步骤:
通过在.code中填入实验所给的数据,通过逐语句调试来观察各个寄存器的数值变化
2.在实验中遇到的问题及调试方法
开始的时候没有采用逐语句调试的方法,由于没有输出,看不到结果,最后采用逐语句的调试方法,看到寄存器的变化
在调试时报错,后来发现在目的操作数和源操作数之间忘加逗号了导致程序无法运行
五、 实验数据与实验结果
实验所用的总的框架代码是
TITLE MASM Template (main.asm)
INCLUDE Irvine32.inc
.data
.code
main PROC
call Clrscr
(每个实验的代码写在这里)
exit
main ENDP
END main
下面所写的每个实验的代码都是写在.code里的一段代码
(I)采用立即数寻址方式将19E0H,3F56H,0AF37H,9A81H分别送给EAX、EBX、ECX、EDX四个寄存器。
操作前:EAX = 76A51102 EBX = 7FFD9000 ECX = 00000000 EDX = 01291005
操作后:EAX = 000019E0 EBX = 00003F56 ECX = 0000AF37 EDX = 00009A81
操作过程中所用到的指令::mov eax,19E0H
mov ebx,3F56H
mov ecx,0AF37H
mov edx,9A81H
(Ⅱ)采用采用寄存器寻址方式将19E0H送给EBX、ECX、EDX三个寄存器。
操作前:EAX = 76A51102 EBX = 7FFD3000 ECX = 00000000 EDX = 00F31005
操作后:EAX = 000019E0 EBX = 000019E0 ECX = 000019E0 EDX = 000019E0
操作过程中所用到的指令:mov eax,19E0H
mov ebx,eax
mov ecx,eax
mov edx,eax
(2)对EAX、EBX、ECX、EDX四个寄存器进行出入堆栈的操作。
(Ⅰ)将EAX、EBX、ECX、EDX四个寄存器的内容依次压入堆栈中,注意观察栈指针寄存器和堆栈内容的变化
记录:压入EAX前 ESP= 0020FCE4
压入EAX后 ESP= 0020FCE0
压入EBX前 ESP= 002AFD94
压入EBX后 ESP= 002AFD90
压入ECX前 ESP= 001EF818
压入ECX后 ESP= 001EF814
压入EDX前 ESP= 0035FD24
压入EDX后 ESP= 0035FD20
操作过程中所用到的指令:push eax
push ebx
push ecx
push edx
(Ⅱ)将堆栈中的内容依次弹出到EAX、EBX、ECX、EDX四个寄存器, 注意观察栈指针寄存器和堆栈内容的变化
记录:弹出到EAX前 ESP= 002BF878
弹出到EAX后 ESP= 002BF87C
弹出到EBX前 ESP= 0021FB2C
弹出到EBX后 ESP= 0021FB30
弹出到ECX前 ESP= 0024FE88
弹出到ECX后 ESP= 0024FE8C
弹出到EDX前 ESP= 0022FDC8
弹出到EDX后 ESP= 0022FDCC
操作过程中所用到的指令:pop eax
pop ebx
pop ecx
pop edx
(3)已知EAX =3F56H,ECX =4690H,利用交换指令交换这两个寄存器的内容。
记录:操作前:EAX = 00003F56 ECX = 00004690
操作后:EAX = 00004690 ECX = 00003F56
操作过程中所用到的指令:mov eax,3F56H
mov ecx,4690H
xchg eax,ecx
实验成绩
班级:计算机1102班
姓名:xxx
学号:2011xxxx
(1)学习使用数组。
(2)学习字符串数据的组织和处理。
(3)学习标准C++库的使用。
(4)掌握指针的使用方法。
(5)练习通过Debug观察指针的内容及其所指的对象的内容
(6)联系通过动态内存分配实现动态数组,并体会指针在其中的作用。
(7)分别使用字符数组和标准C++库练习处理字符串的方法。
(1)编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。
(2)使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。
(3)编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。
(4)使用string类定义字符串对象,重新实现上一小题。
(5)定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。Display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。实现并测试这个类。
(6)定义包含5个元素的对象数组,每个元素都是Employee类型的对象。
(7)(选做)修改实验4中的选做实验中的people(人员)类。具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。其中“出生日期”定义为一个“日期”类内嵌对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。在测试程序中定义people类的对象数组,录入数据并显示。
3 程序代码及截图
(1)矩阵转置1:
?代码:
#include<iostream>
using namespace std;
void zhuanzhi(int array[3][3]);
int main()
{
int array1[3][3];
int i,j;
cout<<"请输入一个3*3的矩阵,矩阵元素以空格分开:"<<endl;
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++){cin>>array1[i][j];}
};
cout<<"您所输入的矩阵为:"<<endl;
for(j=0;j<=2;j++)
{ or(i=0;i<=2;i++){cout<<array1[j][i]<<ends;}
cout<<endl;}
zhuanzhi(array1);
return 0;
}
void zhuanzhi(int array[3][3])
{
int i,j;
int array2[3][3];
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
{
array2[j][i]=array[i][j];
}
}
cout<<"转置后的矩阵为:"<<endl;
for(j=0;j<=2;j++)
{
for(i=0;i<=2;i++)
{cout<<array2[j][i]<<ends;}
cout<<endl;
}
}
?程序截图:
(2)矩阵转置2:
#include<iostream>
using namespace std;
void zhuanzhi(int *b)
{
int i,j,t;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
t=*(b+i*3+j);
*(b+i*3+j)=*(b+j*3+i);
*(b+j*3+i)=t;
}
}
}
void main()
{
int i,j;
int *a=new int[3*3];
cout<<"请输入一个3*3矩阵,矩阵元素用空格分开:"<<endl;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
cin>>a[i*3+j];
}
}
cout<<"输入的矩阵为:"<<endl;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<<a[i*3+j]<<" ";
cout<<endl;
}
zhuanzhi(a);
cout<<"转置后的矩阵是:"<<endl;
for(j=0;j<3;j++)
{
for(i=0;i<3;i++)
cout<<a[i*3+j]<<" ";
cout<<endl;
}
}
?程序截图:
(3)字符串连接:
?程序代码:
#include<iostream>
using namespace std;
void main()
{ char a[100],b[100],c[200];
int i,j;
cout<<"请输入两个字符串:";
cin>>a;
cin>>b;
cout<<"两字符串连接后为:"<<endl;
for(i=0;a[i]!='\0';i++)
c[i]=a[i];
for(j=0;b[j]!='\0';j++)
{c[i]=b[j];
i++;}
c[i]='\0';
cout<<c<<endl;
}
?程序截图:
(4)字符串连接2:
?程序代码:
#include<iostream>
#include<string>
using namespace std;
void main()
{
string a,b,c;
cout<<"请输入两个字符串:";
cin>>a>>b;
cout<<"这两个字符串连接后为:";
c=a+b;
cout<<c<<endl;
}
?程序截图:
实验一霍尔效应及其应用预习思考题1列出计算霍尔系数载流子浓度n电导率及迁移率的计算公式并注明单位霍尔系数载流子浓度电导率迁移率2如…
1实验前进教室以后把书包什么的放到一个角落里不能放实验台上占地方把实验报告和书拿出来最好再拿个本好随时记老师说的注意事项教室的黑板…
谋学网15秋学期大学物理在线作业3单选题一单选题共20道试题共100分1选择22R24R2R2R2选择3题面为图片选择4题面为图片…
C语言程序设计实验报告1实验目的1熟练掌握一维数组二维数组的定义初始化和输入输出方法2熟练掌握字符数组和字符串函数的使用3熟练与数…
实验一霍尔效应及其应用预习思考题1列出计算霍尔系数载流子浓度n电导率及迁移率的计算公式并注明单位霍尔系数载流子浓度电导率迁移率2如…
弗兰克赫兹实验报告UU4U5U6U1U2U3978065554021531042091144vUU0U1181144036vEUU…
大学物理2上机实验报告学院光电信息学院姓名王志强学号20xx054040019一对1试分析T及a取值范围为aPvabT1用Math…