东北大学计算机硬件基础分支程序设计实验报告.docx
- 文档编号:12132417
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:24
- 大小:1.69MB
东北大学计算机硬件基础分支程序设计实验报告.docx
《东北大学计算机硬件基础分支程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《东北大学计算机硬件基础分支程序设计实验报告.docx(24页珍藏版)》请在冰豆网上搜索。
东北大学计算机硬件基础分支程序设计实验报告
东北大学
计算机硬件技术基础实验报告
班级:
机械0908姓名:
学号:
20092063
实验题目:
分支程序设计日期:
2011年11月28日
实验一
一、实验目的
1)掌握分支程序的结构;
2)掌握分支程序的设计,调试方法;
二、实验内容
设有3个单字节无符号数存放在BUF开始的缓冲区中,编写一个能将他们从大到小重新排序的程序。
三、算法描述流程图
四、实验步骤
1.输入源程序:
DATASEGMENT
BUFDB13,52,14
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOV
AX,DATA
MOV
DS,AX
MOV
SI,OFFSETBUF
MOV
AL,[SI]
;把3个数取到寄存器中
MOV
BL,[SI+1]
MOV
CL,[SI+2]
CMP
AL,BL
JAE
NEXT1
XCHGNEXT1:
CMP
AL,BLAL,CL
;排序,将最大数送AL寄存器
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
CODEENDS
END
START
2.执行emulate程序,对源程序进行调试,生成originalsourcecode和
emulator:
noname.exe_文件,结果无错误。
3.执行run程序,打开程序aux,选择memory,查看地址0710:
0000,经验证运行结果为340E0D,即521413,由大到小排列,满足题目要求且无错误。
五、实验结果
1.执行emulate程序,对源程序进行调试,生成originalsourcecode和
emulator:
noname.exe_文件,得到如下界面:
运行结果为340E0D,即521413,由大到小排列,满足题目要求且无错误。
六、思考题
分支结构程序设计的关键在于准确地知道操作结果影响的标志位状态和正
确的地使用条件转移指令。
本程序中,由于是无符号数的比较,所以也可以根据一个标志位来判定数的大小,你能说出那个是标志位吗,且程序中的JEA指令改用什么指令替换呢?
答:
可以根据CF标志位来判定数的大小。
CF=0时,DST>SRC当;CF=1时,
DST C当CF=1时,用JC指令可以实现转移;当CF=0时,用JNC指令可以实现转移。 七、扩展题 在BUF开始的单元里有3个单字节无符号数,编写程序找出它们中的最小值并存入MIN单元。 1.输入源程序如下: DSEGSEGMENT BUFDB99,72,88 MINDB0 DSEGENDS CODESEGMENT 经验证运行结果为63485848,即997288,MIN区值为48,即最小值72,无错误。 八、实验心得 通过此次试验我理解了汇编语言中编程的基本步骤,掌握了分支结构程序设计中准确知道操作结果影响的标志位状态和正确的使用无条件转移指令以及 无符号数的比较方法。 这个实验,使我认识到直接通过CPU寄存器地址赋值可以大大提高效率,并且让我知道要继续练习熟读汇编语言代码的功能及用法。 四、实验步骤 (1))x、y异号 1.输入源程序: DATASEGMENT XDB99 YDB-33 ZZDB0 DATAENDS CODESEGMENT ASSUMECS: CODE,DS: DATASTART: MOVAX,DATA 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转L2JGEL2 MOVZ,-1;x<0,y<0则-1→Z,无条件EXIT JMPEXIT L2: MOVZ,0;x,y异号则0→Z EXIT: MOVAH,4CHINT21H CODEENDS ENDSTART 2.执行emulate程序,对源程序进行调试,生成originalsourcecode和 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,无条件转 EXIT JMPEXIT L1: CMPY,0;y>=0转L2JGEL2 MOVZ,-1;x<0,y<0则-1→Z,无条件EXITJMPEXIT L2: MOVZ,0;x,y异号则0→Z EXIT: MOVAH,4CHINT21H CODEENDS ENDSTART 2.执行emulate程序,对源程序进行调试,生成originalsourcecode和 emulator: noname.exe_文件,结果无错误。 3.执行run程序,打开程序aux,选择memory,查看地址0710: 0000,经验证当x、y都大于0时,Z值为1,结果满足题目要求且无错误。 (3))x、y同为负 1.输入源程序: DATASEGMENT XDB-36 YDB-12 ZZDB0 DATAENDS CODESEGMENT ASSUMECS: CODE,DS: DATASTART: MOVAX,DATA 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转L2JGEL2 MOVZ,-1;x<0,y<0则-1→Z,无条件EXITJMPEXIT L2: MOVZ,0;x,y异号则0→Z EXIT: MOVAH,4CHINT21H CODEENDS ENDSTART 2.执行emulate程序,对源程序进行调试,生成originalsourcecode和 emulator: noname.exe_文件,结果无错误。 经验证当x、y异号时,Z值为0,结果满足题目要求且无错误。 (2))x、y同为正 1.执行emulate程序,对源程序进行调试,生成originalsourcecode和 emulator: noname.exe_文件,得到如下界面: 2.执行run程序,打开程序aux,选择memory,查看地址0710: 0000,得到如下界面: 经验证当x、y都大于0时,Z值为1,结果满足题目要求且无错误。 (3))x、y同为负 1.执行emulate程序,对源程序进行调试,生成originalsourcecode和 emulator: noname.exe_文件,得到如下界面: 2.执行run程序,打开程序aux,选择memory,查看地址0710: 0000,得到如下界面: x、y都小于0时,Z值为-1,结果符合题目要求且无错误。 六、思考题 本程序中判定符号用的是CMP指令,而用逻辑操作指令也可以。 比如,可以用AND指令,使其进行自身与操作,反映到SF标志位,还可以用TEST指令直接测试最高位,并将结果反映到ZF标志位,然后根据ZF标志位判断。 试用TEST指令编之。 答: 1.输入源程序如下: DATA SEGMENT X DB 66 Y DB -100 Z DB 0 DATA ENDS CODE SEGMENT ASSUME CS: CODE,DS: DATA START: MOV AX,DATA MOV DS,AX TEST X,80H JNE L1 TEST Y,80H JNE L2 MOV Z,1 JMPL1: JE MOV EXIT TESTY,80HL2 Z,-1 JMP EXIT L2: MOV Z,0 EXIT: MOV AH,4CH INT 21H 经验证运行结果为429C00,即66-1000,x、y异号,Z值为0,无错误。 七、扩展题 如果不采用上述方法判断两数的符号,而采用两数异或的方法判断两数的符号,当两数的符号不相同时,其结果的最高位必定为1;当两数的符号相同时,其结果的最高位必定为0;在根据其中一数的符号是正还是负决定两数是正数还是负数。 请做程序完成。 (1))x、y同号 1.输入源程序: DSEG SEGMENT X DB -3 Y DB -4 Z DB 0 DSEG ENDS CSEG SEGMENT ASSUME CS: CSEG,DS: DSEG START: MOV AX,DSEG MOV DS,AX MOV AL,X MOV BL,Y XOR AL,BL JS L1 JGE L2 MOV Z,1 JMP EXIT L1: MOV Z,1 JMP EXIT L2: MOV Z,0 (2))x、y异号 1.输入源程序: DSEGSEGMENT XDB5 YDB-6 ZZDB0 DSEGENDS CSEGSEGMENT ASSUMECS: CSEG,DS: DSEGSTART: MOVAX,DSEG MOVDS,AX MOVAL,X MOVBL,Y XORAL,BL JSL1 JEL2 MOVZ,1 JMPEXIT L1: MOVZ,1JMPEXIT L2: MOVZ,0 EXIT: MOVAH,4CHINT21H CSEGENDS ENDSTART 2.执行emulate程序,对源程序进行调试,生成originalsourcecode和 emulator: noname.exe_文件,结果无错误。 3.执行run程序,打开程序aux,选择memory,查看地址0710: 0000,结果如下 八、实验心得 通过此次试验我理解了汇编语言中编程的基本步骤,掌握了emu8086软件的基本运用,调试,对运行结果的简单分析。 能运用基本的汇编语言做一些简单的程序,尤其是对CMP指令,逻辑指令TEST和他对应的ZF指令的熟悉与运用。 实验三 一、实验目的 1)掌握分支程序的结构; 2)掌握分支程序的设计,调试方法; 二、实验内容 设有3个单字节无符号数存放在BUF开始的缓冲区中,编写一个能将他们从大到小重新排序的程序。 三、算法描述流程图 四、实验步骤 1.输入源程序 DATASEGMENT DIS0DB'INPUTDIGIT0! $'DIS1DB'INPUTDIGIT1! $'DIS2DB'INPUTDIGIT2! $'DIS3DB'INPUTDIGIT3! $'DIS4DB'INPUTDIGIT4! $'DIS5DB'INPUTDIGIT5! $'DIS6DB'INPUTDIGIT6! $'DIS7DB'INPUTDIGIT7! $'DIS8DB'INPUTDIGIT8! $'DIS9DB'INPUTDIGIT9! $' DIS10DB'INPUTCHARACTER! $'DATAENDS CODESEGMENT ASSUMECS: CODE,DS: DATASTART: MOVAX,DATA MOVDS,AX MOVAH,1;调用键盘输入DOS中断 INT21H CMPAL,30H;如果输入的是非数字则转MJBM CMPAL,39H JAM ANDAL,0FH JMPN: 如果输入的是数字则转N,AL寄存器保存输入的 数 M: MOVAL,10;如果输入的是非数字则将AL寄存器送10 N: LEA BX,TAB ;根据AL寄存器的值求转移地址表的地址 MOV AH,0 SHL AL,1 ADD BX,AX JMP BX ;转到地址表中对应的指令去执行 EXIT: MOV AH,4CH INT 21H TAB: JMP SHORTP0;地址表 JMP SHORTP1 JMP SHORTP2 JMP SHORTP3 JMP SHORTP4 JMP SHORTP5 JMP SHORTP6 JMP SHORTP7 JMP SHORTP8 JMP SHORTP9 JMP SHORTP10 P0: LEA DX,DIS0;显示输入字符INPUTDIGIT0! MOV AH,9 INT 21H JMP EXIT P1: LEA DX,DIS1 ;显示输入字符 INPUTDIGIT1! MOV AH,9 INT 21H JMP EXIT P2: LEA DX,DIS2 ;显示输入字符 INPUTDIGIT2! MOV AH,9 INT 21H JMP EXIT P3: LEA DX,DIS3 ;显示输入字符 INPUTDIGIT3! MOV AH,9 INT 21H JMP EXIT P4: LEA DX,DIS4 ;显示输入字符 INPUTDIGIT4! MOV AH,9 INT 21H JMP EXIT P5: LEA DX,DIS5 ;显示输入字符INPUTDIGIT5! MOV AH,9 INT 21H JMP EXIT P6: LEA DX,DIS6 ;显示输入字符INPUTDIGIT6! MOV AH,9 INT 21H JMP EXIT P7: LEA DX,DIS7 ;显示输入字符INPUTDIGIT7! MOV AH,9 INT 21H JMP EXIT P8: LEA DX,DIS8 ;显示输入字符INPUTDIGIT8! MOV AH,9 INT 21H JMP EXIT P9: LEA DX,DIS9 ;显示输入字符INPUTDIGIT9! MOV AH,9 INT 21H JMP EXIT P10: LEA DX,DIS10 ;显示输入字符INPUT CHARACTER! MOVAH,9 INT21H JMPEXIT CODEENDS ENDSTART 2.执行emulate程序,对源程序进行调试,生成originalsourcecode和 emulator: noname.exe_文件,结果无错误。 3.执行run程序,打开程序aux,选择memory,查看地址0710: 0000,结果无错误。 经验证,输入数字0~9时,显示INPUTDIGIT0! ~INPUTDIGIT9! ;输入其他键时,显示INPUTCHARACTER! ,结果符合题意且正确。 五、实验结果 1.执行emulate程序,对源程序进行调试,生成originalsourcecode和 emulator: noname.exe_文件,得到如下界面: 2.执行run程序,分别输入数字: “5”和字母“T”,得到如下界面: 经验证,运行结果无错误且符合题意。 六、思考题 再求相应地址是,程序中使用了SHLAL,1语句,请问这说明了什么? 答: “SHLAL,1"的命令是指将操作数乘以2,在该程序中,转移指令表中 的每条转移指令代码是由两个字节组成的,将AL寄存器中的数乘以2后再与 BX相加,就是对应输入数字的转移指令代码的有效地址。 七、扩展题 编制程序,判断键盘输入的一个数,若输入1—5,则将该数转换为二进制数存放至RLT单元,若输入其他数则显示输出“ERROR”。 1.输入源程序 DATA SEGMENT DIS DB 'ERROR! $' RLT DW 0 DATA ENDS CODE SEGMENT ASSUME CS: CODE,DS: DATA START: MOV AX,DATA MOV DS,AX MOV AH,1 INT 21H CMP AL,31H JB M CMP AL,35H JA M AND AL,0FH JMP N M: LEA DX,DIS MOV AH,9 INT 21H JMP EXIT N: LEA BX,TAB MOV AH,0 DEC AL SHL AL,1 ADD BX,AX JMP BX EXIT: MOV AH,4CH INT 21H 3.执行run程序,分别输入数字“3”和字母“M”时,得到如下界面: 经验证当输入数字1~5时,将该数转换为二进制数存放至RLT单元,当输入其他数则显示输出“ERROR”。 八、实验心得 通过这次试验我理解了汇编语言中编程的基本步骤,掌握了通过地址对数 据赋值的方法。 熟悉了emu8086软件的基本运用,调试,对运行结果的简单分析。 。 这个实验中直接通过CPU寄存器地址赋值简便快捷,运用了很多指令代码。 对以 后对单片机等的学习鉴定坚实基础。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 东北大学 计算机硬件 基础 分支 程序设计 实验 报告