东华大学微机系统及原理实验报告

  • 格式:doc
  • 大小:714.50 KB
  • 文档页数:34

微机系统及应用实验实验报告实验一DEBUG的启动及其基本命令的使用实验内容:6:设堆栈指针SP=2000H,AX=3000H,BX=5000H;请仿照例程的格式编一程序段将AX和BX的内容进行交换。

请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试。

写出在DEBUG状态下编写、运行步骤6所要求的程序过程(要求包含源程序)以及调试所中遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。

程序清单:STACK SEGMENT STACKDB 2003H DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACKSTART: MOV AX,STACKMOV SS,AXMOV SP,2000HMOV AX,3000HMOV BX,5000HPUSH AXMOV AX,BXPOP BXMOV AH,4CHINT 21HCODE ENDSEND START运行及调试:进入调试后,运行正常。

进行反汇编调试:通过追踪指令观察SP、AX、BX变化可知对SP、AX、BX赋值正确。

将AX入栈后用显示内存单元内容的命令D观察堆栈段中SP为1FFF,2000的内容[1FFF]=00 ,[2000]=30 说明已经AX=3000已经放入到堆栈段中。

结果可以看出:AX=5000,BX=3000结果完成正确!实验二内存操作数及寻址方法实验内容:1、设堆栈指针SP=2000H,AX=3000H,BX=5000H;请编一程序段将AX和BX的内容进行交换。

请用堆栈作为两寄存器交换内容的中间存储单元,用字处理程序编辑程序,用masm.exe和link.exe对源程序进行汇编程和连接,用DEBUG 调试程序。

2、用masm和link 对以下程序进行汇编和连接,调试程序在DEBUG调试程序状态下进行。

用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完毕时,AX中的内容是什么。

程序清单如下:DATA SEGMENTORG 0300HA DB 12H,23H,34H,45H,56H,67H,78H,89H,9AH DATA ENDSPROGNAM SEGMENTASSUME CS:PROGNAM,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AX,BXMOV AX,0300HMOV AX,[0300H]MOV AX,[BX]MOV SI,2MOV AX,0001[BX]MOV AX,[BX][SI]MOV AX,0001[BX][SI]MOV AH,4CHINT 21HPROGNAM ENDSEND START对源程序文件汇编,生成目标文件将目标文件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] 得到同样结果AX均为0000.将原文中的指令清单改为DATA SEGMENTA DB 12H,23H,34H,45H,56H,67H,78H,89H,9AHORG 0300HB DB 0BH,0CHDATA ENDSPROGNAM SEGMENTASSUME CS:PROGNAM,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AX,BXMOV AX,0300HMOV AX,[0300H]MOV AX,[BX]MOV SI,2MOV AX,0001[BX]MOV AX,[BX][SI]MOV AX,0001[BX][SI]MOV AH,4CHINT 21HPROGNAM ENDSEND START单步执行后:可知:随着程序进行,AX发生变化。

实验三算术运算指令实验内容编写三个完整的汇编语言源程序,完成以下计算。

其中X、Y、Z、R、W均为存放16位带符号数单元的地址。

(1)Z←W+(Z-X)(2)Z←W-(X+6)-(R+9)(3)Z←(W*X)/(Y+6),R←余数实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等1、程序说明。

说明程序的功能、结构。

2、调试说明。

包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。

3、写出源程序清单和执行结果。

(1)Z←W+(Z-X)汇编程序清单DATA SEGMENTX DW 10Z DW 20W DW 10DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AX,ZSUB AX,XADD AX,WMOV Z,AXMOV AH,4CHINT 21HCODE ENDSEND START进入debug调试:使用追踪指令T单步执行:执行结果是将20放入AX中。

AX=0014H执行结果AX=0014H-000AH=000A,结果正确。

执行结果显示:AX=0014H,即为20,正确。

然后将结果保存至Z存储字中。

最后观察数据组中的数据;显示为X=10,Z=20,W=10。

