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

下载本文档

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

文档简介

1、. 微机系统及应用实验 实 验 报 告 实验一 DEBUG的启动及其基本命令的使用实验内容:6:设堆栈指针SP=2000H,AX=3000H,BX=5000H;请仿照例程的格式编一程序段将AX和BX的内容进行交换。请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试。写出在DEBUG状态下编写、运行步骤6所要求的程序过程(要求包含源程序)以及调试所中遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。程序清单:STACK SEGMENT STACK DB 2003H DUP(0)STACK ENDSCODE SEGMENT ASSUME CS:C

2、ODE,SS:STACKSTART: MOV AX,STACK MOV SS,AX MOV SP,2000H MOV AX,3000H MOV BX,5000H PUSH AX MOV AX,BX POP BX MOV AH,4CH INT 21HCODE ENDS END START运行及调试:进入调试后,运行正常。进行反汇编调试:通过追踪指令观察SP、AX、BX变化可知对SP、AX、BX赋值正确。将AX入栈后用显示内存单元内容的命令D观察堆栈段中 SP为1FFF,2000的内容1FFF=00 ,2000=30 说明已经AX=3000已经放入到堆栈段中 。 结果可以看出:AX=5000,BX

3、=3000结果完成正确!实验二 内存操作数及寻址方法实验内容:1、设堆栈指针SP=2000H,AX=3000H,BX=5000H;请编一程序段将AX和BX的内容进行交换。请用堆栈作为两寄存器交换内容的中间存储单元,用字处理程序编辑程序,用masm.exe和link.exe对源程序进行汇编程和连接,用DEBUG调试程序。2、用masm和link 对以下程序进行汇编和连接,调试程序在DEBUG调试程序状态下进行。用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完毕时,AX中的内容是什么。程序清单如下:DATA SEGMENT ORG 0300H A DB 12H,23H,34H,45H,

4、56H,67H,78H,89H,9AHDATA ENDSPROGNAM SEGMENT ASSUME CS:PROGNAM,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,BX MOV AX,0300H MOV AX,0300H MOV AX,BX MOV SI,2 MOV AX,0001BX MOV AX,BXSI MOV AX,0001BXSI MOV AH,4CH INT 21H PROGNAM ENDS END START对源程序文件汇编,生成目标文件 将目标文件LINK后,生成可执行文件如下:进入debug调试单步追踪执行:AX=0B91,为数

5、据段的首地址。AX不变,将数据段的首地址送至DS。执行MOV AX,BXAX同BX,清零。执行MOV AX,0300HAX=0300执行MOV AX,0300HAX=0300可知 MOV AX,0300H 与 MOV AX,0300H 得到同样结果AX均为0000.将原文中的指令清单改为DATA SEGMENTA DB 12H,23H,34H,45H,56H,67H,78H,89H,9AH ORG 0300H B DB 0BH,0CHDATA ENDSPROGNAM SEGMENTASSUME CS:PROGNAM,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV A

6、X,BXMOV AX,0300HMOV AX,0300HMOV AX,BXMOV SI,2MOV AX,0001BXMOV AX,BXSIMOV AX,0001BXSIMOV AH,4CHINT 21HPROGNAM ENDSEND START单步执行后:可知:随着程序进行,AX发生变化。实验三 算术运算指令实验内容编写三个完整的汇编语言源程序,完成以下计算。其中X、Y、Z、R、W均为存放16位带符号数单元的地址。(1)ZW(ZX)(2)ZW(X6)(R9)(3)Z(W*X)/(Y6),R余数实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等1、程序说明。说明程

7、序的功能、结构。2、调试说明。包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。3、写出源程序清单和执行结果。(1)ZW(ZX)汇编程序清单DATA SEGMENT X DW 10 Z DW 20 W DW 10DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AX,Z SUB AX,X ADD AX,W MOV Z,AX MOV AH,4CH INT 21HCODE ENDS END START进入debug调试:使用追踪指令

8、T单步执行:执行结果是将20放入AX中。AX=0014H执行结果AX=0014H-000AH=000A,结果正确。执行结果显示:AX=0014H,即为20,正确。然后将结果保存至Z存储字中。最后观察数据组中的数据;显示为 X=10,Z=20,W=10。程序运行结果正确(2)ZW(X6)(R9)汇编程序清单:DATA SEGMENT W DW 100 X DW 20 R DW 30 Z DW ? DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AX,W MOV BX,X ADD BX,6 S

