东华大学微机系统及原理实验报告_第1页
东华大学微机系统及原理实验报告_第2页
东华大学微机系统及原理实验报告_第3页
东华大学微机系统及原理实验报告_第4页
东华大学微机系统及原理实验报告_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

微机系统及应用试验试验一DEBUG的启动及其根本命令的使用试验内容:AXBX的内容进展交换。请用堆栈作为两存放器交换内容的中间DEBUG调试程序进展汇编与调试。6所要求的程序过程〔要求包含源程对执行结果进展分析。程序清单:STACKSEGMENTSTACKDB2003HDUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,SS:STACKSTART:MOVAX,STACKMOVSS,AXMOVSP,2000HMOVAX,3000HMOVBX,5000HPUSHAXMOVAX,BXPOPBXMOVAH,4CHINT21HCODEENDSENDSTART运行及调试:进入调试后,运行正常。进展反汇编调试:通过追踪指令观看SP、AX、BX变化可知对SP、AX、BX赋值正确。AX入栈后用显示内存单元内容的命令D观看堆栈段中SP1FFF,2000的内容[1FFF]=00 ,[2000]=30说明已经AX=3000结果可以看出:AX=5000,BX=3000结果完成正确!试验二内存操作数及寻址方法试验内容:AX和BX的内容进展交换。请用堆栈作为两存放器交换内容的中间存储单元,用字处DEBUG调试程序。DEBUG调试传送完毕时,AX中的内容是什么。程序清单如下:DATASEGMENTORG0300HADB12H,23H,34H,45H,56H,67H,78H,89H,9AHDATAENDSPROGNAMSEGMENTASSUMECS:PROGNAM,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,BXMOVAX,0300HMOVAX,[0300H]MOVAX,[BX]MOVSI,2MOVAX,0001[BX]MOVAX,[BX][SI]MOVAX,0001[BX][SI]MOVAH,4CHINT21HPROGNAMENDSENDSTART对源程序文件汇编,生成目标文件将目标文件LINK后,生成可执行文件如下:debug调试单步追踪执行:AX=0B91,为数据段的首地址。AX不变,将数据段的首地址送至DS。执行MOV AX,BXAX同BX,清零。执行MOV AX,0300HAX=0300执行MOV AX,[0300H]AX=0300可知MOV AX,0300H 与MOV AX,[0300H] 得到同样结果AX0000.将原文中的指令清单改为DATA SEGMENTA DB ORG0300HB DB 0BH,0CHDATAENDSPROGNAMSEGMENTASSUMECS:PROGNAM,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AX,BXMOV AX,0300HMOV MOV AX,[BX]MOV SI,2MOV AX,0001[BX]MOV AX,[BX][SI]MOV MOV AH,4CHINT 21HPROGNAM ENDSTART单步执行后:可知:随着程序进展,AX发生变化。试验内容X、Y、Z、R、W均16位带符号数单元的地址。(1)Z←W+〔Z-X〕←〔X〕/〔Y,←余数程序结果的分析等1、程序说明。说明程序的功能、构造。2、调试说明。包括上机调试的状况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进展分析,对执行结果进展分析。3、写出源程序清单和执行结果。(1)Z←W+〔Z-X〕汇编程序清单DATASEGMENTXDW10ZDW20WDW10DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,ZSUBAX,XADDAX,WMOVZ,AXMOVAH,4CHINT21HCODEENDSENDSTART调试:使用追踪指令T单步执行:20放入AX中。AX=0014H执行结果AX=0014H-000AH=000A,结果正确。执行结果显示:AX=0014H,即为20,正确。然后将结果保存至Z存储字中。最终观看数据组中的数据;显示为X=10,Z=20,W=10。程序运行结果正确汇编程序清单:DATASEGMENTWDW100XDW20RDW30ZDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,WMOVBX,XADDBX,6SUBAX,BXMOVBX,RADDBX,9SUBAX,BXMOVZ,AXMOVAH,4CHINT21HCODEENDSENDSTART对程序进展汇编后调试:单步执行:此时,对DS的段基址赋值为数据组的首地址此时,对AXBX100,20←〔X〕/〔Y,←余数汇编程序清单:DATASEGMENTXDW10HZDW?WDW10HYDW3HRDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,WIMULXMOVBX,YADDBX,6IDIVBXMOVZ,AXMOVR,DXMOVAH,4CHINT21HCODEENDSENDSTART编译执行结果如下:单步执行结果如下:z001CHR指向的0004H。试验四查表程序设计试验内容:ASCII码,并将结果ASCI单元中。汇编程序清单:DATA SEGMENTTABLE DB 30H,31H,32H,33H,34H,35H,36H,37HDB HEX DB 0AHASCI DB ?DATA ENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBX,OFFSETTABLEMOVAL,HEXXLATMOVASCI,ALMOVAH,4CHINT21HCODEENDSENDSTARTdebug调试t追踪指令观看数据变化0AHASCII41。试验五系统功能调用试验内容:试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。汇编程序清单:CODESEGMENTASSUMECS:CODESTARTMOVAH,1INT21HSUBAL,20HMOVDL,ALMOVAH,2INT21HMOVAH,4CHINT21HCODEENDSENDSTARTdebug状态调试结果正确。试验六分支程序设计:试验内容结果。即: 1 y=0x=0-1x<0汇编程序清单:DATASEGMENTTABLEDB5,-4,0,3,100,-51G DB”1”,13,10,”$”Z DB”0”,13,10,”$”L DB”-1”,13,10,”$”DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEASI,TABLEMOVCL,6COMP:CMPBYTEPTR[SI],0JGGREATJZEQUALLEADX,LJMPSHORTDISPGREAT:LEADX,GJMPSHORTDISPEQUAL:LEADX,ZDISP:MOVAH,9INT21HINCSILOOPCOMPMOVAH,4CHINT21HCODEENDSENDSTART对源程序进展编译并进入调试状态分布调试:经过第一次循环,DX0006H即为数据段中ZEA1SI1,CL1。以下循环原理同上。全部运行的:程序运行正确。思考题:DEBUG调试程序观看并分析。答:程序中的原始数据是以补码的十六进制的形式存放在数据区中的。试验七循环程序设计试验内容与要求1. 编制程序计算S=1+23+34+45+……+N 〔N+1〕+……直到N〔N+1〕大于20071所示。1000。DEBUG调试状态下进展,包括汇编程序、运行程序、检查结果。程序框图7.1程序框图试验步骤试验内容一:按程序流程图编制试验程序。输入源程序。试验内容二:输入源程序并检查无误。3000H100个存储单元用E命令输入任意数。DEBUGGT命令单步跟踪执行。1的程序清单:DATASEGMENTSTR DB5DUP(0)DB”$”DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,1MOVBL,2LOP: AL,BLINCBLMULBLADDDX,AXCMPAX,200JBELOPMOVAX,DXLEADI,STR+4LOP2: MOVCL,10DIVCLADDAH,30HMOV[DI],AHANDAX,00FFHDECDICMPAL,0JNELOP2LEADX,STRMOVAH,9INT21HMOVAH,4CHINT21HCODEENDSENDSTART程序运行及结果:程序循环体如以下图:完毕循环:10取余法将计算结果用十进制在屏幕上显示:DS的存储:试验内容与要求1000。试验步骤试验内容二:输入源程序并检查无误。3000H100个存储单元用E命令输入任意数。DEBUGGT命令单步跟踪执行。汇编程序清单:CODESEGMENTASSUMECS:CODESTART:PUSHDSMOVAX,0PUSHAXMOVBX,3000HMOVCL,100LOP: MOVBYTEPTR[BX],0INCBXLOOPLOPMOVAH,4CHINT21HCODEENDSENDSTART运行及调试:E命令修改:T追踪:50ERADEERADE50RANK学号挨次把名次从终端上显示出来。提示:MAIN功能:依据输入的学生成绩,计算并显示出学生名次。INPUT功能:接收一个班级学生的成绩,各成绩之间用空格隔开。RANKP功能:计算一个班级学生的名次。OUTPUT功能:输出〔显示〕一个班级的学生名次DECIBIN功能:十进制转换二进制,存入BXBINDEC功能:十进制转换二进制,并在屏幕上显示。DEC_DIV功能:BX的内容除以CX的内容,并在屏幕上显示一位商。源程序:DATASEGMENTGRADEDW50DUP()RANKDW50DUP()ENTER DB”Grades:”,24H ;提示用户输入成绩ERRORDB13,10,”Error!”,13,10,24H ;用户输入的格式出错SHOW DB”Rank: ”,24HCOUNTDW0 ;统计输入的成绩个数CRDB 13,10,24h ;换行DATAENDSSTACKSEGMENTSTACKDB400DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:

