当前位置:文档之家› 微机原理及应用实验报告

微机原理及应用实验报告

微机原理及其应用上机实验报告实验一 程序调试实验(顺序结构程序设计) 一、实验目的:1.学习及掌握汇编语言源程序的基本结构,明确程序中各段的功能和相互之间的关系。

2.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。

3、熟悉和掌握DEBUG 常用命令的使用 二、实验要求:1、上机前,要认真阅读前言和课本相关章节2、上机前,画好流程图,编写好程序3、上机时,注意出现的错误,记录下出错信息,翻译之4、完成好实验报告 三、实验内容:在内存TAB 开始的16个单元连续存放了0-15的平方值(0-225),任给一个数X(0 ≤ X ≤ 15),求X 的平方值,并把结果存放在Y 单元中。

(2).分析X 平方的值是tab 为首地址且x 的值为有效地址中的值。

data segmentx db 8 y db data endsstack segment para'stack' db 100 dup(0) stack ends code segmentassume cs:code,ds:data,ss:stack start:mov ax,data mov ds,ax xor ax,axmov al,xlea si,tabadd si,axmov al,[si]mov y,almov ah,4chint 21hcode endsend start(3).程序调试:4.心得体会了解了顺序结构,掌握了程序的运行,调试。

实验二分支程序设计一、实验目的:熟悉运算类指令对标志位的状态影响以及标志位状态的表示方法;掌握条件转移、无条件转移指令的使用方法。

掌握分支程序设计、编写、调试和运行的方法。

二、实验要求:1、上机前认真分析题意,找出算法,画出流程图,依据流程图,编好程序。

2、认真调试程序,对程序可能存在的所有分支都要进行运行,只有这样才能证明程序的正确性。

二、实验内容1.判断X单元数据的奇偶性,若为奇数,将Y单元设置为0FFH,若为偶数,将Y单元清0。

(2).分析将x值给寄存器al,al和1数。

data segmentx dw 69hy dbdata endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov ax,xand ax,01hjz next1mov y,0ffhjmp nextnext1:mov y,0next:mov ah,4chint 21hcode endsend start(3).程序调试(4).心得体会掌握了add指令的用法,熟悉了分支结构。

2. 设计—个比较两个8位无符号数的大小、并把较小的数存人MIN单元的程序。

假设这两个数分别存放在FIRST和SECOND单元中。

(2).分析将first值赋给al,判断al与second的大小,将小的值给min。

data segmentfirst db 32hsecond db 56hmin dbdata endscode segmentassume cs:code,ds:data start:mov ax,datamov ds,axmov al,firstcmp al,secondjc nextmov bl,secondmov min,bljmp next1next:mov min,alnext1:mov ah,4ch开始取first值给al判断al是否大将al值给min将second值给min 结束是否int 21hcode endsend start(3).程序调试(4).心得体会掌握了cmp指令的用法,加深了对分支结构的了解。

实验三循环程序设计一、实验目的掌握循环指令的使用方法;掌握实现单重、多重循环程序设计、编写、调试和运行的方法。

二、实验要求:1、上机前认真分析题意,找出算法,画出流程图,依据流程图,编好程序2、在调试程序的过程中,对出现的错误应记录它的英文提示,进行翻译,把更正的指令用其它颜色的笔记录的原程序清单的右边,便于比较。

三、实验内容:1、从自然数1并把统计的个数送入n单元,将累加和送入data segmentn dwsum dwdata endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov ax,0mov bx,0next: inc bxadd ax,bxcmp ax,1000jb nextmov n,bxmov ax,summov ah,4chint 21hcode endsend start2.内存地址BUFFER开始存放着10个带符号字节数组,编写程序求数组中正数、零和负数的个数,并分别将它们存于PLUS开始的单元。

(2).分析将寄存器al,bx初始化,取buffer首地址给si,设置循环次数给cx,判断[si]的值正负还是零,将正数个数值送给al,负数个数值送给bh,零的个数给bl,再将三个值存放在以plus 为首地址的地址中。