9、UB AX,BX MOV BX,R ADD BX,9 SUB AX,BX MOV Z,AX MOV AH,4CH INT 21HCODE ENDS END START对程序进行汇编后调试:单步执行:此时,对DS的段基址赋值为数据组的首地址此时,对AXBX分别赋值为100,20(3)Z(W*X)/(Y6),R余数汇编程序清单:DATA SEGMENT X DW 10H Z DW ? W DW 10H Y DW 3H R DW ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AX,W IMU

10、L X MOV BX,Y ADD BX,6 IDIV BX MOV Z,AX MOV R,DX MOV AH,4CH INT 21HCODE ENDS END START编译执行结果如下:单步执行结果如下:执行结果可得:商的整数部分z所指向的字单元内容为001CH,余数本分R指向的字单元内容为0004H。实验四 查表程序设计实验内容:用查表的方法将一位十六进制数转换成与它相应的ASCII码,并将结果存放到ASCI单元中。汇编程序清单:DATA SEGMENTTABLE DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,4

11、5H,46HHEX DB 0AHASCI DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV BX,OFFSET TABLE MOV AL,HEX XLAT MOV ASCI,AL MOV AH,4CH INT 21HCODE ENDS END START对程序进行编译进入debug调试使用t追踪指令观察数据变化ASCI所指向的字节单元的内容正是十六进制数0AH的ASCII值41。实验五 系统功能调用实验内容:试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。汇编程序

12、清单:CODE SEGMENT ASSUME CS:CODESTART: MOV AH,1 INT 21H SUB AL,20H MOV DL,AL MOV AH,2 INT 21H MOV AH,4CH INT 21HCODE ENDS END START对源程序编译并进入debug状态调试结果正确。实验六 分支程序设计:实验内容假设有一组数据:5,-4,0,3,100,-51,请编一程序,判断:每个数大于0,等于0,还是小于0;并输出其判断结果。即: 1 当x0y= 0 当x=0 -1 当x0汇编程序清单:DATA SEGMENT TABLE DB 5,-4,0,3,100,-51 G D

13、B 1,13,10,$ Z DB 0,13,10,$ L DB -1,13,10,$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX LEA SI,TABLE MOV CL,6COMP: CMP BYTE PTR SI,0 JG GREAT JZ EQUAL LEA DX,L JMP SHORT DISPGREAT: LEA DX,G JMP SHORT DISPEQUAL: LEA DX,ZDISP: MOV AH,9 INT 21H INC SI LOOP COMP MOV AH,4CH INT

14、 21HCODE ENDS END START对源程序进行编译并进入调试状态分布调试:从结果可知:经过第一次循环,DX所代表的要输出的字符串的地址0006H即为数据段中Z字符串的EA,所以输出内容为1。且SI自增1,CL减1。以下循环原理同上。全部运行的:程序运行正确。思考题:程序中的原始数据是以怎样的形式存放在数据区中的?请用DEBUG调试程序观察并分析。答:程序中的原始数据是以补码的十六进制的形式存放在数据区中的。实验七 循环程序设计实验内容与要求1. 编制程序计算S=1+23+34+45+N(N+1)+直到N(N+1)大于200为止,并将结果由屏幕上显示出来。其程序的流程图如图7. 1所

15、示。 2. 将从3000H内存单元开始的100个字节存储单元全部清0。 本实验要求在DEBUG调试状态下进行,包括汇编程序、运行程序、检查结果。程序框图图71 程序框图实验步骤实验内容一: 1) 按程序流程图编制实验程序。 2) 输入源程序。 3) 汇编、连接程序,执行程序,检查结果。 实验内容二: 1) 输入源程序并检查无误。 2) 对内存单元3000H开始的100个存储单元用E命令输入任意数。 3) 程序的执行可用DEBUG的G命令,也可用T命令单步跟踪执行。 4) 用D命令检查执行结果。实验内容1的程序清单:DATA SEGMENTSTR DB 5 DUP(0) DB $DATA END