MOV AX,DATAMOV DS,AXMOV ES,AXCALLINPUTCALLRANKPCALLOUTPUTMOV AH,01HINT 21HMOV AX,4CHINT 21H;INPUT程序段;以学号为序从键盘输入一个班的学生成绩,各个成绩之间用逗号格开,最终以回车符完毕。;然后把一个班的成绩存入grade数组。INPUTPROCNEARLEA DX,ENTERMOV AH,9INT 21H ;提示用户输入MOV SI,0MOV COUNT,0 ;0_ENTER: ;对用户的输入进展监视,对错误输入马上进展出错处理CALLDECIBIN;调用DECIBIN;对用户输入进展处理INCCOUNTCMPDL,”,”;与”,”比较,一样则保存成绩,不同出错JE_STORECMPDL,0DH;与回车键进展比较,回车则成绩输入完毕JE_ENDENTERJNE_ERROR;出错处理:显示出错信息_STORE:MOVGRADE[SI],BX;保存成绩ADDSI,2JMP_ENTER_ERROR:LEADX,ERRORMOVAH,9INT21H_ENDENTER:MOVGRADE[SI],BX;用户完毕成绩输入MOVDX,OFFSET CR;换行MOVAH,9INT21HRETINPUTENDP;RANKP程序段;grade数组取得一个班的成绩,以学号为序计算出该班每个学生的名次存入rank数组。;算法为:一个学生的名次等于成绩高于该生的学生人数加1RANKPPROCNEARMOV DI,COUNTMOV BX,0_LOOP:_NEXT1:_JUMP:

