您的位置首页百科问答

实验七八九

实验七八九

的有关信息介绍如下:

实验七八九

实验七分支程序实验目的1、掌握利用间接转移指令JMPBX实现多岔分支的方法。

2、宏替换指令MACRO及ENDM。

3、符号扩展指令CBW。

实验内容DISPMACROMSG

LEADX,MSG

MOVAH,9

INT21H

MOVAH,4CH

INT21H

ENDM

STACKSEGMENTSTACK

DB256DUP(0)

STACKENDS

DATASEGMENT

PARMDB16DUP(?)

BRTABLEDWOFFSETBRA,OFFSETBRB,OFFSETBRC

DWOFFSETBRD,OFFSETBRE,OFFSETBRF

MSGADB"ILIKEMYIBM-PC!$"

MSGBDB"HOWAREYOU!$"

MSGCDB"PROGRAMDESIGN$"

MSGDDB"THISISASAMPLE$"

MSGEDB"WELLCOMEUSEMYCOPUTER!$"

MSGFDB"THEASSEMBLERLANGUAGEOF8086$"

ERRMSDB"ERROR!INVALIDPARAMETER!$"

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

START:MOVAX,DATA

MOVES,AX

MOVSI,80H

LEADI,PARM

MOVCX,16

CLD

REPMOVSB

MOVDS,AX

CMPPARM,2

JCERR

MOVAL,PARM+2

SUBAL,30H

JCERR

CMPAL,6

JNCERR

LEABX,BRTABLE

CBW

ADDAX,AX

ADDBX,AX

JMP[BX]

ERR:DISPERRMS

BRA:DISPMSGA

BRB:DISPMSGB

BRC:DISPMSGC

BRD:DISPMSGD

BRE:DISPMSGE

BRF:DISPMSGF

CODEENDS

ENDSTART

实验步骤1、输入并汇编此程序。要求生成一个.LST文件。用TYPE命令检查.LST文件,观察宏替换命令产生的指令集。

2、将OBJ文件连接成EXE文件(假设为AA.EXE)。

3、用命令DEBUGAA.EXEXXX(XXX为任意字符串)将AA.EXE带参数调入DEBUG用D命令观察DS:0080处的命令行,记录80H处的内容和字符个数的关系。

4、退出DEBUG。直接带参数运行此程序:

AAn(n=0--5)

依次观察并记录n从0到5时的运行结果。

实验八多重循环程序实验目的1、掌握多重循环程序和排序程序设计方法。

2、掌握带符号数的比较转移指令:JL,JLE,JG,JGE

3、伪指令EQU及操作符"$"的使用。

实验内容STACKSEGMENTSTACK

DB256DUP(0)

STACKENDS

DATASEGMENT

ARRAYDW1234H,5673H,7FFFH,8000H,0DFFH

DW0AB5H,0369H,005FH,5634H,9069H

COUNTEQU$-ARRAY

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

START:MOVCX,COUNT

SHRCX,1

DECCX

MOVBL,-1

AGAIN:MOVDX,CX

ANDBL,BL

JEEXIT

XORBL,BL

XORSI,SI

AGAIN1:MOVAX,ARRAY[SI]

CMPAX,ARRAY[SI+2]

JLENCHG

XCHGARRAY[SI+2],AX

MOVARRAY[SI],AX

MOVBL,-1

NCHG:INCSI

INCSI

DECDX

JNZAGAIN1

LOOPAGAIN

EXIT:MOVAH,4CH

INT21H

CODEENDS

ENDSTART

实验步骤1、输入,汇编并连接此程序。

2、在DEBUG下运行此程序,记录运行结果。

3、将转移指令JLE改为JBE,JGE和JAE,分别运行并记录排序结果。

JBE:

JGE:

JAE:

实验九子程序实验目的1、掌握利用堆栈传递参数的子程序调用方法。

2、掌握子程序递归调用方法。

3、过程调用伪指令:PROC,ENDP,NEAR和FAR。

4、8086指令:CALL,RET,RETn。

5、利用RET指令退出EXE文件的方法。

实验内容及步骤利用堆栈传递参数的子程序调用(求累加和)程序内容:

STACKSEGMENTSTACK

DB256DUP(0)

STACKENDS

DATASEGMENT

ARY1DB1,2,3,4,5,6,7,8,9,10

COUNT1EQU$-ARY1

SUM1DW?

ARY2DB10,11,12,13,14,15,16,17,18

COUNT2EQU$-ARY2

SUM2DW?

DATAENDS

MAINSEGMENT

ASSUMECS:MAIN,DS:DATA,SS:STACK

STARTPROCFAR

PUSHDS

XORAX,AX

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVAX,COUNT1

PUSHAX

LEAAX,ARY1

PUSHAX

CALLFARPTRSUM

MOVAX,COUNT2

PUSHAX

LEAAX,ARY2

PUSHAX

CALLFARPTRSUM

RET

STARTENDP

MAINENDS

PROCESEGMENT

ASSUMECS:PROCE

SUMPROCFAR

MOVBP,SP

MOVCX,[BP+6]

MOVBX,[BP+4]

XORAX,AX

ADN:ADDAL,[BX]

ADCAH,0

INCBX

LOOPADN

MOV[BX],AX

RET4

SUMENDP

PROCEENDS

ENDSTART

操作步骤:

1、输入,汇编并将此程序连接成EXE文件。

2、用DEBUG的断点命令和T命令运行此程序,观察并记录每次过程调用及进出栈指令前后(带";"的语句)的SP和堆栈内容。

3、记录最后结果:SUM1,SUM2的段及偏移地址和它们的内容。

分析和体会三次微处理器实验,让我获益颇多。现在回想起来,每次程序调试成功的喜悦似乎还未淡去。首先,此次实验最基本的收获就是通过编写一些简单的汇编了解微处理器的运作方式和内部变化情况。实践与理论的结合,让我在学习《微处理器》时能够融会贯通,对书上的程序有了更深的理解。知识就是力量,今天我们努力获取知识,明天我们必将使用我们掌握的知识改变世界。还有就是看程序时要仔细一些,实验八中的ASSUME中的DS后应为DATA,之前的错误影响了程序的编译。还要牢记运行和查看程序结果的方法。感谢老师的辛勤指导,路漫漫其修远兮,在求知的道路上,我们还将披荆斩棘,一路向前。