16、SCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV DX,1 MOV BL,2LOP: MOV AL,BL INC BL MUL BL ADD DX,AX CMP AX,200 JBE LOP MOV AX,DX LEA DI,STR+4LOP2: MOV CL,10 DIV CL ADD AH,30H MOV DI,AH AND AX,00FFH DEC DI CMP AL,0 JNE LOP2 LEA DX,STR MOV AH,9 INT 21H MOV AH,4CH INT 21HCODE ENDS

17、END START程序运行及结果:程序循环体如下图: 结束循环:下部分程序为利用除10取余法将计算结果用十进制在屏幕上显示:计算结果在DS的存储:实验内容与要求(2) 将从3000H内存单元开始的100个字节存储单元全部清0。 本实验要求在DEBUG调试状态下进行,包括汇编程序、运行程序、检查结果。实验步骤实验内容二: 1) 输入源程序并检查无误。 2) 对内存单元3000H开始的100个存储单元用E命令输入任意数。 3) 程序的执行可用DEBUG的G命令,也可用T命令单步跟踪执行。 4) 用D命令检查执行结果。汇编程序清单:CODE SEGMENT ASSUME CS:CODESTART:

18、PUSH DS MOV AX,0 PUSH AX MOV BX,3000H MOV CL,100LOP: MOV BYTE PTR BX,0 INC BX LOOP LOP MOV AH,4CH INT 21HCODE ENDS END START 运行及调试: E命令修改:T追踪: 实验八 子程序设计1、程序说明:编制一程序,要求键入一个班的学生成绩,并存放于50字的ERADE数组中,然后根据ERADE中的成绩,把学生名次填入50字的RANK数组中,再按学号顺序把名次从终端上显示出来。提示: 程序MAIN 功能:根据输入的学生成绩,计算并显示出学生名次。 子程序INPUT 功能:接收一个班级

19、学生的成绩,各成绩之间用空格隔开。 子程序RANKP 功能:计算一个班级学生的名次。 子程序OUTPUT 功能:输出(显示)一个班级的学生名次 子程序DECIBIN 功能:十进制转换二进制,存入BX 子程序BINDEC 功能:十进制转换二进制,并在屏幕上显示。 子程序DEC_DIV功能:BX的内容除以CX的内容,并在屏幕上显示一位商。源程序:DATA SEGMENT GRADE DW 50 DUP( ) RANK DW 50 DUP( ) ENTER DB Grades:,24H ;提示用户输入成绩 ERROR DB 13,10,Error!,13,10,24H ;用户输入的格式出错 SHOW

20、 DB Rank: ,24H COUNT DW 0 ;统计输入的成绩个数 CR DB 13,10,24h ;换行 DATA ENDS STACK SEGMENT STACK DB 400 DUP(0) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV ES,AX CALL INPUT CALL RANKP CALL OUTPUT MOV AH,01H INT 21H MOV AX,4CH INT 21H ;INPUT程序段 ;以学号为序从键盘输入一个班的学生成绩,各个

21、成绩之间 用逗号格开,最后以回车符结束。 ;然后把一个班的成绩存入grade数组。 INPUT PROC NEAR LEA DX,ENTER MOV AH,9 INT 21H ;提示用户输入 MOV SI,0 MOV COUNT,0 ;将输入用户的输入个数置0 _ENTER: ;对用户的输入进行监视,对错误输入立即进行出错处理 CALL DECIBIN ;调用DECIBIN ;对用户输入进行处理 INC COUNT CMP DL, ;与,比较,相同则保存成绩,不同出错 JE _STORE CMP DL,0DH ;与回车键进行比较,回车则成绩输入结束 JE _ENDENTER JNE _ERRO

22、R ;出错处理:显示出错信息 _STORE: ;保存成绩 MOV GRADESI,BX ADD SI,2 JMP _ENTER _ERROR: LEA DX,ERROR MOV AH,9 INT 21H _ENDENTER: ;用户结束成绩输入 MOV GRADESI,BX MOV DX,OFFSET CR ;换行 MOV AH,9 INT 21H RET INPUT ENDP ;RANKP程序段 ;从grade数组取得一个班的成绩,以学号为序计算出该班每个学生的名次存入rank数组。 ;算法为:一个学生的名次等于成绩高于该生的学生人数加1 RANKP PROC NEAR MOV DI,COU