MOV AX,GRADE[BX] ;取学生成绩MOV WORD PTR RANK[BX],0;初始化RANK[BX]的值为0MOV CX,COUNTCMPJGAX,[SI]CMPJGAX,[SI]_JUMP;比较两个成绩;成绩大于被比较的跳过INCWORDPTRRANK[BX]ADDSI,2;取下一个被比较成绩的地址LOOP_NEXT1

ADD BX,2 ;下一个成绩DEC DI ;1JNE RET;OUTPUT程序段;rank数组取得一个班的学生名次。把一个班的学生名次以学号为序在终端显示出来;binidec,rank数组中的二进制数转成十进制数并在终端上显示出来.调用子模块crlf完成回车,换行功能.OUTPUTPROCNEARLEA DX,SHOWMOV AH,09HINT 21H_NEXT2:_NOCOMMA:

MOV SI,0MOV DI,COUNTMOVBX,RANK[SI];将成绩保存到BX中CALLBINIDEC;调用BINIDECCMPDI,1;11则不显示”,”JE_NOCOMMAMOVDL,”,”MOVAH,02HINT21H;显示”,”ADD SI,02H ;取下一个成绩名次DEC DIJNZ _NEXT2MOVDX,OFFSETCR;换行MOVAH,9OUTPUTENDP

INT RET;DECIBIN程序段;从键盘取得一个十进制数。把该数转换成二进制数并存入BX存放器中。DECIBINPROCNEARMOV BX,0_CATCH:MOVAH,01HINT21HMOVDL,ALSUBAL,30HJL_ENDCHANGE;小于则完毕SFVOF=1CMPAL,39HJGCBW_ENDCHANGE;大于则完毕XCHG AX,BX ;AX与BX值交换MOV CX,10MUL CX ;无符号数乘法指令,(AX)< (AL)*(CX)_ENDCHANGE:DECIBINENDP

XCHG AX,BXADD BX,AX ;(BX)< (BX)+(AX)JMP _CATCHRET;BINIDEC程序段;bx10dec_div来作除法运算并显示字符。BINIDECPROCNEARPUSH BXPUSH CXPUSH SIPUSH DI ;压栈MOVCX,10CALLDEC_DIV;调用DEC_DIVMOVCX,1CALLDEC_DIV;调用DEC_DIVPOPDIPOPSIPOPCXPOPRETBX ;出栈BINIDECENDP;DEC_DIV程序段;bx中二进制数除以相应的十的幂,并在屏幕上显示一位商。余数保存在bx存放器中。MOVAX,BXMOVAX,BXMOVDX,0DIVCXMOVBX,DXMOVDL,ALADDDL,30HMOVAH,02HDEC_DIVENDPINTRET21HENDSTART运行结果:;显示1设AX存放器中存放着4位BCD码BCDTO2 PROC NEARPUSH BXPUSH CXPUSH DXMOV BX,AX AXBCDBXMOV AX,0 0RETRY:PUSHCXMOVCL,4ROLRETRY:PUSHCXMOVCL,4ROLBX,CLPOPCXMULW10PUSHBX1BCDBXAXx10->DX:AXANDBX,000FHBX1BCDADDAX,BXAXPOPBXLOOPRETRYPOPDXPOPCXPOPBXRETBCDTO2 ENDPAXBCDW1000 DW 1000,100,10,1 ;十进制数千,百,十,个位权值口参数:AX=压缩BCD码AX2TOBCD PROC NEARXOR BX,BX MOV SI,OFFSETW1000 ;权值首地址送SIMOV CX,4 ;循环次数4->CXRETRY:PUSH CXMOV CL,4SHL BX,CLMOV DX,0 ;DX:AXDIV WORDPTR[SI] AX,DXOR BX,AX BCDMOV AX,DX POP CXADD SI, 2 LOOP RETRYMOV AX, BX RETAX2TOBCD ENDP试验九综合程序设计试验内容:设有十个学生成绩分别是76,69,84,90,73,88,99,63,10080分。试编制一个子程序,统计低于60分,60~69分,70~79分,80~89分,90~99100编程提示:1、成绩分等局部承受分支构造,统计全部成绩则用循环构造完成,显示统计结果承受DOS功能调用。2、统计学生成绩和显示统计结果两局部内容用子程序构造来完成。程序框图:汇编程序清单:DATASEGMENTGRADEDB76,69,84,90,73,88,99,63,100,80STR1

温馨提示

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

评论

0/150

提交评论