东北大学计算机硬件基础分支程序设计实验报告.docx

上传人:b****7 文档编号:23603956 上传时间:2023-05-18 格式:DOCX 页数:28 大小:473.06KB
下载 相关 举报
东北大学计算机硬件基础分支程序设计实验报告.docx_第1页
第1页 / 共28页
东北大学计算机硬件基础分支程序设计实验报告.docx_第2页
第2页 / 共28页
东北大学计算机硬件基础分支程序设计实验报告.docx_第3页
第3页 / 共28页
东北大学计算机硬件基础分支程序设计实验报告.docx_第4页
第4页 / 共28页
东北大学计算机硬件基础分支程序设计实验报告.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

东北大学计算机硬件基础分支程序设计实验报告.docx

《东北大学计算机硬件基础分支程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《东北大学计算机硬件基础分支程序设计实验报告.docx(28页珍藏版)》请在冰豆网上搜索。

东北大学计算机硬件基础分支程序设计实验报告.docx

东北大学计算机硬件基础分支程序设计实验报告

东北大学

计算机硬件技术基础实验报告

班级:

机械0908

姓名:

学号:

20092063

实验题目:

分支程序设计

日期:

2011年11月28日

实验一

一、实验目的

1)掌握分支程序的结构;

2)掌握分支程序的设计,调试方法;

二、实验内容

设有3个单字节无符号数存放在BUF开始的缓冲区中,编写一个能将他们从大到小重新排序的程序。

三、算法描述流程图

四、实验步骤

1.输入源程序:

DATASEGMENT

BUFDB13,52,14

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVSI,OFFSETBUF

MOVAL,[SI];把3个数取到寄存器中

MOVBL,[SI+1]

MOVCL,[SI+2]

CMPAL,BL

JAENEXT1

XCHGAL,BL;排序,将最大数送AL寄存器

NEXT1:

CMPAL,CL

JAENEXT2

XCHGAL,CL

NEXT2:

CMPBL,CL;将最小数送CL寄存器

JAENEXT3

XCHGBL,CL

NEXT3:

MOV[SI],AL;从大到小依次存回缓冲区

MOV[SI+1],BL

MOV[SI+2],CL

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

2.执行emulate程序,对源程序进行调试,生成originalsourcecode和emulator:

noname.exe_文件,结果无错误。

3.执行run程序,打开程序aux,选择memory,查看地址0710:

0000,经验证运行结果为340E0D,即521413,由大到小排列,满足题目要求且无错误。

五、实验结果

1.执行emulate程序,对源程序进行调试,生成originalsourcecode和emulator:

noname.exe_文件,得到如下界面:

2.执行run程序,打开程序aux,选择memory,查看地址0710:

0000,得到如下界面:

运行结果为340E0D,即521413,由大到小排列,满足题目要求且无错误。

六、思考题

分支结构程序设计的关键在于准确地知道操作结果影响的标志位状态和正确的地使用条件转移指令。

本程序中,由于是无符号数的比较,所以也可以根据一个标志位来判定数的大小,你能说出那个是标志位吗,且程序中的JEA指令改用什么指令替换呢?

答:

可以根据CF标志位来判定数的大小。

CF=0时,DST>SRC;当CF=1时,DST

当CF=1时,用JC指令可以实现转移;当CF=0时,用JNC指令可以实现转移。

七、扩展题

在BUF开始的单元里有3个单字节无符号数,编写程序找出它们中的最小值并存入MIN单元。

1.输入源程序如下:

DSEGSEGMENT

BUFDB99,72,88

MINDB0

DSEGENDS

CODESEGMENT

ASSUMECS:

CSEG,DS,DSEG

START:

MOVAX,DSEG

MOVDS,AX

MOVSI,OFFSETBUF

MOVAL,[SI];把3个数取到寄存器中

MOVBL,[SI+1]

MOVCL,[SI+2]

CMPAL,BL;排序,将最大数送AL寄存器

JAENEXT1

XCHGAL,BL

NEXT1:

MOVMIN,BL;排序,将最小数送MIN区

CMPBL,CL

JAENEXT2

