《东华大学微机系统及原理实验报告》由会员分享,可在线阅读,更多相关《东华大学微机系统及原理实验报告(34页珍藏版)》请在金锄头文库上搜索。
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 DB 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 LE