东北大学软件学院汇编实验报告1

(附录二)

汇编语言程序设计

实验报告

   

 

     

软件学院


一、    实验目的与意义

了解和掌握 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


实验成绩

 

第二篇:东北大学 c++实验报告 exercise6

Exercise 6  数组、指针与字符串

班级:计算机1102班

姓名:xxx

学号:2011xxxx

1实验目的

(1)学习使用数组。

(2)学习字符串数据的组织和处理。

(3)学习标准C++库的使用。

(4)掌握指针的使用方法。

(5)练习通过Debug观察指针的内容及其所指的对象的内容

(6)联系通过动态内存分配实现动态数组,并体会指针在其中的作用。

(7)分别使用字符数组和标准C++库练习处理字符串的方法。

2 实验要求

(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;

}

?程序截图:

相关推荐