23、NT MOV BX,0 _LOOP: MOV AX,GRADEBX ;取学生成绩 MOV WORD PTR RANKBX,0 ;初始化RANKBX的值为0 MOV CX,COUNT LEA SI,GRADE ;第一个学生的成绩 _NEXT1: CMP AX,SI ;比较两个成绩 JG _JUMP ;成绩大于被比较的跳过 INC WORD PTR RANKBX _JUMP: ADD SI,2 ;取下一个被比较成绩的地址 LOOP _NEXT1 ADD BX,2 ; 下一个成绩 DEC DI ;未比较成绩个数减1 JNE _LOOP RET RANKP ENDP ;OUTPUT程序段 ;从rank

24、数组取得一个班的学生名次。把一个班的学生名次以学号为序在终端显示出来 ;调用子模块binidec,以便把rank数组中的二进制数转成十进制数并在终端上显示出来.调用子模块crlf完成回车,换行功能. OUTPUT PROC NEAR LEA DX,SHOW MOV AH,09H INT 21H MOV SI,0 MOV DI,COUNT _NEXT2: MOV BX,RANKSI ;将成绩保存到BX中 CALL BINIDEC ;调用BINIDEC CMP DI,1 ;将剩余的成绩个数与1比较,若为1则不显示, JE _NOCOMMA MOV DL, MOV AH,02H INT 21H ;显

25、示, _NOCOMMA: ADD SI,02H ;取下一个成绩名次 DEC DI JNZ _NEXT2 MOV DX,OFFSET CR ;换行 MOV AH,9 INT 21H RET OUTPUT ENDP ;DECIBIN程序段 ;从键盘取得一个十进制数。把该数转换成二进制数并存入BX寄存器中。 DECIBIN PROC NEAR MOV BX,0 _CATCH: MOV AH,01H INT 21H MOV DL,AL SUB AL,30H JL _ENDCHANGE ;小于则结束SFVOF=1 CMP AL,39H JG _ENDCHANGE ;大于则结束 CBW XCHG AX,B

26、X ;AX与BX值交换 MOV CX,10 MUL CX ;无符号数乘法指令,(AX)-(AL)*(CX) XCHG AX,BX ADD BX,AX ;(BX) DX:AX PUSH BX AND BX, 000FH ;取出BX中的1位BCD码 ADD AX, BX ;累加到AX中 POP BX LOOP RETRY POP DX POP CX POP BX RETBCDTO2 ENDP (2) 写出AX中进二制数转BCD码的算法。W1000 DW 1000,100,10,1 ;十进制数千,百,十,个位权值;入口参数:AX=二进制数。出口参数:AX=压缩BCD码AX2TOBCD PROC NE

27、ARXOR BX, BX ;BCD码暂存单元清0MOV SI, OFFSET W1000 ;权值首地址送SIMOV CX, 4 ;循环次数4 - CXRETRY: PUSH CXMOV CL, 4SHL BX, CLMOV DX, 0 ;DX:AX组成被除数DIV WORD PTRSI ;除以权值,商,余数在AX,DX中OR BX, AX ;压缩BCD码MOV AX, DX ;余数送AXPOP CXADD SI, 2 ;地址加2,指向下一权值LOOP RETRYMOV AX, BX ;BCD码由BX - AXRETAX2TOBCD ENDP实验九 综合程序设计实验内容:设有十个学生成绩分别是7

28、6,69,84,90,73,88,99,63,100和80分。试编制一个子程序,统计低于60分,6069分,7079分,8089分,9099分和100分的人数,并输出显示统计结果。编程提示:1、成绩分等部分采用分支结构,统计所有成绩则用循环结构完成,显示统计结果采用DOS功能调用。2、统计学生成绩和显示统计结果两部分内容用子程序结构来完成。程序框图:汇编程序清单:DATA SEGMENTGRADE DB 76,69,84,90,73,88,99,63,100,80STR1 DB 低于60分人数为:X1 DB 30H,$STR2 DB 60-69分人数为: X2 DB 30H,$STR3 DB 70-79分人数为: X3 DB 30H,$STR4 DB

温馨提示

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

评论

0/150

提交评论