XCHGBL,CL

NEXT2:

MOVMIN,CL

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

2.执行emulate程序,对源程序进行调试,生成originalsourcecode和emulator:

noname.exe_文件,结果无错误。

3.执行run程序,打开程序aux,选择memory,查看地址0710:

0000,结果如下图。

经验证运行结果为63485848,即997288,MIN区值为48,即最小值72,无错误。

八、实验心得

通过此次试验我理解了汇编语言中编程的基本步骤,掌握了分支结构程序设计中准确知道操作结果影响的标志位状态和正确的使用无条件转移指令以及无符号数的比较方法。

这个实验,使我认识到直接通过CPU寄存器地址赋值可以大大提高效率,并且让我知道要继续练习熟读汇编语言代码的功能及用法。

实验二

一、实验目的

1)掌握分支程序的结构;

2)掌握分支程序的设计,调试方法;

二、实验内容

设有3个单字节无符号数存放在BUF开始的缓冲区中,编写一个能将他们从大到小重新排序的程序。

三、算法描述流程图

四、实验步骤

(1)x、y异号

1.输入源程序:

DATASEGMENT

XDB99

YDB-33

ZDB0

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

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转L2

JGEL2

MOVZ,-1;x<0,y<0则-1→Z,无条件EXIT

JMPEXIT

L2:

MOVZ,0;x,y异号则0→Z

EXIT:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

2.执行emulate程序,对源程序进行调试,生成originalsourcecode和emulator:

noname.exe_文件,结果无错误。

3.执行run程序,打开程序aux,选择memory,查看地址0710:

0000,经验证当x、y异号时,Z值为0,结果满足题目要求且无错误。

(2)x、y同为正

1.输入源程序:

DATASEGMENT

XDB13

YDB14

ZDB0

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

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转L2

JGEL2

MOVZ,-1;x<0,y<0则-1→Z,无条件EXIT

JMPEXIT

L2:

MOVZ,0;x,y异号则0→Z

EXIT:

MOVAH,4CH

INT21H

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

ZDB0

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

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转L2

JGEL2

MOVZ,-1;x<0,y<0则-1→Z,无条件EXIT

JMPEXIT

L2:

MOVZ,0;x,y异号则0→Z

EXIT:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

2.执行emulate程序,对源程序进行调试,生成originalsourcecode和emulator:

noname.exe_文件,结果无错误。

3.执行run程序,打开程序aux,选择memory,查看地址0710:

0000,经验证当x、y都小于0时,Z值为-1,结果符合题目要求且无错误。

五、实验结果

(1)x、y异号

1.执行emulate程序,对源程序进行调试,生成originalsourcecode和emulator:

noname.exe_文件,得到如下界面:

2.执行run程序,打开程序aux,选择memory,查看地址0710:

0000,得到如下界面:

经验证当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.输入源程序如下:

DATASEGMENT

XDB66

YDB-100

ZDB0

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

TESTX,80H

JNEL1

TESTY,80H

JNEL2

MOVZ,1

JMPEXIT

L1:

TESTY,80H

JEL2

MOVZ,-1

JMPEXIT

L2:

MOVZ,0

EXIT:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

2.执行emulate程序,对源程序进行调试,生成originalsourcecode和emulator:

noname.exe_文件,结果无错误。

3.执行run程序,打开程序aux,选择memory,查看地址0710:

0000,结果如下图

经验证运行结果为429C00,即66-1000,x、y异号,Z值为0,无错误。

七、扩展题

如果不采用上述方法判断两数的符号,而采用两数异或的方法判断两数的符号,当两数的符号不相同时,其结果的最高位必定为1;当两数的符号相同时,其结果的最高位必定为0;在根据其中一数的符号是正还是负决定两数是正数还是负数。

请做程序完成。

(1)x、y同号

1.输入源程序:

DSEGSEGMENT

XDB-3

YDB-4

ZDB0

DSEGENDS

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DSEG

START:

MOVAX,DSEG

MOVDS,AX

MOVAL,X

MOVBL,Y

XORAL,BL

JSL1

JGEL2

MOVZ,1