程序运行结果正确(2)Z←W-(X+6)-(R+9)汇编程序清单:DATA SEGMENTW DW 100X DW 20R DW 30Z DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AX,WMOV BX,XADD BX,6SUB AX,BXMOV BX,RADD BX,9SUB AX,BXMOV Z,AXMOV AH,4CHINT 21HCODE ENDSEND START对程序进行汇编后调试:单步执行:此时,对DS的段基址赋值为数据组的首地址此时,对AXBX分别赋值为100,20(3)Z←(W*X)/(Y+6),R←余数汇编程序清单:DATA SEGMENTX DW 10HZ DW ?W DW 10HY DW 3HR DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AXMOV AX,WIMUL XMOV BX,YADD BX,6IDIV BXMOV Z,AXMOV R,DXMOV AH,4CHINT 21HCODE ENDSEND START编译执行结果如下:单步执行结果如下:执行结果可得:商的整数部分z所指向的字单元内容为001CH,余数本分R指向的字单元内容为0004H。

实验四查表程序设计实验内容:用查表的方法将一位十六进制数转换成与它相应的ASCII码,并将结果存放到ASCI单元中。

汇编程序清单:DATA SEGMENTTABLE DB 30H,31H,32H,33H,34H,35H,36H,37HDB 38H,39H,41H,42H,43H,44H,45H,46HHEX DB 0AHASCI DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV BX,OFFSET TABLEMOV AL,HEXXLATMOV ASCI,ALMOV AH,4CHINT 21HCODE ENDSEND START对程序进行编译进入debug调试使用t追踪指令观察数据变化ASCI所指向的字节单元的内容正是十六进制数0AH的ASCII值41。

实验五系统功能调用实验内容:试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。

汇编程序清单:CODE SEGMENTASSUME CS:CODESTART: MOV AH,1INT 21HSUB AL,20HMOV DL,ALMOV AH,2INT 21HMOV AH,4CHINT 21HCODE ENDSEND START对源程序编译并进入debug状态调试结果正确。

实验六分支程序设计:实验内容假设有一组数据:5,-4,0,3,100,-51,请编一程序,判断:每个数大于0,等于0,还是小于0;并输出其判断结果。

即: 1 当x>0y= 0 当x=0-1 当x<0汇编程序清单:DATA SEGMENTTABLE DB 5,-4,0,3,100,-51G DB '1',13,10,'$'Z DB '0',13,10,'$'L DB '-1',13,10,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AXLEA SI,TABLEMOV CL,6COMP: CMP BYTE PTR [SI],0JG GREATJZ EQUALLEA DX,LJMP SHORT DISP GREAT: LEA DX,GJMP SHORT DISP EQUAL: LEA DX,ZDISP: MOV AH,9INT 21HINC SILOOP COMPMOV AH,4CHINT 21HCODE ENDSEND START对源程序进行编译并进入调试状态分布调试:从结果可知:经过第一次循环,DX所代表的要输出的字符串的地址0006H即为数据段中Z字符串的EA,所以输出内容为1。

且SI自增1,CL减1。

以下循环原理同上。

全部运行的:程序运行正确。

思考题:程序中的原始数据是以怎样的形式存放在数据区中的?请用DEBUG调试程序观察并分析。

答:程序中的原始数据是以补码的十六进制的形式存放在数据区中的。

实验七循环程序设计实验内容与要求1.编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N(N+1)大于200为止,并将结果由屏幕上显示出来。

其程序的流程图如图7. 1所示。

2.将从3000H内存单元开始的100个字节存储单元全部清0。

本实验要求在DEBUG调试状态下进行,包括汇编程序、运行程序、检查结果。

程序框图图7.1 程序框图实验步骤实验内容一:1) 按程序流程图编制实验程序。

2) 输入源程序。

3) 汇编、连接程序,执行程序,检查结果。

实验内容二:1) 输入源程序并检查无误。

2) 对内存单元3000H开始的100个存储单元用E命令输入任意数。