东北大学计算机硬件基础知识分支程序设计实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
东北大学
计算机硬件技术基础实验报告
班级:机械0908 姓名:学号:20092063
实验题目:分支程序设计日期:2011年11月28日
实验一
一、实验目的
1) 掌握分支程序的结构;
2) 掌握分支程序的设计,调试方法;
二、实验内容
设有3个单字节无符号数存放在BUF开始的缓冲区中,编写一个能将他们
从大到小重新排序的程序。
三、算法描述流程图
四、实验步骤
1. 输入源程序:
DATA SEGMENT
BUF DB 13,52 ,14
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET BUF
MOV AL,[SI] ;把3个数取到寄存器中
MOV BL,[SI+1]
MOV CL,[SI+2]
CMP AL,BL
JAE NEXT1
XCHG AL,BL ;排序,将最大数送AL寄存器
NEXT1: CMP AL,CL
JAE NEXT2
XCHG AL,CL
NEXT2: CMP BL,CL ;将最小数送CL寄存器
JAE NEXT3
XCHG BL,CL
NEXT3: MOV [SI],AL ;从大到小依次存回缓冲区
MOV [SI+1],BL
MOV [SI+2],CL
MOV AH,4CH
INT 21H
CODE ENDS
END START
2.执行emulate程序,对源程序进行调试,生成original source code和emulator:noname.exe_文件,结果无错误。
3.执行run程序,打开程序aux,选择memory,查看地址0710:0000,经验证运行结果为34 0E 0D,即52 14 13,由大到小排列,满足题目要求且无错误。
五、实验结果
1.执行emulate程序,对源程序进行调试,生成original source code和emulator:noname.exe_文件,得到如下界面:
2.执行run程序,打开程序aux,选择memory,查看地址0710:0000,得到如下界面:
运行结果为34 0E 0D,即52 14 13,由大到小排列,满足题目要求且无错误。
六、思考题
分支结构程序设计的关键在于准确地知道操作结果影响的标志位状态和正确的地使用条件转移指令。本程序中,由于是无符号数的比较,所以也可以根据一个标志位来判定数的大小,你能说出那个是标志位吗,且程序中的JEA指令改用什么指令替换呢?
答:可以根据CF标志位来判定数的大小。CF=0时,DST>SRC;当CF=1时,DST 七、扩展题 在BUF开始的单元里有3个单字节无符号数,编写程序找出它们中的最小值并存入MIN单元。 1.输入源程序如下: DSEG SEGMENT BUF DB 99,72,88 MIN DB 0 DSEG ENDS CODE SEGMENT ASSUME CS:CSEG,DS,DSEG START: MOV AX,DSEG MOV DS,AX MOV SI,OFFSET BUF MOV AL,[SI] ;把3个数取到寄存器中 MOV BL,[SI+1] MOV CL,[SI+2] CMP AL,BL ;排序,将最大数送AL寄存器 JAE NEXT1 XCHG AL,BL NEXT1: MOV MIN,BL ;排序,将最小数送MIN 区 CMP BL,CL JAE NEXT2 XCHG BL,CL NEXT2: MOV MIN,CL MOV AH,4CH INT 21H CODE ENDS END START 2.执行emulate程序,对源程序进行调试,生成original source code和emulator:noname.exe_文件,结果无错误。 3.执行run程序,打开程序aux,选择memory,查看地址0710:0000,结果如下图。 经验证运行结果为63 48 58 48,即99 72 88,MIN区值为48,即最小值72,无错误。 八、实验心得 通过此次试验我理解了汇编语言中编程的基本步骤,掌握了分支结构程序设计中准确知道操作结果影响的标志位状态和正确的使用无条件转移指令以及无符号数的比较方法。这个实验,使我认识到直接通过CPU寄存器地址赋值可以大大提高效率,并且让我知道要继续练习熟读汇编语言代码的功能及用法。 实验二 一、实验目的 1) 掌握分支程序的结构; 2) 掌握分支程序的设计,调试方法; 二、实验内容 设有3个单字节无符号数存放在BUF开始的缓冲区中,编写一个能将他们从大到小重新排序的程序。 三、算法描述流程图 四、实验步骤 (1)x、y异号 1. 输入源程序: DATA SEGMENT X DB 99 Y DB -33 Z DB 0 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX CMP X,0 ;x与0进行比较 JL L1 ;x<0转L1 CMP 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 MOV Z,-1 ;x<0,y<0则-1→Z,无条件EXIT JMP EXIT L2: MOV Z,0 ;x,y异号则0→Z EXIT: MOV AH,4CH INT 21H CODE ENDS END START 2.执行emulate程序,对源程序进行调试,生成original source code和emulator:noname.exe_文件,结果无错误。 3.执行run程序,打开程序aux,选择memory,查看地址0710:0000,经验证当x、y异号时,Z值为0,结果满足题目要求且无错误。 (2)x、y同为正 1. 输入源程序: DATA SEGMENT X DB 13 Y DB 14 Z DB 0 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX CMP X,0 ;x与0进行比较 JL L1 ;x<0转L1 CMP Y,0 JL L2 ;y<0转L2 MOV Z,1 ;x>=0,y>=0则1→Z,无条件转