实验七八九
的有关信息介绍如下:实验七分支程序实验目的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,之前的错误影响了程序的编译。还要牢记运行和查看程序结果的方法。感谢老师的辛勤指导,路漫漫其修远兮,在求知的道路上,我们还将披荆斩棘,一路向前。