东北大学计算机硬件基础分支程序设计实验报告.doc_第1页
东北大学计算机硬件基础分支程序设计实验报告.doc_第2页
东北大学计算机硬件基础分支程序设计实验报告.doc_第3页
东北大学计算机硬件基础分支程序设计实验报告.doc_第4页
东北大学计算机硬件基础分支程序设计实验报告.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

;.东 北 大 学计算机硬件技术基础实验报告班级:机械0908姓名:学号:20092063实验题目:分支程序设计日期:2011年11月28日实验一一、实验目的1) 掌握分支程序的结构;2) 掌握分支程序的设计,调试方法;二、实验内容 设有3个单字节无符号数存放在BUF开始的缓冲区中,编写一个能将他们从大到小重新排序的程序。三、算法描述流程图 四、实验步骤1. 输入源程序:DATA SEGMENT BUF DB 13,52 ,14DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: 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,CLNEXT2: CMP BL,CL ;将最小数送CL寄存器 JAE NEXT3 XCHG BL,CLNEXT3: MOV SI,AL ;从大到小依次存回缓冲区 MOV SI+1,BL MOV SI+2,CL MOV AH,4CH INT 21HCODE ENDS END START2.执行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时,DSTSRC;当CF=1时,DSTRSC。当CF=1时,用JC指令可以实现转移;当CF=0时,用JNC指令可以实现转移。七、扩展题 在BUF开始的单元里有3个单字节无符号数,编写程序找出它们中的最小值并存入MIN单元。1输入源程序如下:DSEGSEGMENTBUFDB 99,72,88MINDB 0DSEGENDSCODE SEGMENT ASSUMECS:CSEG,DS,DSEGSTART: MOV AX,DSEG MOV DS,AX MOV SI,OFFSET BUFMOV AL,SI ;把3个数取到寄存器中MOV BL,SI+1MOV CL,SI+2CMP AL,BL ;排序,将最大数送AL寄存器JAE NEXT1XCHG AL,BLNEXT1: MOV MIN,BL ;排序,将最小数送MIN区 CMP BL,CL JAE NEXT2 XCHG BL,CLNEXT2: MOV MIN,CL MOV AH,4CH INT 21HCODE ENDSEND START2.执行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 SEGMENTXDB99YDB-33ZDB0DATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATASTART: MOV AX,DATA MOVDS,AX CMPX,0 ;x与0进行比较 JLL1 ;x0转L1CMPY,0JLL2 ;y=0,y=0则1Z,无条件转EXIT JMPEXIT L1: CMPY,0 ;y=0转L2 JGEL2MOVZ,-1 ;x0,y0则-1Z,无条件EXITJMPEXIT L2: MOVZ,0 ;x,y异号则0ZEXIT: MOVAH,4CH INT21HCODEENDSENDSTART 2.执行emulate程序,对源程序进行调试,生成original source code和emulator:noname.exe_文件,结果无错误。3.执行run程序,打开程序aux,选择memory,查看地址0710:0000,经验证当x、y异号时,Z值为0,结果满足题目要求且无错误。(2)x、y同为正1. 输入源程序:DATA SEGMENTXDB13YDB14ZDB0DATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATASTART: MOV AX,DATA MOVDS,AX CMPX,0 ;x与0进行比较 JLL1 ;x0转L1CMPY,0JLL2 ;y=0,y=0则1Z,无条件转EXIT JMPEXIT L1: CMPY,0 ;y=0转L2 JGEL2MOVZ,-1 ;x0,y0则-1Z,无条件EXITJMPEXIT L2: MOVZ,0 ;x,y异号则0ZEXIT: MOVAH,4CH INT21HCODEENDSENDSTART2.执行emulate程序,对源程序进行调试,生成original source code和emulator:noname.exe_文件,结果无错误。3.执行run程序,打开程序aux,选择memory,查看地址0710:0000,经验证当x、y都大于0时,Z值为1,结果满足题目要求且无错误。(3)x、y同为负1. 输入源程序:DATA SEGMENTXDB-36YDB-12ZDB0DATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATASTART: MOV AX,DATA MOVDS,AX CMPX,0 ;x与0进行比较 JLL1 ;x0转L1CMPY,0JLL2 ;y=0,y=0则1Z,无条件转EXIT JMPEXIT L1: CMPY,0 ;y=0转L2 JGEL2MOVZ,-1 ;x0,y0则-1Z,无条件EXITJMPEXIT L2: MOVZ,0 ;x,y异号则0ZEXIT: MOVAH,4CH INT21HCODEENDSENDSTART2.执行emulate程序,对源程序进行调试,生成original source code和emulator:noname.exe_文件,结果无错误。3.执行run程序,打开程序aux,选择memory,查看地址0710:0000, 经验证当x、y都小于0时,Z值为-1,结果符合题目要求且无错误。五、实验结果(1)x、y异号1.执行emulate程序,对源程序进行调试,生成original source code和emulator:noname.exe_文件,得到如下界面: 2.执行run程序,打开程序aux,选择memory,查看地址0710:0000,得到如下界面:经验证当x、y异号时,Z值为0,结果满足题目要求且无错误。(2)x、y同为正1.执行emulate程序,对源程序进行调试,生成original source code和emulator:noname.exe_文件,得到如下界面: 2.执行run程序,打开程序aux,选择memory,查看地址0710:0000,得到如下界面:经验证当x、y都大于0时,Z值为1,结果满足题目要求且无错误。(3)x、y同为负1.执行emulate程序,对源程序进行调试,生成original source code和emulator:noname.exe_文件,得到如下界面: 2.执行run程序,打开程序aux,选择memory,查看地址0710:0000,得到如下界面:x、y都小于0时,Z值为-1,结果符合题目要求且无错误。六、思考题 本程序中判定符号用的是CMP指令,而用逻辑操作指令也可以。比如,可以用AND指令,使其进行自身与操作,反映到SF标志位,还可以用TEST指令直接测试最高位,并将结果反映到ZF标志位,然后根据ZF标志位判断。试用TEST指令编之。 答:1.输入源程序如下:DATA SEGMENTX DB 66Y DB -100Z DB 0DATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXTEST X,80HJNE L1TEST Y,80HJNE L2MOV Z,1JMP EXITL1: TEST Y,80HJE L2MOV Z,-1JMP EXITL2: MOV Z,0EXIT: MOV AH,4CHINT 21HCODE ENDSEND START2.执行emulate程序,对源程序进行调试,生成original source code和emulator:noname.exe_文件,结果无错误。3.执行run程序,打开程序aux,选择memory,查看地址0710:0000,结果如下图经验证运行结果为42 9C 00,即66 -100 0,x、y异号,Z值为0,无错误。七、扩展题 如果不采用上述方法判断两数的符号,而采用两数异或的方法判断两数的符号,当两数的符号不相同时,其结果的最高位必定为1;当两数的符号相同时,其结果的最高位必定为0;在根据其中一数的符号是正还是负决定两数是正数还是负数。请做程序完成。(1)x、y同号1. 输入源程序:DSEGSEGMENTX DB -3Y DB -4Z DB 0DSEG ENDSCSEGSEGMENT ASSUME CS:CSEG,DS:DSEGSTART: MOV AX,DSEG MOV DS,AX MOV AL,X MOV BL,Y XOR AL,BL JS L1 JGE L2 MOV Z,1 JMP EXITL1:MOV Z,1 JMP EXITL2: MOV Z,0EXIT: MOV AH,4CH INT 21HCSEGENDSEND START 2.执行emulate程序,对源程序进行调试,生成original source code和emulator:noname.exe_文件,结果无错误。3.执行run程序,打开程序aux,选择memory,查看地址0710:0000,结果如下图。(2)x、y异号1. 输入源程序:DSEGSEGMENTX DB 5Y DB -6Z DB 0DSEG ENDSCSEGSEGMENT ASSUME CS:CSEG,DS:DSEGSTART: MOV AX,DSEG MOV DS,AX MOV AL,X MOV BL,Y XOR AL,BL JS L1 JE L2 MOV Z,1 JMP EXITL1:MOV Z,1 JMP EXITL2: MOV Z,0EXIT: MOV AH,4CH INT 21HCSEGENDSEND START 2.执行emulate程序,对源程序进行调试,生成original source code和emulator:noname.exe_文件,结果无错误。3.执行run程序,打开程序aux,选择memory,查看地址0710:0000,结果如下图。八、实验心得通过此次试验我理解了汇编语言中编程的基本步骤,掌握了emu8086软件的基本运用,调试,对运行结果的简单分析。能运用基本的汇编语言做一些简单的程序,尤其是对CMP指令,逻辑指令TEST和他对应的ZF指令的熟悉与运用。实验三一、实验目的1) 掌握分支程序的结构;2) 掌握分支程序的设计,调试方法;二、实验内容 设有3个单字节无符号数存放在BUF开始的缓冲区中,编写一个能将他们从大到小重新排序的程序。三、算法描述流程图 四、实验步骤1. 输入源程序DATA SEGMENTDIS0DB INPUT DIGIT 0 !$ DIS1DB INPUT DIGIT 1 !$ DIS2DB INPUT DIGIT 2 !$ DIS3DB INPUT DIGIT 3 !$ DIS4DB INPUT DIGIT 4 !$ DIS5DB INPUT DIGIT 5 !$ DIS6DB INPUT DIGIT 6 !$ DIS7DB INPUT DIGIT 7 !$ DIS8DB INPUT DIGIT 8 !$ DIS9DB INPUT DIGIT 9 !$ DIS10DB INPUT CHARACTER !$ DATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AX MOVAH,1 ;调用键盘输入DOS中断 INT21H CMPAL,30H ;如果输入的是非数字则转M JBM CMPAL,39H JAM ANDAL,0FH JMPN :如果输入的是数字则转N,AL寄存器保存输入的数M: MOVAL,10 ;如果输入的是非数字则将AL寄存器送10N: LEABX,TAB ;根据AL寄存器的值求转移地址表的地址 MOVAH,0 SHLAL,1 ADDBX,AX JMPBX ;转到地址表中对应的指令去执行EXIT:MOVAH,4CHINT21HTAB:JMPSHORT P0 ;地址表JMPSHORT P1JMPSHORT P2JMPSHORT P3JMPSHORT P4JMPSHORT P5JMPSHORT P6JMPSHORT P7JMPSHORT P8JMPSHORT P9JMPSHORT P10P0:LEADX,DIS0 ;显示输入字符INPUT DIGIT0 !MOVAH,9INT21HJMP EXITP1:LEADX,DIS1 ;显示输入字符INPUT DIGIT1 !MOVAH,9INT21HJMPEXITP2:LEADX,DIS2 ;显示输入字符INPUT DIGIT2 !MOVAH,9INT21HJMPEXITP3:LEADX,DIS3 ;显示输入字符INPUT DIGIT3 !MOVAH,9INT21HJMPEXITP4:LEADX,DIS4 ;显示输入字符INPUT DIGIT4 !MOVAH,9INT21HJMPEXITP5:LEADX,DIS5 ;显示输入字符INPUT DIGIT5 !MOVAH,9INT21HJMPEXITP6:LEADX,DIS6 ;显示输入字符INPUT DIGIT6 !MOVAH,9INT21HJMPEXITP7:LEADX,DIS7 ;显示输入字符INPUT DIGIT7 !MOVAH,9INT21HJMPEXITP8:LEADX,DIS8 ;显示输入字符INPUT DIGIT8 !MOVAH,9INT21HJMPEXITP9:LEADX,DIS9 ;显示输入字符INPUT DIGIT9 !MOVAH,9INT21HJMPEXITP10:LEADX,DIS10 ;显示输入字符INPUT CHARACTER !MOVAH,9INT21HJMPEXITCODEENDSENDSTART 2.执行emulate程序,对源程序进行调试,生成original source code和emulator:noname.exe_文件,结果无错误。3.执行run程序,打开程序aux,选择memory,查看地址0710:0000,结果无错误。经验证,输入数字09时,显示INPUT DIGIT0 ! INPUT DIGIT9 !;输入其他键时,显示INPUT CHARACTER !,结果符合题意且正确。五、实验结果1.执行emulate程序,对源程序进行调试,生成original source code和emulator:noname.exe_文件,得到如下界面: 2.执行run程序,分别输入数字:“5”和字母“T”,得到如下界面:经验证,运行结果无错误且符合题意。六、思考题再求相应地址是,程序中使用了SHL AL,1语句,请问这说明了什么?答:“SHL AL,1的命令是指将操作数乘以2,在该程序中,转移指令表中的每条转移指令代码是由两个字节组成的,将AL寄存器中的数乘以2后再与BX相加,就是对应输入数字的转移指令代码的有效地址。七、扩展题编制程序,判断键盘输入的一个数,若输入15,则将该数转换为二进制数存放至RLT单元,若输入其他数则显示输出“ERROR”。1. 输

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论