东北大学汇编实验.docx
《东北大学汇编实验.docx》由会员分享,可在线阅读,更多相关《东北大学汇编实验.docx(14页珍藏版)》请在冰豆网上搜索。
东北大学汇编实验
课程编号:
B080103020
《汇编语言程序设计》
实验报告
姓名
学号
班级
指导教师
实验名称
数据传送、分支与循环结构程序设计实验
开设学期
2014-2015第一学期
开设时间
第1周——第10周
报告日期
2014年11月6日
评定成绩
评定人
评定日期
东北大学软件学院
实验1数据传送指令
1、实验目的:
了解和掌握MOV、PUSH、POP、XCHG四条指令的作用和在编程中的用法。
2、实验要求:
(Ⅰ)采用立即数寻址方式将19E0H,3F56H,0AF37H,9A81H分别送给EAX、EBX、ECX、EDX四个寄存器。
记录:
操作前EAX=75C59191、EBX=7FFDE000、ECX=00000000、EDX=00401000
操作后EAX=000019E0、EBX=00003F56、ECX=0000AF37、EDX=00009A81
操作过程中所用到的指令:
INCLUDEIrvine32.inc
.code
mainPROC
callDumpRegs
moveax,19E0H
movebx,3F56H
movecx,0AF37H
movedx,9A81H
callDumpRegs
exit
mainendp
ENDmain
(Ⅱ)采用采用寄存器寻址方式将19E0H送给EBX、ECX、EDX三个寄存器。
记录:
操作前EAX=75C59191、EBX=7FFDE000、ECX=00000000、EDX=00401000
操作后EAX=000019E0、EBX=000019E0、ECX=000019E0、EDX=000019E0操作过程中所用到的指令:
INCLUDEIrvine32.inc
.code
mainPROC
callDumpRegs
moveax,19E0H
movebx,eax
movecx,ebx
movedx,ecx
callDumpRegs
exit
mainendp
ENDmain
(2)对EAX、EBX、ECX、EDX四个寄存器进行出入堆栈的操作。
(Ⅰ)将EAX、EBX、ECX、EDX四个寄存器的内容依次压入堆栈中,注意观察栈指针寄存器和堆栈内容的变化。
记录:
压入EAX前ESP=0018FF90,(ESP)=75C5919F
压入EAX后ESP=0018FF8C,(ESP)=00000000
压入EBX前ESP=0018FF8C,(ESP)=00000000
压入EBX后ESP=0018FF88,(ESP)=00000000
压入ECX前ESP=0018FF88,(ESP)=00000000
压入ECX后ESP=0018FF84,(ESP)=00000000
压入EDX前ESP=0018FF84,(ESP)=00000000
压入EDX后ESP=0018FF80,(ESP)=FFFFC000
操作过程中所用到的指令:
INCLUDEIrvine32.inc
.code
mainPROC
callDumpRegs
moveax,[esp]
callDumpRegs
pusheax
callDumpRegs
pushebx
callDumpRegs
pushecx
callDumpRegs
pushedx
callDumpRegs
exit
mainendp
ENDmain
(Ⅱ)将堆栈中的内容依次弹出到EAX、EBX、ECX、EDX四个寄存器,注意观察栈指针寄存器和堆栈内容的变化。
记录:
弹出到EAX前ESP=0018FF90,(ESP)=00000000
弹出到EAX后ESP=0018FF94,(ESP)=00000000
弹出到EBX前ESP=0018FF94,(ESP)=00000000
弹出到EBX后ESP=0018FF98,(ESP)=00000000
弹出到ECX前ESP=0018FF98,(ESP)=00000000
弹出到ECX后ESP=0018FF9C,(ESP)=E18A40B7
弹出到EDX前ESP=0018FF9C,(ESP)=E18A40B7
弹出到EDX后ESP=0018FFA0,(ESP)=FFFFF801
操作过程中所用到的指令:
includeIrvine32.inc
.code
mainproc
movesi,[esp]
callDumpRegs
pusheax
movesi,[esp]
callDumpRegs
pushebx
movesi,[esp]
callDumpRegs
pushecx
movesi,[esp]
callDumpRegs
pushedx
popedx
movesi,[esp]
callDumpRegs
popecx
movesi,[esp]
callDumpRegs
popebx
movesi,[esp]
callDumpRegs
popeax
movesi,[esp]
callDumpRegs
exit
mainendp
endmain
(3)已知EAX=3F56H,ECX=4690H,利用交换指令交换这两个寄存器的内容。
记录:
交换前EAX=00003F56,ECX=00004690
交换后EAX=00004690,ECX=00003F56
操作过程中所用到的指令:
IncludeIrvine32.inc
.code
mainPROC
moveax,3F56H
movecx,4690H
callDumpRegs
xchgeax,ecx
callDumpRegs
exit
mainENDP
ENDmain
实验二逻辑指令、跳转指令与分支程序设计
1、实验目的:
了解和掌握逻辑指令、比较指令、无条件/有条件转移类指令的功能和作用,以及此类指令的使用方法。
2、实验要求:
具体了解和掌握逻辑指令、比较指令、无条件/有条件转移类指令的使用和在使用时应注意的问题,学习分支型程序设计的一般方法。
(1)在DEBUG系统状态下,分别编制、调试并记录以下逻辑指令程序段的每一条指令的运行情况:
(Ⅰ)
moval,41┃al=29H
oral,20┃al=3DH
(Ⅱ)
moval,66┃al=42H
andal,0df┃al=00H
(Ⅲ)
movEAX,5678┃EAX=0000162EH
xorEAX,EAX┃EAX=00000000H
(Ⅳ)
movEAX,0ff00┃EAX=0000FF00H
notEAX┃EAX=FFFF00FFH
(Ⅴ)
movEAX,1234┃EAX=000004D2H
testEAX,1┃EAX=000004D2HSF=0ZF=1OF=0
testEAX,2┃EAX=000004D2HSF=0ZF=0OF=0
testEAX,4┃EAX=000004D2HSF=0ZF=1OF=0
testEAX,8┃EAX=000004D2HSF=0ZF=1OF=0
testEAX,10┃EAX=000004D2HSF=0ZF=0OF=0
testEAX,20┃EAX=000004D2HSF=0ZF=0OF=0
testEAX,40┃EAX=000004D2HSF=0ZF=1OF=0
testEAX,80┃EAX=000004D2HSF=0ZF=0OF=0
test指令的作用是____将原操作数与目的操作数相与,但结果不送会目的操作数,只改变标志位,并不修改操作数____________。
(2)已知DATA单元开始存放三个带符号数,编制程序,检查三个数据是否同号,若同时为正,则在显示器上显示“+”;同时为负,则显示“-”;否则显示空格“”。
要求:
分别用三组数据(同时为正,同时为负,异号)调试程序,验证程序的正确性。
includeIrvine32.inc
.data
interraysdword23h,23h,-23h
.code
mainproc
movedi,OFFSETinterray
moveax,[edi]
andeax,80000000h
pusheax
moveax,[edi+4]
andeax,80000000h
pusheax
moveax,[edi+8]
andeax,80000000h
pusheax
popeax
popebx
popecx
jnzL1
cmpeax,ebx
jneL2
cmpeax,ecx
jneL2
moval,'+'
callWriteChar
exit
L1:
cmpeax,ebx
jneL2
cmpeax,ecx
jneL2
moval,'-'
callWriteChar
exit
L2:
moval,''
callWriteChar
exit
mainendp
endmain
实验三算术运算类指令、移位指令及循环程序设计
1、实验目的:
了解和掌握加、减、乘、除指令的在程序设计中的用法和应注意的问题,了解和掌握移位指令的功能、作用和方法。
了解和掌握循环控制类指令的功能、作用和方法。
学会循环程序设计的方法。
学习汇编语言输出输入语句的设计。
2、实验要求:
具体了解和掌握算术类指令、移位指令和循环控制类指令的使用,以及在使用时应注意的问题,学习循环程序设计的一般方法。
(1)在DEBUG系统状态下,分别编制、调试并记录以下加、减程序段的每一条指令的运行情况,查看寄存器的结果:
(Ⅰ)
MOVEAX,2389┃EAX=00000955H
MOVEBX,0CEDFH┃EBX=0000CEDFH
ADDEAX,EBX┃EAX=0000D834HEBX=0000CEDFH
(Ⅱ)
MOVEAX,2389┃EAX=00000955H
MOVEBX,0CEDFH┃EBX=0000CEDFH
SUBEAX,EBX┃EAX=FFFF3A76HEBX=0000CEDFH
(Ⅲ)
MOVEAX,2389┃EAX=00000955H
MOVEBX,0CEDFH┃EBX=0000CEDFH
ADDAH,BH┃AH=D7BH=CE
ADDAL,BL┃AL=34BL=DF
(Ⅳ)
MOVEAX,2389┃EAX=00000955H
MOVEBX,0CEDFH┃EBX=0000CEDFH
ADDAH,BH┃AH=D7BH=CE
ADCAL,BL┃AL=34BL=DFEFL=00000213
(2)在DEBUG系统状态下,分别编制、调试并记录以下乘、除程序段的每一条指令的运行情况:
(Ⅰ)
MOVAL,23┃AL=17H
MOVBL,0CEH┃BL=CEH
MULBL┃AX=1282HOV=1
(Ⅱ)
MOVAX,2389┃AX=0955H