东 北 大 学
计算机硬件技术基础实验报告
专业班级: 姓名: 学号:
实验题目: 分支程序设计 日期: 2013.11.05
一、实验目的:
1)掌握分支程序的结构;
2)掌握分支程序的设计,调试方法。 二、实验内容:
设有3个单字节无符号数存放在BUF开始的缓冲区中,编写一个能将它们从大到小重新排序的程序。 三、实验步骤:
1、编写的源程序如下所示: DATA SEGMENT BUF DB 87,234,123 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 ;排序,将最大数送AL寄存器 JAE NEXT1 XCHG AL,BL
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、保存源文件,执行masm汇编源程序,生成obj目标文件,结果无错误。 3、执行link连接程序,生成exe可执行文件,结果无错误。
4、执行debug调试程序,使用t参数单步执行程序,在AL寄存器中得到计算结果46H,结果正确,执行r参数命令察看Z所在的地址单元中的数据为0002字节单元中存放46H。 四、实验结果:
1. 执行masm编译源程序得到如下界面:
2. 执行link连接程序,生成exe可执行文件得到如下界面:
3. 排序,将最大数送A L寄存器中
4. 将最小的数送CL寄存器中
:
5. 执行debug调试程序,使用t参数单步执行程序,将3个数正确排列,结果正确,得 到如下界面:
6. 执行d参数命令察看Z所在的地址单元中的数据为0002字节单元中存放46H,得
到如下界面:
五、思考题:分支结构程序设计的关键在于准确地知道操作结果影响的标志位状态和正确地使用条件转移指令。本程序中,由于是无符号数的比较,所以也可以根据一个标志位来判定数的大小,你能说出是哪个标志位吗,且程序中的JAE指令该用什么指令替换呢?
答:可以根据CF标志位来判定数的大小。CF=0时,DST>SRC;当CF=1时,
DST
六、扩展题:在BUF开始的单元里有3个单字节无符号数,编写程序找出它们中的最小值
并存入MIN单元。
DATA SEGMENT BUF DB 16,36,56 MIN DB 0 DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
STAR: MOV AX,DATA
MOV DS,AX LEA SI,BUF MOV CX,03H
XOR AX,AX
MOV AL,[SI] CP : CMP AL,[SI]
JBE NEXT
XCHG AL,[SI] NEXT: INC SI
LOOP CP
MOV MIN,AL MOV AH,4CH
INT 21H CODE ENDS END START
东 北 大 学
计算机硬件技术基础实验报告
专业班级: 姓名: 学号:
实验题目: 分支程序设计 日期: 2013.11.05
一、实验目的:
1)掌握分支程序的结构;
2)掌握分支程序的设计,调试方法。 二、实验内容:
设有3个单字节无符号数存放在BUF开始的缓冲区中,编写一个能将它们从大到小重新排序的程序。 三、实验步骤:
1、编写的源程序如下所示: DATA SEGMENT BUF DB 87,234,123 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 ;排序,将最大数送AL寄存器 JAE NEXT1 XCHG AL,BL
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、保存源文件,执行masm汇编源程序,生成obj目标文件,结果无错误。 3、执行link连接程序,生成exe可执行文件,结果无错误。
4、执行debug调试程序,使用t参数单步执行程序,在AL寄存器中得到计算结果46H,结果正确,执行r参数命令察看Z所在的地址单元中的数据为0002字节单元中存放46H。 四、实验结果:
1. 执行masm编译源程序得到如下界面:
2. 执行link连接程序,生成exe可执行文件得到如下界面:
3. 排序,将最大数送A L寄存器中
4. 将最小的数送CL寄存器中
:
5. 执行debug调试程序,使用t参数单步执行程序,将3个数正确排列,结果正确,得 到如下界面:
6. 执行d参数命令察看Z所在的地址单元中的数据为0002字节单元中存放46H,得
到如下界面:
五、思考题:分支结构程序设计的关键在于准确地知道操作结果影响的标志位状态和正确地使用条件转移指令。本程序中,由于是无符号数的比较,所以也可以根据一个标志位来判定数的大小,你能说出是哪个标志位吗,且程序中的JAE指令该用什么指令替换呢?
答:可以根据CF标志位来判定数的大小。CF=0时,DST>SRC;当CF=1时,
DST
六、扩展题:在BUF开始的单元里有3个单字节无符号数,编写程序找出它们中的最小值
并存入MIN单元。
DATA SEGMENT BUF DB 16,36,56 MIN DB 0 DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
STAR: MOV AX,DATA
MOV DS,AX LEA SI,BUF MOV CX,03H
XOR AX,AX
MOV AL,[SI] CP : CMP AL,[SI]
JBE NEXT
XCHG AL,[SI] NEXT: INC SI
LOOP CP
MOV MIN,AL MOV AH,4CH
INT 21H CODE ENDS END START