东北大学计算机硬件基础 第二次实验报告文档格式.docx
《东北大学计算机硬件基础 第二次实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《东北大学计算机硬件基础 第二次实验报告文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
若x、y都大于0,z赋值1;
若x、y都小于0,z赋值-1;
若x、y异号,z赋值0。
(x、y的值均在-128~+127之间)
三、算法描述流程图
四、实验步骤
1.输入源程序:
DATA
SEGMENT
X
DB
23
Y
-10
Z
0
DATA
ENDS
CODE
ASSUMECS:
CODE,DS:
DATA
START:
MOV
AX,DATA
DS,AX
CMP
X,0
;
x与0进行比较
JS
L1
x〈0转L1
Y,0
JL
L2
y〈0转L2
MOV
Z,1
x〉=0,y〉=0则1—〉Z,无条件转EXIT
JMP
EXIT
L1:
CMP
Y,0
y〉=0转L2
JGE
L2
Z,-1
x〈0,y〈0则-1—〉Z,无条件转EXIT
L2:
Z,0
x、y异号时则0—〉Z
EXIT:
AH,4CH
INT
21H
END
START
2.保存源文件,执行masm汇编源程序,生成obj目标文件,结果无错误。
3.执行link连接程序,生成exe可执行文件,结果无错误。
4.执行debug调试程序,使用t参数单步执行程序,
五、实验结果
1.执行masm编译源程序得到如下界面:
2.执行link连接程序,生成exe可执行文件得到如下界面:
3.执行debug调试程序,使用t参数单步执行程序,
4.执行d参数命令察看Z所在的地址单元中的数据为0002字节单元中存放46H,得到如下界面:
六、思考题
本程序中判定符号用的是CMP指令,而用逻辑操作指令也可以。
比如,可以用AND指令,使其进行自身与操作,反应到SF标志位。
还可以用TEST指令直接测试最高位,并将结果反应到ZF标志位,然后根据ZF标志判断。
试用TEST指令编之。
DATASEGMENT
XDB23
YDB-10
ZDB0
DATAENDS
CODESEGMENT
ASSUMECS:
MOVAX,DATA
MOVDS,AX
MOVAL,X
ANDAL,AL;
JSL1;
MOVAH,Y
ANDAH,AH
JSL2;
MOVZ,1;
JMPEXIT
ANDAH,AH;
JNSL2
MOVZ,-1;
MOVZ,0;
MOVBL,Z
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
生成OBJ文件
生成EXE文件
执行u指令,进行反编译
执行t指令,
执行d,查看内存地址
七、扩展题
如果不采用上述方法判断两数的符号,而采用两数异或的方法判断两数的符号,当两数的符号不相同时,其结果的最高位必定为1;
当两数的符号相同时,其结果的最高位必定为0;
在根据其中一数的符号是正还是负决定两数是正数还是负数。
请作程序完成。
MOVDS,AX
MOVAL,X
MOVBL,Y
XORAL,BL
TESTAL,80H
JZL1;
若ZF=1,AL与BL同号
MOVZ,0
JMPEXIT
CMPBL,0
JSL2;
则SF=1,转动L2
MOVZ,1;
AL>
0.BL>
JMPEXIT
MOVZ,-1;
AL<
0,BL<
MOVAH,4CH
INT21H
ENDSTART
执行debug指令,执行u进行反编译
执行t
八、实验心得
理解了汇编语言中编程的基本步骤,掌握了通过地址对数据赋值的方法。
掌握汇编语言编制基本顺序结构的算法,包括地址取值和加法的算法步骤等。
这个实验,使我可以在编程中认识到直接通过CPU寄存器地址赋值可以大大提高了程序效率,但我要继续练习熟读汇编语言代码的能力。