JMPEXIT

L1:

MOVZ,1

JMPEXIT

L2:

MOVZ,0

EXIT:

MOVAH,4CH

INT21H

CSEGENDS

ENDSTART

2.执行emulate程序,对源程序进行调试,生成originalsourcecode和emulator:

noname.exe_文件,结果无错误。

3.执行run程序,打开程序aux,选择memory,查看地址0710:

0000,结果如下图。

(2)x、y异号

1.输入源程序:

DSEGSEGMENT

XDB5

YDB-6

ZDB0

DSEGENDS

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DSEG

START:

MOVAX,DSEG

MOVDS,AX

MOVAL,X

MOVBL,Y

XORAL,BL

JSL1

JEL2

MOVZ,1

JMPEXIT

L1:

MOVZ,1

JMPEXIT

L2:

MOVZ,0

EXIT:

MOVAH,4CH

INT21H

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:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAH,1;调用键盘输入DOS中断

INT21H

CMPAL,30H;如果输入的是非数字则转M

JBM

CMPAL,39H

JAM

ANDAL,0FH

JMPN:

如果输入的是数字则转N,AL寄存器保存输入的数

M:

MOVAL,10;如果输入的是非数字则将AL寄存器送10

N:

LEABX,TAB;根据AL寄存器的值求转移地址表的地址

MOVAH,0

SHLAL,1

ADDBX,AX

JMPBX;转到地址表中对应的指令去执行

EXIT:

MOVAH,4CH

INT21H

TAB:

JMPSHORTP0;地址表

JMPSHORTP1

JMPSHORTP2

JMPSHORTP3

JMPSHORTP4

JMPSHORTP5

JMPSHORTP6

JMPSHORTP7

JMPSHORTP8

JMPSHORTP9

JMPSHORTP10

P0:

LEADX,DIS0;显示输入字符INPUTDIGIT0!

MOVAH,9

INT21H

JMPEXIT

P1:

LEADX,DIS1;显示输入字符INPUTDIGIT1!

MOVAH,9

INT21H

JMPEXIT

P2:

LEADX,DIS2;显示输入字符INPUTDIGIT2!

MOVAH,9

INT21H

JMPEXIT

P3:

LEADX,DIS3;显示输入字符INPUTDIGIT3!

MOVAH,9

INT21H

JMPEXIT

P4:

LEADX,DIS4;显示输入字符INPUTDIGIT4!

MOVAH,9

INT21H

JMPEXIT

P5:

LEADX,DIS5;显示输入字符INPUTDIGIT5!

MOVAH,9

INT21H

JMPEXIT

P6:

LEADX,DIS6;显示输入字符INPUTDIGIT6!

MOVAH,9

INT21H

JMPEXIT

P7:

LEADX,DIS7;显示输入字符INPUTDIGIT7!

MOVAH,9

INT21H

JMPEXIT

P8:

LEADX,DIS8;显示输入字符INPUTDIGIT8!

MOVAH,9

INT21H

JMPEXIT

P9:

LEADX,DIS9;显示输入字符INPUTDIGIT9!

MOVAH,9

INT21H

JMPEXIT

P10:

LEADX,DIS10;显示输入字符INPUTCHARACTER!

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.输入源程序

DATASEGMENT

DISDB'ERROR!

$'

RLTDW0

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAH,1

INT21H

CMPAL,31H

JBM

CMPAL,35H

JAM

ANDAL,0FH

JMPN

M:

LEADX,DIS

MOVAH,9

INT21H

JMPEXIT

N:

LEABX,TAB

MOVAH,0

DECAL

SHLAL,1

ADDBX,AX

JMPBX

EXIT:

MOVAH,4CH

INT21H

TAB:

JMPSHORTP0

JMPSHORTP1

JMPSHORTP2

JMPSHORTP3

JMPSHORTP4

P0:

MOVRLT,0001H

JMPEXIT

P1:

MOVRLT,0010H

JMPEXIT

P2:

MOVRLT,0011H

JMPEXIT

P3:

MOVRLT,0100H

JMPEXIT

P4:

M

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 畜牧兽医

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1