data segmentcnt equ $-buffer Arrayplus db 3data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov bx,0mov al,0lea si,buffermov cx,cntlop1:test [si],80hjz zeroinc bhjmp nextzero:cmp byte ptr[si],0 jz next2inc aljmp nextnext2:inc blnext:inc siloop lop1lea di,plusmov [di],alinc dimov [di],blinc dimov [di],bhmov ah,4chint 21hcode endsend start(3).程序调试(4).心得体会学习了循环结构,了解了循环指令的用法。

3、内存中有一串以“$”结尾的字符串,统计其中“A”出现的次数。

2).分析初始化寄存器,取字符串首地址,首先判断[si]内容是否为‘$‘,若是则结束程序,否则再判断[si]是否为’A‘,若是则bl加1记录’Adata segmentstring db 'jAnsAhAenA$' cnt equ $-stringjin dbdata endscode segmentassume cs:code,ds:data start:mov ax,datamov ds,axmov bl,0lea si,stringmov cx,cntnext2:mov al,[si]cmp al,'$'jz next3cmp al,'A'JZ next开始初始化bl,取string首地[si]值给al,判断是否判断[si]是bl加1,将bl值给jin结束判断cx是是是否否是否Si+1 cx-1cx-1jmp next1next:inc blnext1:inc siloop next2next3:mov jin,blmov ah,4chint 21hcode endsend start3).程序调试4).心得体会加深了对循环结构的了解,强化了对循环指令的运用。

实验四字符串的输入和输出一、实验目的:掌握字符串输入和输出的方法,掌握基本的I/O功能调用,学习对内存变量进行处理的方法。

二、实验要求:1、分析题意,写出算法,画出流程图,再编程2、认真调试程序,对程序可能存在的所有情况都要进行运行,只有这样才能证明程序的正确性。

三、实验内容:1、在内存单元中存放了两个字符串STRINGl和STRING2(设其长度相同),试编写—程序,比较它们所含的字符是否相同。

若相同,则显示'Match';否则,显示'No match'。

2).分析取string1和string2的首地址给si和di,设置循环次数给cx,比较[si]和[di]内容是否相同,若全部相同则显示器输出mantch,若不相同,则输出no mantch.data segmentstring1 db 'jinsheng'cnt equ $-string1string2 db 'jinshenr'buff1 db 'match$'buff2 db 'no match$'data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlea si,string1 lea di,string2 mov cx,cntnext: mov al,[si] mov bl,[di]cmp al,bljz next1lea dx,buff2 mov ah,9int 21hjmp next2next1:inc si inc diloop nextlea dx,buff1mov ah,9int 21hnext2:mov ah,4chint 21hcode endsend start3).程序调试4).心得体会了解了字符串比较的指令和字符串输出的指令。

实验五程序设计综合应用一、实验目的:通过本实验,深入掌握汇编语言程序设计的方法与技巧。

二.实验内容:2、内存单元MEM开始存放了一个长度为10的无符号字节数组,编写程序找出其中的最大值和最小值并存于MAX和MIN单元。

2).分析取men的手首址给si,将首址中的数值给al、bl,再将其他数值逐个与al、bl比较,最小值给bl,最大值给al。

data segmentmin dbmax dbdata endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axSI+1 lea si,memmov al,[si]mov bl,almov cx,9next:inc sicmp [si],aljnc dacmp [si],bljc xiaojmp againda:mov al,[si]jmp againxiao:mov bl,[si]again:dec cxjnz nextmov max,almov min,blmov ah,4chint 21hcode endsend start3).程序调试4).心得体会深入掌握汇编语言程序设计的方法与技巧,加深了对循环指令的用法。

3. 将字符串转换成大写字母字符串。

设字符串的首地址为STRING,字符串的长度在LENGTH单元内。

数据段可定义如下:DATA SEGMENTSTRING DB ‘I am a student!’LENGTH DB 15DATA ENDS程序在循环体内逐个取出字符,判断是否在小写字母‘a’和‘z’之间,若在就将其转换成大写字母并放回原处,若不在则保持原字符不变。

相关主题