东北大学计算机硬件基础分支程序设计实验报告Word文档格式.docx
《东北大学计算机硬件基础分支程序设计实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《东北大学计算机硬件基础分支程序设计实验报告Word文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
设有3个单字节无符号数存放在BUF开始的缓冲区中,编写一个能将他们从大到小重新排序的程序。
三、算法描述流程图
四、实验步骤
1.输入源程序:
DATASEGMENT
BUFDB13,52,14
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETBUF
MOVAL,[SI];
把3个数取到寄存器中
MOVBL,[SI+1]
MOVCL,[SI+2]
CMPAL,BL
JAENEXT1
XCHGAL,BL;
排序,将最大数送AL寄存器
NEXT1:
CMPAL,CL
JAENEXT2
XCHGAL,CL
NEXT2:
CMPBL,CL;
将最小数送CL寄存器
JAENEXT3
XCHGBL,CL
NEXT3:
MOV[SI],AL;
从大到小依次存回缓冲区
MOV[SI+1],BL
MOV[SI+2],CL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2.执行emulate程序,对源程序进行调试,生成originalsourcecode和emulator:
noname.exe_文件,结果无错误。
3.执行run程序,打开程序aux,选择memory,查看地址0710:
0000,经验证运行结果为340E0D,即521413,由大到小排列,满足题目要求且无错误。
五、实验结果
1.执行emulate程序,对源程序进行调试,生成originalsourcecode和emulator:
noname.exe_文件,得到如下界面:
2.执行run程序,打开程序aux,选择memory,查看地址0710:
0000,得到如下界面:
运行结果为340E0D,即521413,由大到小排列,满足题目要求且无错误。
六、思考题
分支结构程序设计的关键在于准确地知道操作结果影响的标志位状态和正确的地使用条件转移指令。
本程序中,由于是无符号数的比较,所以也可以根据一个标志位来判定数的大小,你能说出那个是标志位吗,且程序中的JEA指令改用什么指令替换呢?
答:
可以根据CF标志位来判定数的大小。
CF=0时,DST>
SRC;
当CF=1时,DST<
RSC。
当CF=1时,用JC指令可以实现转移;
当CF=0时,用JNC指令可以实现转移。
七、扩展题
在BUF开始的单元里有3个单字节无符号数,编写程序找出它们中的最小值并存入MIN单元。
1.输入源程序如下:
DSEGSEGMENT
BUFDB99,72,88
MINDB0
DSEGENDS
CODESEGMENT
ASSUMECS:
CSEG,DS,DSEG
MOVAX,DSEG
MOVDS,AX
MOVSI,OFFSETBUF
MOVAL,[SI];
MOVBL,[SI+1]
MOVCL,[SI+2]
CMPAL,BL;
JAENEXT1
XCHGAL,BL
MOVMIN,BL;
排序,将最小数送MIN区
CMPBL,CL
JAENEXT2
XCHGBL,CL
MOVMIN,CL
MOVAH,4CH
INT21H
ENDSTART
0000,结果如下图。
经验证运行结果为63485848,即997288,MIN区值为48,即最小值72,无错误。
八、实验心得
通过此次试验我理解了汇编语言中编程的基本步骤,掌握了分支结构程序设计中准确知道操作结果影响的标志位状态和正确的使用无条件转移指令以及无符号数的比较方法。
这个实验,使我认识到直接通过CPU寄存器地址赋值可以大大提高效率,并且让我知道要继续练习熟读汇编语言代码的功能及用法。
实验二
(1)x、y异号
DATASEGMENT
XDB99
YDB-33
ZDB0
DATAENDS
ASSUMECS:
MOVDS,AX
CMPX,0;
x与0进行比较
JLL1;
x<
0转L1
CMPY,0
JLL2;
y<
0转L2
MOVZ,1;
x>
=0,y>
=0则1→Z,无条件转EXIT
JMPEXIT
L1:
CMPY,0;
y>
=0转L2
JGEL2
MOVZ,-1;
0,y<
0则-1→Z,无条件EXIT
JMPEXIT
L2:
MOVZ,0;
x,y异号则0→Z
EXIT:
MOVAH,4CH
INT21H
ENDSTART
0000,经验证当x、y异号时,Z值为0,结果满足题目要求且无错误。
(2)x、y同为正
XDB13
YDB14
ENDSTART
0000,经验证当x、y都大于0时,Z值为1,结果满足题目要求且无错误。
(3)x、y同为负
XDB-36
YDB-12
0000,经验证当x、y都小于0时,Z值为-1,结果符合题目要求且无错误。
经验证当x、y异号时,Z值为0,结果满足题目要求且无错误。
经验证当x、y都大于0时,Z值为1,结果满足题目要求且无错误。
x、y都小于0时,Z值为-1,结果符合题目要求且无错误。
本程序中判定符号用的是CMP指令,而用逻辑操作指令也可以。
比如,可以用AND指令,使其进行自身与操作,反映到SF标志位,还可以用TEST指令直接测试最高位,并将结果反映到ZF标志位,然后根据ZF标志位判断。
试用TEST指令编之。
1.输入源程序如下:
XDB66
YDB-100
ZDB0
ASSUMECS:
STAR