东北大学汇编实验及东北大学C++实验报告6.docx
- 文档编号:29438545
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:18
- 大小:17.97KB
东北大学汇编实验及东北大学C++实验报告6.docx
《东北大学汇编实验及东北大学C++实验报告6.docx》由会员分享,可在线阅读,更多相关《东北大学汇编实验及东北大学C++实验报告6.docx(18页珍藏版)》请在冰豆网上搜索。
东北大学汇编实验及东北大学C++实验报告6
东北大学汇编实验及东北大学C++实验报告6
课程编号:
B080103020
《汇编语言程序设计》
实验报告
姓名
学号
班级
指导教师
实验名称
数据传送、分支与循环结构程序设计实验
开设学期
20__-20__第一学期
开设时间
第1周——第10周
报告日期
20__年11月6日
评定成绩
评定人
评定日期
东北大学软件学院
实验1数据传送指令
实验目的:
了解和掌握MOV、PUSH、POP、_CHG四条指令的作用和在编程中的用法。
2、实验要求:
(Ⅰ)采用立即数寻址方式将19E0H,3F56H,0AF37H,9A81H分别送给EA_、EB_、EC_、ED_四个寄存器。
记录:
操作前EA_=75C59191、EB_=7FFDE000、EC_ED_操作后EA_=000019E0、EB_=00003F56、EC_=0000AF37、ED_=00009A81
操作过程中所用到的指令:
INCLUDEIrvine32.inc
.code
mainPROC
callDumpRegs
movea_,19E0H
moveb_,3F56H
movec_,0AF37H
moved_,9A81H
callDumpRegs
e_it
mainendp
ENDmain
(Ⅱ)采用采用寄存器寻址方式将19E0H送给EB_、EC_、ED_三个寄存器。
记录:
操作前EA_=75C59191、EB_=7FFDE000、EC_ED_操作后EA_=000019E0、EB_=000019E0、EC_=000019E0、ED_=000019E0操作过程中所用到的指令:
INCLUDEIrvine32.inc
.code
mainPROC
callDumpRegs
movea_,19E0H
moveb_,ea_
movec_,eb_
moved_,ec_
callDumpRegs
e_it
mainendp
ENDmain
(2)对EA_、EB_、EC_、ED_四个寄存器进行出入堆栈的操作。
(Ⅰ)将EA_、EB_、EC_、ED_四个寄存器的内容依次压入堆栈中,注意观察栈指针寄存器和堆栈内容的变化。
记录:
压入EA_前ESP=0018FF90,(ESP)=75C5919F
压入EA_后ESP=0018FF8C,(ESP)压入EB_前ESP=0018FF8C,(ESP)压入EB_后ESP=0018FF88,(ESP)压入EC_前ESP=0018FF88,(ESP)压入EC_后ESP=0018FF84,(ESP)压入ED_前ESP=0018FF84,(ESP)压入ED_后ESP=0018FF80,(ESP)=FFFFC000
操作过程中所用到的指令:
INCLUDEIrvine32.inc
.code
mainPROC
callDumpRegs
movea_,[esp]
callDumpRegs
pushea_
callDumpRegs
pusheb_
callDumpRegs
pushec_
callDumpRegs
pushed_
callDumpRegs
e_it
mainendp
ENDmain
(Ⅱ)将堆栈中的内容依次弹出到EA_、EB_、EC_、ED_四个寄存器,注意观察栈指针寄存器和堆栈内容的变化。
记录:
弹出到EA_前ESP=0018FF90,(ESP)弹出到EA_后ESP=0018FF94,(ESP)
弹出到EB_前ESP=0018FF94,(ESP)弹出到EB_后ESP=0018FF98,(ESP)
弹出到EC_前ESP=0018FF98,(ESP)
弹出到EC_后ESP=0018FF9C,(ESP)=E18A40B7
弹出到ED_前ESP=0018FF9C,(ESP)=E18A40B7
弹出到ED_后ESP=0018FFA0,(ESP)=FFFFF801
操作过程中所用到的指令:
includeIrvine32.inc
.code
mainproc
movesi,[esp]
callDumpRegs
pushea_
movesi,[esp]
callDumpRegs
pusheb_
movesi,[esp]
callDumpRegs
pushec_
movesi,[esp]
callDumpRegs
pushed_
poped_
movesi,[esp]
callDumpRegs
popec_
movesi,[esp]
callDumpRegs
popeb_
movesi,[esp]
callDumpRegs
popea_
movesi,[esp]
callDumpRegs
e_it
mainendp
endmain
(3)已知EA_=3F56H,EC_=4690H,利用交换指令交换这两个寄存器的内容。
记录:
交换前EA_=00003F56,EC_
交换后EA_=,EC_=00003F56
操作过程中所用到的指令:
IncludeIrvine32.inc
.code
mainPROC
movea_,3F56H
movec_,4690H
callDumpRegs
_chgea_,ec_
callDumpRegs
e_it
mainENDP
ENDmain
实验二逻辑指令、跳转指令与分支程序设计
实验目的:
了解和掌握逻辑指令、比较指令、无条件/有条件转移类指令的功能和作用,以及此类指令的使用方法。
实验要求:
具体了解和掌握逻辑指令、比较指令、无条件/有条件转移类指令的使用和在使用时应注意的问题,学习分支型程序设计的一般方法。
(1)在DEBUG系统状态下,分别编制、调试并记录以下逻辑指令程序段的每一条指令的运行情况:
(Ⅰ)
moval,41┃al=29H
oral,20┃al=3DH
(Ⅱ)
moval,66┃al=42H
andal,0df┃al=00H
(Ⅲ)
movEA_,5678┃EA_=0000162EH
_orEA_,EA_┃EA_
(Ⅳ)
movEA_,0ff00┃EA_=0000FF00H
notEA_┃EA_=FFFF00FFH
(Ⅴ)
movEA_,1234┃EA_=000004D2H
testEA_,1┃EA_=000004D2HSF=0ZF=1OF=0
testEA_,2┃EA_=000004D2HSF=0ZF=0OF=0
testEA_,4┃EA_=000004D2HSF=0ZF=1OF=0
testEA_,8┃EA_=000004D2HSF=0ZF=1OF=0
testEA_,10┃EA_=000004D2HSF=0ZF=0OF=0
testEA_,20┃EA_=000004D2HSF=0ZF=0OF=0
testEA_,40┃EA_=000004D2HSF=0ZF=1OF=0
testEA_,80┃EA_=000004D2HSF=0ZF=0OF=0
test指令的作用是____将原操作数与目的操作数相与,但结果不送会目的操作数,只改变标志位,并不修改操作数____________。
(2)已知DATA单元开始存放三个带符号数,编制程序,检查三个数据是否同号,若同时为正,则在显示器上显示“+”;同时为负,则显示“-”;否则显示空格“”。
要求:
分别用三组数据(同时为正,同时为负,异号)调试程序,验证程序的正确性。
includeIrvine32.inc
.data
interraysdword23h,23h,-23h
.code
mainproc
movedi,OFFSETinterray
movea_,[edi]
andea_
pushea_
movea_,[edi+4]
andea_
pushea_
movea_,[edi+8]
andea_
pushea_
popea_
popeb_
popec_
jnzL1
cmpea_,eb_
jneL2
cmpea_,ec_
jneL2
moval,#;+#;
callWriteChar
e_it
L1:
cmpea_,eb_
jneL2
cmpea_,ec_
jneL2
moval,#;-#;
callWriteChar
e_it
L2:
moval,#;#;
callWriteChar
e_it
mainendp
endmain
实验三算术运算类指令、移位指令及循环程序设计
实验目的:
了解和掌握加、减、乘、除指令的在程序设计中的用法和应注意的问题,了解和掌握移位指令的功能、作用和方法。
了解和掌握循环控制类指令的功能、作用和方法。
学会循环程序设计的方法。
学习汇编语言输出输入语句的设计。
实验要求:
具体了解和掌握算术类指令、移位指令和循环控制类指令的使用,以及在使用时应注意的问题,学习循环程序设计的一般方法。
(1)在DEBUG系统状态下,分别编制、调试并记录以下加、减程序段的每一条指令的运行情况,查看寄存器的结果:
(Ⅰ)
MOVEA_,2389┃EA_
MOVEB_,0CEDFH┃EB_=0000CEDFH
ADDEA_,EB_┃EA_=0000D834HEB_=0000CEDFH
(Ⅱ)
MOVEA_,2389┃EA_
MOVEB_,0CEDFH┃EB_=0000CEDFH
SUBEA_,EB_┃EA_=FFFF3A76HEB_=0000CEDFH
(Ⅲ)
MOVEA_,2389┃EA_
MOVEB_,0CEDFH┃EB_=0000CEDFH
ADDAH,BH┃AH=D7BH=CE
ADDAL,BL┃AL=34BL=DF
(Ⅳ)
MOVEA_,2389┃EA_
MOVEB_,0CEDFH┃EB_=0000CEDFH
ADDAH,BH┃AH=D7BH=CE
ADCAL,BL┃AL=34BL=DFEFL=(2)在DEBUG系统状态下,分别编制、调试并记录以下乘、除程序段的每一条指令的运行情况:
(Ⅰ)
MOVAL,23┃AL=17H
MOVBL,0CEH┃BL=CEH
MULBL┃A_=1282HOV=1
(Ⅱ)
MOVA_,2389┃A_=0955H
MOVB_,0CEDFH┃B_=CEDFH
MULB_┃D_=078AHA_=870BHCF=1
(Ⅲ)
MOVA_,2389┃A_=0955H
MOVBL,0CEH┃BL=0CEH
DIVBL┃AH=7BHAL=0BH
(Ⅳ)
MOVA_,2389┃A_=0955H
MOVD_,0856┃D_=0358H
MOVB_,0CEDFH┃B_=CEDFH
DIVB_┃A_=0423HD_=44D8H
(3)在DEBUG系统状态下,分别编制、调试并记录以下移位指令程序段的每一条指令的运行情况:
(Ⅰ)
movEA_,420┃EA_=000001A4H
shlEA_,1┃CF=0EA_
(Ⅱ)
movEA_,240┃EA_=000000F0H
movcl,4┃CL=04H
shlEA_,cl┃CF=0EA_=00000F00H
(Ⅲ)
movEA_,8000┃EA_=00001F04H
movcl,4┃CL=04H
shrEA_,cl┃CF=0EA_=000001F4H
(Ⅳ)
movEA_,8000┃EA_=00001F04H
movcl,4┃CL=04H
sarEA_,cl┃CF=0EA_=000001F4H
(Ⅴ)
movEA_,8086┃EA_=00001F96H
movcl,4┃CL=04H
rolEA_,cl┃CF=0EA_=00001F96H
(Ⅵ)
movEA_,8086┃EA_=00001F96H
movcl,4┃CL=04H
rorEA_,cl┃CF=0EA_=60001F9H
(Ⅶ)
movEA_,8086┃EA_=00001F96H
movcl,4┃CL=04H
rclEA_,cl┃CF=0EA_=0001F960H
(Ⅷ)
movEA_,8086┃EA_=00001F96H
movcl,4┃CL=04H
rcrEA_,cl┃CF=0EA_=C00001F9H
rol与rcl、ror与rcr的区别在于rol和ror是将寄存器中的内容直接进行移位,而rcl和rcr是将寄存器中的内容与____CF____中的内容一起进行移位,因此参加移位的数据比原来的数据位数______多一______。
(5)已知DATA单元开始存放一组无符号的字节数据,数据长度在CNT单元存放。
编制程序,检查该组数据中是否存在数据100,若存在,则在显示器上显示“Y”,否则显示“N”。
includeIrvine32.inc
.data
ayword1,4,8,100
cntword4
.code
mainproc
movc_,cnt
L1:
mova_,0
pusha_
movb_,[ay+a_]
cmpb_,0064h
jeL2
moval,#;N#;
callWriteChar
jmpquit
L2:
moval,#;Y#;
callWriteChar
jmpquit
quit:
popa_
adda_,4
LOOPL1
e_it
mainendp
endmain
编制在屏幕上显示九九表的程序。
includeIrvine32.inc
.code
mainproc
moved_,0
L1:
callCrlf
moveb_,1
inced_
L3:
pushed_
movea_,ed_
muleb_
movesi,ea_
poped_
movea_,eb_
callWriteDec
pushed_
moval,#;_#;
callWriteChar
poped_
movea_,ed_
callWriteDec
pushed_
moval,#;=#;
callWriteChar
poped_
movea_,esi
callWriteDec
pushed_
moval,#;#;
callWriteChar
poped_
cmpeb_,9
jzL2
cmpeb_,ed_
jzL1
inceb_
jmpL3
L2:
callCrlf
e_it
mainendp
endmain
考核标准
得分
(1)正确理解和掌握实验所涉及的概念和原理(20);
(2)能正确设计程序,运行结果正确(30);(3)认真记录实验数据,原理及实验结果分析^p准确(20);(4)实验过程中,具有严谨的学习态度和认真、踏实、一丝不苟的科学作风(10);(5)所做实验具有一定的创新性(10);(6)实验报告规范(10)。
实验六
1.实验要求
(1)定义Point类,有坐标__,_y两个成员变量;对Point类重载“++”(自增)、“――”(自减)运算符,实现对坐标值的改变。
(2)定义一个车(vehiele)基类,有Run、S等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、S等成员函数。
观察虚函数的作用。
2.实验内容及实验步骤
(1)编写程序定义Point类,在类中定义整型的私有成员变量___y,定义成员函数Pointoperator++;Pointoperator++(int);以实现对Point类重载“++”(自增)运算符,定义成员函数Point&operator--;Pointoperator--(int);以实现对Point类重载“--”(自减)运算符,实现对坐标值的改变。
程序名:
1ab8_1.cpp。
(2)编写程序定义一个车(vehicle)基类,有Run、S等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、S等成员函数。
在main函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run、S函数,观察其执行情况。
再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、S定义为虚函数,再试试看。
程序名:
lab8_2.cpp。
3.程序
Lab8_1
#include
usingnamespacestd;
classPoint{
public:
Point(int_,intY):
__(_),_y(Y){}
Pointoperator++;
Pointoperator++(int);
Pointoperator--;
Pointoperator--(int);
voidPutoutconst;
private:
int__,_y;
};
voidPoint:
:
Putoutconst{
cout
usingnamespacestd;
classVehicle{
public:
voidRun{cout
usingnamespacestd;
classVehicle{
public:
virtualvoidRun{coutRun;
p->S;
}
intmain{
VehicleV;
bicycleB;
motorcarM;
motorcycleMc;
fun(V);
fun(B);
fun(M);
fun(Mc);
return0;
}
运行结果
4.思考题
(1).函数类型operator运算符(形参表)
{
函数体;}
(2).friend函数类型operator运算符(形参表)
{
函数体;}
(3).通过指向基类类型的指针和引用来调用对象的虚函数来实现
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 东北大学 汇编 实验 C+ 报告