微机原理实验报告一 字符串排序

合集下载

微机原理课程设计报告 学生成绩排序名次

微机原理课程设计报告 学生成绩排序名次

姓名:XX 班级: XXXXX 学号: XXXXXXXXXX课程设计微WEI 机JI 原YUAN 理LI2011 年 7 月 8 日目的:结合微型计算机原理课程的学习,进一步巩固已学的知识,同时针对计算机原理知识的具体应用,学会对系统中DOS和BIOS的使用。

学会使用屏幕编辑程序——EDIT,弄懂汇编程序的上级过程以及如何运用DEBUG软件进行汇编程序的调试。

内容与要求:字符串匹配设计为掌握提示信息的设置方法及读取键入信息的方法,编写程序实现两个字符串比较,如相同则显示“MATCH”,否则显示“NO MATCH”。

从键盘输入数据并显示的设计为掌握键盘接受数据的方法,并了解将键盘数据显示时必须转换为ASCII码的原理,编写程序,将键盘接受到的四位十六进制数据转换为等值的二进制数显示。

响铃设计为掌握响铃的使用方法,编写程序,从键盘接受输入字符,如是数字N则响铃N 此,如不是数字则不响。

将键盘输入的小写字母转换成大写字母的设计为了解小写字母和大写字母在计算机内的表示方法,并学习如何进行转换,编写程序,接受键盘字符,并将其中的小写字母转变为大写字母,然后显示在屏幕上。

学生成绩名次表设计为进一步熟悉排序方法,编写程序,将100以内的30个成绩存入首址为1000H 的存储区中。

1000H+i表示学号为i的学生成绩。

编写程序使得在2000H开始的区域排出名次表,2000H+i为学号i的学生的名次。

下面着重介绍程序5——学生成绩名次表设计:流程图:主程序流程图SCAN子函数程序流程图程序代码及注释:CRLF MACRO ;宏定义,回车换行MOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDATA SEGMENTSTUNUM EQU 30 ;学生数MESS1 DB 'Please input 30 score',0DH,0AH,'$' ;提示信息ERROR DB 'Input error,try again',0DH,0AH,'$' ;报错信息MESS2 DB 'The order is:',0DH,0AH,'$'EMARK DB ;报错标志ORG 1000H ;存放成绩地址SCORE DB 30 DUP() ;成绩表ORG 2000H ;存放名次地址SEQU DB 30 DUP() ;名次表DATA ENDSSTACK SEGMENTSTA DW 32 DUP()TOP DWSTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV SP,TOPMOV AH,09H ;显示提示信息MOV DX,OFFSET MESS1INT 21HMOV SI,OFFSET SCORE ;成绩表首址MOV CX,STUNUMMOV EMARK,0 ;报错标志清0UUU: CALL GETNUM ;调用子函数读取成绩CMP EMARK,01H ;判断是否出错JE START ;出错则重新开始MOV [SI],DL ;没出错则存入成绩INC SI ;指向下一个成绩单元地址LOOP UUU ;判断30个成绩是否读取完MOV CX,STUNUMMOV DI,OFFSET SEQU ;名次表首址VVV: CALL SCAN ;调用扫描子程序MOV AL,STUNUM ;学生总数SUB AL,CL ;计算名次INC ALMOV BX,DX ;学号PUSH AX ;将名次转换成压缩BCD码方便显示PUSH BXPUSH CXXOR AH,AHMOV BH,0AHDIV BHMOV CL,4SHL AL,CLADD AL,AHMOV DH,ALPOP CXPOP BXPOP AXMOV [DI+BX],DH ;存入名次LOOP VVV ;判断是否存完MOV AH,09H ;显示名次提示信息LEA DX,MESS2INT 21HMOV CX,STUNUMMOV SI,OFFSET SEQUWWW: MOV AL,[SI]CALL DISPI ;调用子函数显示名次PUSH DXPUSH AXMOV AH,02 ;显示空格MOV DL,20HINT 21HPOP AXPOP DXINC SI ;指向名次表的下一个地址LOOP WWW ;判断是否输出所有名次MOV AH,4CH ;返回DOSINT 21HSCAN PROC NEAR ;扫面子函数,没调用一遍,找出成绩表;中最高成绩,记录其学号,并将此成绩;清0PUSH CXMOV CX,STUNUMMOV AL,00HMOV BX,OFFSET SCOREMOV SI,BXCCC: CMP AL,[SI]JAE JJJMOV AL,[SI]MOV DX,SISUB DX,BXJJJ: INC SILOOP CCCADD BX,DXMOV BYTE PTR [BX],00HPOP CXRETSCAN ENDPDISPI PROC NEAR ;显示子程序PUSH CXMOV BL,AL ;显示高4位MOV DL,BLMOV CL,04ROL DL,CLAND DL,0FHCALL DISPLMOV DL,BL ;显示低4位AND DL,0FHCALL DISPLPOP CXRETDISPI ENDPDISPL PROC NEAR ;将名次转换成对应的ASCII码值并显示ADD DL,30HMOV AH,02HINT 21HRETDISPL ENDPGETNUM PROC NEAR ;读取成绩子函数PUSH CXXOR DX,DX ;清0,用于存放成绩GGG: MOV AH,01HINT 21H ;键盘字符输入CMP AL,0DHJZ RRR ;如果是回车则结束SUB AL,30HJB ERR ;小于0则报错CMP AL,09HJBE GETS ;如果在0—9之间则存成绩至DXJMP ERR ;否则报错GETS: MOV CL,04SHL DX,CL ;将DX中已有数值左移四位XOR AH,AHADD DX,AX ;紧接着将数据存在DX中低四位JMP GGG ;跳转继续读取数据ERR: MOV AH,09H ;显示报错信息MOV DX,OFFSET ERRORINT 21HMOV EMARK,01H ;报错标志置1RRR: PUSH DXCRLF ;回车换行POP DXPOP CXRETGETNUM ENDPCODE ENDSEND START心得体会:在为期一周的微机原理课程设计中,通过查阅书籍,上网收集资料以及向老师和同学请教,我完成了老师定下的任务。

微机原理字符串匹配

微机原理字符串匹配

大学学生实验报告(2010 —2011 学年第二学期)课程名称:微型计算机原理与接口技术开课实验室:205 2011年 5 月 30 日年级、专业、班电信091 学号姓名成绩实验项目名称字符匹配程序指导教师教师评语教师签名:年月日一、实验目的、要求1.掌握提示信息的使用方法及键盘输入信息的用法。

二、实验原理及基本技术路线图或实验内容1.编写程序,实现两个字符串比较。

如果两个字符串中有一个字符相同,显示“MATCH”,否则,显示“NO MATCH”。

2.程序框图段寄存器及堆栈初始化显示“请输入字符串1”使用INT 21H的0A号子功能,接收键入的字符串显示“请输入字符串2”指针SI指向串1的首字符SI指向的字符串和串2中所有字符作比较Y相等?NSI+1,指向串1中下一字符N串1中的字符已取完?Y显示“NO MATCH”显示“MATCH”返回DOS三、所用仪器、材料和软件软件名称为:MASM FOR Windows 集成实验环境2009.7四、实验方法、步骤根据实验的目的在该环境中编写出源代码,在进行调试、运行后,看能否得出结果。

五、源码程序编制及分析注释程序清单及注释CRLF MACRO ;宏定义MOV AH,02H ;AH=02HMOV DL,0DH ;DL=0DHINT 21H ;系统功能调用来输出个回车字符MOV AH,02H ;AH=02HMOV DL,0AH ;DL=0AHINT 21H ;系统功能调用来输出一个换行符ENDM ;宏定义结束DATA SEGMENT ;数据段定义MESS1 DB 'MATCH',0DH,0AH,'$' ;定义8个存储单元的数据MESS2 DB 'NO MATCH',0DH,0AH,'$' ;定义11个存储单元的数据MESS3 DB 'INPUT STRING1:',0DH,0AH,'$' ;定义17个存储单元的数据MESS4 DB 'INPUT STRING2:',0DH,0AH,'$' ;定义17个存储单元的数据MAXLEN1 DB 81 ;字符串1的缓冲区最大字符数ACTLEN1 DB ? ;字符串1的实际输入字符的个数STRING1 DB 81 DUP (?) ;用来存储字符串1的81个单元MAXLEN2 DB 81 ;字符串2的缓冲区最大字符数ACTLEN2 DB ? ;用来存放字符串2的实际字符个数STRING2 DB 81 DUP (?) ;用来存储字符串2的81个单元DATA ENDS ;数据段定义结束STACK SEGMENT STACK ;堆栈段定义STA DB 50 DUP (?) ;在堆栈段定义50个空字符TOP EQU LENGTH STA ;TOP=50STACK ENDS ;堆栈段定义结束CODE SEGMENT ;代码段定义ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK ;段分配START: MOV AX,DATA ;MOV DS,AX ;将数据段的段地址赋给DSMOV ES,AX ;将数据段的段地址赋给ESMOV AX,STACK ;MOV SS,AX ;将堆栈段的段地址赋给SSMOV SP,TOP ;SP=50MOV AH,09H ;AH=09HMOV DX,OFFSET MESS3 ;INT 21H ;输出'INPUT STRING1:MOV AH,0AHMOV DX,OFFSET MAXLEN1INT 21H ;(DS:DX)=最大字符数,(DS:DX+1)=实际的字符数CRLFMOV AH,09HMOV DX,OFFSET MESS4INT 21H ;输出INPUT STRING2:MOV AH,0AHMOV DX,OFFSET MAXLEN2INT 21H ;(DS:DX)=最大字符数,(DS:DX+1)=实际的字符数CRLF ;宏调用CLD ;DF=0,则串操作有低地址向高地址方向进行MOV SI,OFFSET STRING1 ;将字符串1的偏移地址赋给SIMOV CL,[SI-1] ;将字符串1的字符实际个数赋给CLMOV CH,00H ;CH=00HKKK: MOV DI,OFFSET STRING2 ;将字符串2的偏移地址赋给DI PUSH CX ;将CX中的值即为字符串1的字符个数压入堆栈MOV CL,[DI-1] ;将字符串2的字符个数赋给CLMOV CH,00H ;CH=00HMOV AL,[SI] ;取出字符串1的第一个字符给ALMOV DX,DI ;将字符串2的第一个字符赋给DXREPNZ SCASB ;CX!=0(没有查完)和ZF=0(不相等)时重复JZ GGG ;ZF=1,表示已经搜到了相等的字符,则转出INC SI ;SI=SI+1POP CX ;弹出原先字符串1中剩下未被进行比较的字符个数LOOP KKK ;CX-1!=0则继续返回到子过程KKKMOV AH,09HMOV DX,OFFSET MESS2INT 21H ;否则CX=0时的系统功能调用将显示NO MATCHJMP PPP ;将跳转到PPPGGG: MOV AH,09HMOV DX,OFFSET MESS1INT 21H ;系统功能调用将显示MATCHPPP: MOV AX,4C00HINT 21H ;系统功能调用显示控制台的操作界面CODE ENDS ;代码段结束END START ;伪指令结束六、实验结果、分析和结论和体会1、实验结果如图所示2、实验分析:注意相关指令的运用与子啊存储空间中分段的运用3、体会:对一些指令进一步熟悉,对指令的执行过程有很好的了解。

微机原理与接口技术实验报告一

微机原理与接口技术实验报告一

微机原理与接口技术实验报告(一)实验内容一:1、实验目的: 考察对内存寻址方式、8086指令的理解内存中的数据排列如上表所示,各寄存器内容如下DS=2100H ES=2111H SS=2000H BX=106H CX=3H SI=106H DI=12H BP=1100H SP=1100HFR=3402H (FR 标志寄存器,FR 中的DF -字符串操作方向位为1)在执行下列指令后,写出寄存器AX中的内容 0) pop ax; AX= 1) mov ax,bx; AX= 2) mov ax,[bx];AX= 3) mov ax,102H;AX= 4) mov ax,[102H];AX= 5) mov ax,6[SI];AX= 6) lea ax,6[BX][DI];AX= 7) mov ax,[BP+DI];AX= 8) rep lodsw;AX= , 还需写出SI=2、实验内容: (1)开始菜单下选择运行,输入cmd 回车,在开启的窗口中输入debug 后回车,进入程序输入环境(2)利用r 指令显示当前各寄存器储值并按照上文中的寄存器值进行修改 结果如下:物理地址 内容(字节) 物理地址 内容(字节)21100H BEH 21110H 99H 21101H 02H 21111H 00H 21102H 01H 21112H E8H 21103H 8BH 21113H 7EH 21104H 44H 21114H E0H 21105H 02H 21115H 74H 21106H 29H 21116H 06H 21107H 44H 21117H E8H 21108H 04H 21118H 17H 21109H 9CH 21119H 01H 2110AH 50H 2111AH ACH 2110BH E6H 2111BH EBH 2110CH 99H 2111CH 34H 2110DH C6H 2111DH 00H 2110EH 06H 2111EH 30H 2110FHE8H2111FH0BH(3)d指令查看21100H——2111FH内存单元的内容(4)e指令对该段内存单元进行赋值(5)a指令按顺序输入要求中列出的指令(6)u指令进行反汇编(7)t指令(跟踪命令)逐条运行指令,观察记录指令运行结果3、实验结果0) pop ax; AX=02be1) mov ax,bx; AX=01062) mov ax,[bx];AX=44293) mov ax,102H;AX=01024) mov ax,[102H];AX=8b015) mov ax,6[SI];AX=c6996) lea ax,6[BX][DI];AX=011e7) mov ax,[BP+DI];AX=7ee88) rep lodsw;AX=4429, SI=0108实验内容二:1、实验目的:熟悉masm for windows 软件的应用,体会汇编程序的编写、编译、执行及调试等各个环节。

汇编实验之字符串的排序

汇编实验之字符串的排序

汇编实验之字符串的排序计算机原理实验室实验报告课程名称:计算机语言与汇编原理姓名学号班级成绩设备名称及软件环境实验名称汇编语言实现字符串排序(冒泡排序)实验日期一.实验内容利用汇编语言实现字符串排序,输出,查找等功能二.理论分析或算法分析在汇编语言中,需要调用外部模块(子程来/函数)来完成部分功能,调用printf函数将字符串显示在屏幕上。

printf函数属于C语言的库函数。

它的执行代码放在一个动态链接库(dynamic load library,DLL)中,这个动态库的名字叫msvcrt.dll。

一个DLL文件对应一个导入库,如msvcrt.dll的导入库是msvcrt.lib;kernel32.dll的导入库是kernel32.lib;user32.dll的导入库是user32.lib等。

导入库文件在Visual C++的库文件目录中,在链接生成可执行文件时使用。

可执行文件执行时,只需要DLL文件,不需要导入库。

printf PROTO C :dword,:vararg在汇编语言中,可以调用printf 函数。

在程序中要指明printf的调用规则以及它的参数类型:Printf PROTO: dword,:varargprintf使用C调用规则(参数自右至左入栈,由主程序平衡堆栈)。

第1个参数是一个双字(:dword),即字符串的地址。

vararg表示后面的其他参数个数可变,可以一个没有,也可以跟多个参数三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)做一个缓冲区,串口接收数据往缓冲区里写!在串口接收完(可以是判断字符串长度,或者判断结束标识,如0D 0A就可以用来做判断)后,置标志,主程序查询标志,如果有效,从缓冲区头开始,与指定字符串进行比较,直到找到相应字符串,然后进行个字大小的排序,并最终输出排列的顺序表。

四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)Start: push cspop dspush cspop es ;使数据段、附加段与代码段同段Input_Str: Output Prompt_Str ;提示输入字符串lea dx,Buffer ;字符串缓冲区地址mov ah,0ahint 21hlea si,Buffer[1] ;实际输入的字符数地址cldlodsbtest al,0ffhjz Input_Str ;若直接回车,没有输入任何字符,则请重新输入mov cl,alxor ch,chxor bx,bx ;计数器清零,bh=元音字母计数器,bl=辅音字母计数器Vowel_conso:lodsbor al,20h ;转换成小写cmp al,'a'jb Next_One ;小于'a',不是字母,不计数cmp al,'z'ja Next_One ;大于'z',不是字母,不计数push cxlea di,Vowel ;元音字符串地址mov cx,5 ;元音字母个数repnz scasb ;扫描当前字母是否是元音字母jcxz $+6inc bh ;元音字母计数jmp short $+4inc bl ;辅音字母计数pop cxNext_One: loop Vowel_consoOutput Vowel_Prom ;提示显示元音字母个数mov al,bhxor ah,ahcall Dec_ASCII ;显示元音字母个数Output Conso_Prom ;提示显示辅音字母个数mov al,blxor ah,ahcall Dec_ASCII ;显示辅音字母个数mov ah,7 ;不带回显的键盘输入,即等待按键(暂停),结束程序int 21hExit_Proc: mov ah,4ch ;结束程序int 21hBuffer db 255,0 ;字符串缓冲区Code ENDSEND Start实验输出图形调试过程中出现的问题及其解决方法1.出现不能识别的字符串输出2.不能对现现有字符串进行排序3.原始字符串的书写输出出现混乱解决方法1.对原有需要比较的字符串检查其输入的完整性,和正确性。

C语言实验报告-字符串排序

C语言实验报告-字符串排序
if(isdigit(output[i])!=0)
{output[i]=a[m];
m++;
}
}
}
void main()
{
char input[50];
char output[50];
scanf("%s",input);
my_sort(input,output);
printf("input:%s\n",input);
}
后来发现这实在是太麻烦了,就使用了字符函数isdigit代替switch语句,使程序代码缩短(能运行但无法得出想要结果的错误程序):
#include<stdio.h>
#include<string.h>
#include<ctype.h>
void my_sort(char input[],char output[])
{
char input[50];
char output[50];
scanf("%s",input);
my_sort(input,output);
printf("%s\n",input);
printf("%s\n",output);
}
但是,虽然这个程序可以运行,却得不到我想要的结果。于是,经过查找我发现了问题所在为n的数值,所以我将之改成(最终成功的程序):、
#include<string.h>
#include<ctype.h>
void my_sort(char input[],char output[])
{
int i,n,m,k,j;

汇编语言实现字符串逆序输出

汇编语言实现字符串逆序输出

北京邮电大学微机原理与接口技术实验报告学院:电子工程学院班级:2012211203学号:2012210876姓名:邱启哲字符串的逆序存储实验一、题目要求实现将STRING1起始存取单元中的字符串’ABCDEFGHIJKLM’逆序存放到STRING2的存储单元中,并在屏幕上显示结果。

二、设计思路在数据段定义时,将字符串’ABCDEFGHIJKLM’存入STRING1中,并定义一个空字符串数组STRING2用于存放字符。

将指针[STRING1+BP]指向字符串数组STRING1的最后一个字符,指针[STRING2+BX]指向STRING2的起始字符对其进行赋值,每次赋值后STRING1的指针减一,STRING2的指针加一,循环赋值13次。

赋值完成后用系统调用实现STRING2中内容的循环输出。

三、程序代码DATA SEGMENTSTRING1 DB 'ABCDEFGHIJKLM'STRING2 DB 13DUP(0)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DA TAMOV DS,AXMOV CX,13MOV BX,0MOV BP,12LOOP1:;此循环用于实现对STRING2的赋值功能MOV AL,[STRING1+BP] ;通过AL实现STRING1对STIRNG2的赋值MOV [STRING2+BX],ALINC BXDEC BPLOOP LOOP1MOV CX,13 ;将CX值复员以便进入下一个循环MOV BX,OFFSET STRING2;使BX指向STRING2的起始字符LOOP2:MOV AH,2 ;调用2号系统调用,输出STRING2MOV DL,[BX] ;用STRING2中的字符为DL赋值INT 21HINC BX ;BX加一,向后移一位LOOP LOOP2MOV AH,4CH ;程序结束INT 21HCODE ENDSEND START四、程序运行截图1、汇编和连接过程2、生成相应程序文件3、程序运行结果由结果可见,实现了字符串的逆序存储。

微机原理__字符匹配程序实验报告

微机原理__字符匹配程序实验报告

太原理工大学现代科技学院课程实验报告专业班级学号姓名指导教师一、实验目的掌握提示信息的使用方法及键盘输入信息的用法。

二、实验内容1、编写程序,实现两个字符串比较。

如果两个字符串中有一个字符相同,显示“MATCH”,否则,显示“NO MATCH”。

2、程序框图三、所用仪器与软件仪器:电脑一台软件:Masm for Windows 集成实验环境 2009、7四、实验方法、步骤1、编写程序代码2、运行程序,修改错误代码3、再次运行代码直至运行出正确结果五、源码程序编制及分析注释CRLF MACRO 宏定义MOV AH,02H AH=02HMOV DL,0DH DL=0DHINT 21H 系统功能调用,输出回车字符MOV AH,02H AH=02HMOV DL,0AH DL=0AINT 21H 系统功能调用,输出换行符ENDM 宏定义结束DATA SEGMENT 定义数据段MESS1 DB 'MATCH',0DH,0AH,'$' 定义8个数据储存单元MESS2 DB 'NO MATCH',0DH,0AH,'$' 定义11个数据储存单元MESS3 DB 'INPUT STRING1:',0DH,0AH,'$' 定义17个数据储存单元MESS4 DB 'INPUT STRING2:',0DH,0AH,'$' 定义17个数据储存单元MAXLEN1 DB 81 定义最大长度为81个字节ACTLEN1 DB ?STRING1 DB 81 DUP (?) 定义STRING1长度为81 MAXLEN2 DB 81 定义最大长度为81ACTLEN2 DB ?STRING2 DB 81 DUP (?) 定义STRING2长度为81DATA ENDS 数据段结束STACK SEGMENT STACK 定义堆栈段STA DB 50 DUP (?) 定义50个数据储存单元TOP EQU LENGTH STA 给TOP赋值50STACK ENDS 堆栈段结束CODE SEGMENT 定义代码段ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK 定义段基址START: MOV AX,DATAMOV DS,AX 把DATA的首地址赋给DSMOV ES,AX 把DATA的首地址赋给ESMOV AX,STACKMOV SS,AX 把STACK的首地址赋给SSMOV SP,TOP 给SP赋值50MOV AH,09H AH=09HMOV DX,OFFSET MESS3 把MESS3的偏移地址赋给DXINT 21H 系统功能调用MOV AH,0AH AH=0AHMOV DX,OFFSET MAXLEN1 把MAXLEN1的偏移地址赋给DXINT 21H 系统功能调用CRLFMOV AH,09H AH=09HMOV DX,OFFSET MESS4 把MESS4的偏移地址赋给DXINT 21H 系统功能调用MOV AH,0AH AH=0AHMOV DX,OFFSET MAXLEN2 把MAXLEN2的偏移地址赋给DXINT 21H 系统功能调用CRLFCLDMOV SI,OFFSET STRING1 把STRING1的偏移地址赋给SIMOV CL,[SI-1] 把SI-1内的内容赋给CLMOV CH,00H CH=00HKKK: MOV DI,OFFSET STRING2 把STRING2的偏移地址赋给DI PUSH CX 将CX压入堆栈MOV CL,[DI-1] 将DI-1内的的内容赋给CLMOV CH,00H CH=00HMOV AL,[SI] 将SI内的内容赋给ALMOV DX,DI 将DI赋给DXREPNZ SCASB 寻找第一个相同字符JZ GGG ZF=0执行GGG否则顺序执行INC SI SI自加1POP CX 弹出CXLOOP KKK 跳转到KKK循环MOV AH,09HMOV DX,OFFSET MESS2INT 21H 系统功能调用JMP PPP 跳转到PPPGGG: MOV AH,09HMOV DX,OFFSET MESS1INT 21H 输出MESS1PPP: MOV AX,4C00HINT 21H 带返回码结束CODE ENDS 代码段结束END START 整个程序结束六、实验结果与分析实验结果如下:(1)两个字符串中没有字符相同:(2)两个字符串中有两个字符相同:。

贵州大学微机原理(汇编语言)实验报告_自编程序实验1_用表格形式显示字符

贵州大学微机原理(汇编语言)实验报告_自编程序实验1_用表格形式显示字符

实验课程名称微型计算机原理实验报告实验项目名称自编程序实验1 专业班级电子信息科学与技术08级1班学生姓名学号实验成绩指导教师签字理学院实验时间:2010年12月6日自编程序实验1 用表格形式显示字符1、题目:用表格形式显示ASCII字符2、实验要求:按15行*16列的表格形式显示ASCII码为10H—100H的所有字符,即以行为主的顺序及ASCII码递增的次序依次显示对应的字符。

每16个字符为一行,每行中的相邻两个字符之间用空白字符(ASCII码为0)隔开。

3、提示:(1)显示每个字符可使用功能号为2的显示输出功能调用MOV AH,2MOV DL,10H;字符从10H开始,每显示一个DL+1产生下一个字符INT 21H(2)显示空白符时DL=00H;(3)每行显示结束时需要显示回车(ASCII码为0DH)和换行(ASCII码为0AH),本行显示结束后可另起一行显示。

基本实验程序如下:;ASCII.ASMDA TA SEGMENTINFO DB '**This is a display ASCII codesheet.(10H-100H)**',0DH,0AH,'$'DA TA ENDSCODE SEGMENTASSUME DS:DA TA,CS:CODESTART: MOV AX,DATAMOV DS,AXLEA DX,INFOMOV AH,9INT 21HMOV DX,10HLINE: MOV CL,16CYCLE: MOV AH,2INT 21HINC DXCMP DX,100HJZ DONEPUSH DXMOV AH,2MOV DL,0INT 21HPOP DXDEC CLCMP CL,0JZ NEXTJMP CYCLE| 微型计算机原理实验报告 1NEXT: PUSH DXMOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21HPOP DXJMP LINEDONE: MOV AH,4CHINT 21HCODE ENDSEND START结果如图所示:加上表格线后的实验程序如下:;ASCII.ASMDA TA SEGMENTINFO DB 0DH,0AH,' **This is a display ASCII codesheet.(10H-100H)**',0DH,0AH,0DH,0AH,'$'DA T1 DB201,205,205,205,209,205,205,205,209,205,205,205,209,205,205,205,209,205,20 5,205,209,205,205,205,209,205,205,205,209,205,205,205,209,'$'DA T2 DB205,205,205,209,205,205,205,209,205,205,205,209,205,205,205,209,205,205,20 5,209,205,205,205,209,205,205,205,209,205,205,205,187,0DH,0AH,'$'DA T3 DB0DH,0AH,200,205,205,205,207,205,205,205,207,205,205,205,207,205,205,205, 2微型计算机原理实验报告|207,205,205,205,207,205,205,205,207,205,205,205,207,205,205,205,207,'$'DA T4 DB205,205,205,207,205,205,205,207,205,205,205,207,205,205,205,207,205,205,205,207,205,205,205,207,205,205,205,207,205,205,205,188,'$'DA TA ENDSCODE SEGMENTASSUME DS:DA TA,CS:CODESTART: MOV AX,DATAMOV DS,AXLEA DX,INFO ;显示提示信息MOV AH,9INT 21HLEA DX,DAT1 ;显示表格的顶线INT 21HLEA DX,DAT2 ;显示表格的顶线INT 21HMOV DX,10HLINE: PUSH DX ;对DL中的数据保护MOV DL,186 ;显示表格最左边边线MOV AH,2INT 21HMOV DL,0INT 21HPOP DX ;返回DL中的数据MOV CL,16MOV CH,16CYCLE: INT 21H ;显示DL里存的ASCII码字符INC DX ;DX自加,指向下一个字符CMP DX,100H ;与100H比较,看是否是显示完毕JZ DONE ;是,结束程序DEC CHCMP CH,0JZ NEXT0CALL DISP ;调用子程序,显示间隔线NEXT0: DEC CL ;CL自减,用于16个字符显示完毕后换行CMP CL,0JZ NEXTJMP CYCLENEXT: PUSH DXMOV DL,0INT 21HMOV DL,186 ;显示表格最右边边线INT 21H| 微型计算机原理实验报告 3MOV DL,0DH ;回车换行INT 21HMOV DL,0AHINT 21HPOP DXJMP LINEDISP PROCPUSH DXMOV DL,0INT 21HMOV DL,179INT 21HMOV DL,0INT 21HPOP DXRETDONE: MOV DL,0INT 21HMOV DL,186INT 21HLEA DX,DAT3MOV AH,9INT 21HLEA DX,DAT4INT 21HMOV AH,4CHINT 21HCODE ENDSEND START结果如图所示:4微型计算机原理实验报告|| 微型计算机原理实验报告 5。

《微机原理实验五循环结构的程序设计:排序程序设计实验》

《微机原理实验五循环结构的程序设计:排序程序设计实验》

实验五循环结构的程序设计:排序程序设计实验1、实验目的(1)掌握接收键盘数据的方法。

(2)掌握循环结构的程序设计和排序程序设计的方法。

(3)进一步熟练在PC上建立、汇编、链接、调试和运行汇编语言程序的过程。

2、实验内容用汇编语言编写学生成绩统计程序:键盘输入学生成绩到SCORE中(0<=分数<=100,设有10个学生成绩分别是56,69,84,82,73,88,99,63,100,80)。

编程将它们由大到小排序,存回到原来的SCORE变量中;并统计低于60分、60~69、70~79、80~89、90~99及100分的人数,分别存放在S5、S6、S7、S8、S9、S10单元中。

3、实验及报告要求:(1)要求画出完整的程序流程图。

(2)根据流程图,编写完整的汇编代码源文件,要求写出所有伪指令和指令的注释;(3)编译、连接生成可执行文件,调试该可执行文件。

(4)写出完整的实验报告,特别是“实验结果”与“实验总结体会”部分,是评分的主要依据。

(5)实验总结中要求结合实验中的经验、教训或体会对汇编语言格式、调试方法、汇编指令及汇编语言编程方法、微机原理学习方法作出总结。

4、思考题:如何从屏幕输出结果?YN输入DATAS SEGMENTBUFFER DB 80,81 DUP(0),'$' SCORE1 DB 10 DUP(0);此处输入数据段代码 DATAS ENDSSTACKS SEGMENTSTA DB 64 DUP(0)SP_TOP DB 0STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXMOV AX,STACKSMOV SS,AXLEA SP,SP_TOPLEA DX,BUFFERLEA DI,SCORE1MOV AH,0AHINT 21HLEA SI,BUFFERADD SI,2MOV DL,0MOV CX,10JU: MOV AL,[SI]JE EXITPUSH CXCMP AL,2CHJE CH1POP CXINC SIINC DLLOOP JUJMP EXITCH1:CMP DL,2JNE CH2MOV AL,[SI-2]SUB AL,30HMOV CL,10MUL CLMOV AH,0MOV BL,[SI-1]SUB BL,30HMOV [DI],ALPOP CXINC DIINC SIMOV DL,0LOOP JUCH2:MOV [DI],100POP CXINC DIINC SIMOV DL,0LOOP JUEXIT: MOV AH,4CHINT 21HCODES ENDSEND START记人数DATA SEGMENTSCORE DB 67S5 db 0S6 db 0S7 db 0S8 db 0S9 db 0S10 db 0TABLE DW NP,NP,NP,NP,NP,NP,S60,S70,S80,S90,S100 DATA ENDSCODE SEGMENT 'CODE'ASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AX MOV AH,0LEA SI,SCORESP: MOV AL,[SI]MOV BL,10DIV BLSAL AL,1MOV BL,ALMOV BH,0JMP TABLE[BX]S100: INC S10 JMP NEXTS90: INC S9 JMP NEXTS80: INC S8JMP NEXTS70: INC S7JMP NEXTS60: INC S6JMP NEXTNP: INC S5 NEXT:INC SILOOP SP FINISH: MOV AH,4CH INT 21HCODE ENDSEND START排序DATAS SEGMENTSTR DB 'PLS INPUT SCORE (0-100):',0DH,0AH,'$' SCORE DB 20DB 81 DUP(0)DB '$';此处输入数据段代码SC DB 10 DUP(0)DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX;此处输入代码段代码LEA DX,STR ;调显示字符串的首地址MOV AH,9INT 21H ;字符串显示LEA DX,SCORE ;调字符串存放单元的首地址MOV AH,0AHINT 21H ;字符串输入 LEA DI,SCLEA SI,SCOREADD SI,2COMP: MOV AL,[SI]CMP AL,0DHJZ EXITCMP AL,2CHJZ NEXT1INC SILOOP COMPNEXT1:MOV AL,[SI]MOV AL,[SI-1]SUB AL,30HADD BL,ALMOV [DI],BLINC DIINC SIJMP COMPEXIT:MOV AH,4CHINT 21H ;返回操作系统CODES ENDSEND START。

《字符串排序》微课设计与开发

《字符串排序》微课设计与开发

《字符串排序》微课设计与开发当前,微课已经成为高校信息化资源建设的重点和热点。

如何提高微课的设计与开发水平却是亟需解决的问题。

从教学内容的选择、教学目标的设定、教学活动的设计、突出教学特色等方面对高校微课教学进行了探讨。

微课课程整合微课设计微课开发微课是以阐释某一知识点为目标,以短小精悍的在线视频为表现形式,以学习或教学应用为目的的在线教学视频。

笔者从微课《字符串排序》的亲身实践出发,对高校教学中的微课教学做了一些有益的探讨。

一、选择教学内容C语言程序设计是泰山医学院信息管理与信息系统四年制本科专业的一门重要的基础课程,主要面向一年级新生而开设。

字符串排序是该课程学习过程中的重点和难点。

而微课《字符串排序》正是针对学生在该知识点学习过程中经常遇到的三个代表性问题:字符串的存放、排序以及指针数组在字符串排序中的应用而设计的一节课。

微课学习结束之前,应该给学生呈现学前必备知识,微课学习结束之后,再给学生呈现拓展知识点,以促进学习的可持续化。

二、设定教学目标本次微课通过创设“图书书名排序管理”的问题情境,借助相关教学工具软件,对字符串排序这一知识点进行了深入的剖析,旨在使学生达到如下目标:1.掌握多个字符串的存储方法;2.掌握选择排序算法;3.重点掌握指针数组在字符串排序问题中的灵活应用;4.深入理解结构化程序设计的基本思想。

三、教学活动设计本次微课采用启发式教学法及任务驱动教学法,将大的问题分解为几个小的问题,使学生带着真实的任务在探索中学习。

首先,设置问题情境:“史密斯是某高校图书馆的馆员,面对大量的图书信息,他想用C语言编写程序对图书书名按照字典顺序(由小到大)进行排序,他应该怎么做呢?”进一步启发学生对该问题进行思考,将具体问题抽象成“对多个字符串组成的集合进行排序”。

紧接着从多个字符串的存放(数据结构)和如何对多个字符串进行排序(算法)两个角度展开教学活动。

针对字符串的存放,采取了对比分析方法。

微机原理实验报告冒泡法对数据排序

微机原理实验报告冒泡法对数据排序

实验内容:用“冒泡“法对一组数300,250,280,240,260,按从小到大的顺序排列。

实验要求:1、编制程序,对这组数进行排序,并输出原数据及排序后数据;2、利用DEBUG调试工具,用D0命令,查瞧排序前后,内存数据的变化;3、去掉最大与最小的两个值,求出其余值的平均值,并输出最大值,最小值与平均值;4、用学过的压栈PUSH与出栈POP指令,将平均值按位逐个输出(即输出263);5.将平均值263转化为二进制串,并将这组二进制串输出。

6、所有数据输出前要用字符串的输出指令,进行输出提示(如:zui da zhi shi : 300等),所有数据结果能清晰地显示在屏幕上。

程序代码:DATA SEGMENT ;定义数据段DT1 DW 300,250,280,240,260DT2 DB 'what five data input is',0DH,0AH,'$'DT3 DB 'what after rank is',0DH,0AH,'$'DT4 DB 'The max is',0DH,0AH,'$'DT5 DB 'The min is',0DH,0AH,'$'DT6 DB 'The average is',0DH,0AH,'$'DT7 DB 'show you the average one by one',0DH,0AH,'$'DT8 DB 'show you the average in binary form',0DH,0AH,'$'DT9 DB 0DH,0AH,'$'DT0 DB 'B',0DH,0AH,'$'N EQU 5DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA ;说明代码段、数据段STAT: MOV AX,DATAMOV DS,AXLEA DX,DT2 ;输出字符串MOV AH,09HINT 21HCALL ZIXU ;调用数据输出过程对数据进行排序:MOV CX,N-1 ;设置N-1轮比较次数MOV DX,1 ;比较轮次技术JM4:PUSH CXMOV CX,NSUB CX,DXLEA SI,DT1JM3:MOV AX,[SI]CMP AX,[SI+2]JLE JM2XCHG AX,[SI+2]XCHG AX,[SI]JM2:ADD SI,2LOOP JM3POP CXINC DXLOOP JM4输出排序后的顺序:LEA DX,DT3MOV AH,09HINT 21HCALL ZIXU输出最大值:LEA DX,DT4MOV AH,09HINT 21HLEA SI,DT1+8 ;排序后最后一个数就就是最大值MOV AX,[SI]CALL ZIXU1输出最小值:LEA DX,DT5MOV AH,09HINT 21HLEA SI,DT1 ;排序后第一个数就就是最小值MOV AX,[SI]CALL ZIXU1输出平均值:LEA DX,DT6MOV AH,09HLEA SI,DT1+2 ;去掉最大最小后的数求与MOV AX,[SI]ADD AX,[SI+2]ADD AX,[SI+4]MOV BX,3MOV DX,0DIV BX ;求其平均值MOV CX,AXCALL ZIXU1 ;调用输出程序输出把平均值分三位输出:LEA DX,DT7MOV AH,09HINT 21HMOV AX,CXMOV BX,100MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,AL ;输出平均值的第一位MOV AH,2INT 21HLEA DX,DT9 ;换行MOV AH,09HINT 21HPOP DXMOV AX,DXMOV BX,10MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,AL ;输出平均值的第二位MOV AH,2INT 21HLEA DX,DT9 ;换行MOV AH,09HPOP DXADD DX,30HMOV AH,2 ;输出平均值的第三位I NT 21HLEA DX,DT9MOV AH,09HINT 21H;以二进制位输出平均值LEA DX,DT8MOV AH,09HINT 21HMOV BX,CXMOV CX,16JM5:MOV DX,0SAL BX,1RCL DX,1ADD DX,30HMOV AH,02HINT 21H DEC CXJNZ JM5LEA DX,DT0MOV AH,09HINT 21HMOV AH,4CH ;返回DOSINT 21H;数据序列的输出写成一个过程:ZIXU PROCMOV CX,5LEA SI,DT1JM1:MOV AX,[SI]MOV BX,100MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,ALINT 21HPOP DXMOV AX,DXMOV BX,10MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,ALMOV AH,2INT 21HPOP DXADD DX,30HMOV AH,2INT 21HLEA DX,DT9MOV AH,09HINT 21HADD SI,2LOOP JM1RETZIXU ENDP;当个数据输出过程:ZIXU1 PROC ;将数据的输出写成一个过程MOV BX,100MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,ALMOV AH,2INT 21HPOP DXMOV AX,DXMOV BX,10MOV DX,0DIV BXADD AL,30HMOV DL,ALMOV AH,2INT 21HPOP DXADD DX,30HMOV AH,2INT 21HLEA DX,DT9MOV AH,09HINT 21HRETZIXU1 ENDPCODE ENDSEND STAT调试中出现的一些问题:1.输入时不慎将字母O当数字0输入,结果导致了下面第5行提示的错误。

第四次上机实验内容字符串排序.ppt

第四次上机实验内容字符串排序.ppt

条件: 从字符串中间一分为二, 左边部分按字符的ASCII值降序排 序,右边部分按字符的ASCII值升序排序。如果原字符串长度为奇数, 则最中间的字符不参加排序, 字符仍放在原位置上。
例如: 位置
012345678
498765
则处理后字符串 d c b a e f g h
len=strlen(xx[i])
for(j = 0 ; j < len-1 ; j++) for(k = j +1; k < len; k++) if(xx[i][j] > xx[i][k]) { ch = xx[i][k] ; xx[i][k] = xx[i][j] ; xx[i][j] = ch ; }
外循环j下标从1开始,步长为2 内循环k从j+2开始,步长为2
} }
字符串左右排序
函数readDat()是从文件in.dat中读取20行数据存放到字符串数组xx中 (每行字符串长度均小于80)。请编制函数jsSort(),其函数的功能是: 以行为单位对字符串按下面给定的条件进行排序,排序后的结果仍按 行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出 到文件out.dat中。
序排序。(交换方法)
ch = xx[i][k] ;
xx[i][k] = xx[i][j] ;
xx[i][j] = ch ;
}
如果字符串xx[i]的长度是否是奇数,则half++指向下一
if(len % 2) half++ ;
字符,如果是偶数,则half值不变。
} }
for(j = half ; j < (len-1) ; j++)

微机原理实验报告(排序,计算)

微机原理实验报告(排序,计算)

《微机原理与接口技术实验报告》汇编语言循环结构程序设计一、实验目的1. 理解各种指令的功能。

2. 进一步学习程序的调试。

二、实验内容:1.编制程序,对这组数进行排序,并输出原数据及排序后数据; 2.利用DEBUG 调试工具,用D0命令,查看排序前后,内存数据的变化; 3.去掉最大和最小的两个值,求出其余值的平均值,并输出最大值,最小值和平均值; 4.用学过的压栈PUSH 和出栈POP 指令,将平均值按位逐个输出; 5.将平均值转化为二进制串,并将这组二进制串输出。

6. 所有数据输出前要用字符串的输出指令,进行输出提示(如:zui da zhi shi : 300等),所有数据结果能清晰地显示在屏幕上。

三、程序流程图四、程序清单DATA SEGMENTSR DB 100,?,50 DUP (?)VAR DW 5 DUP (0)AVG DW ?TEN DW 10P DW3D DW 2X DW?Y DW?MESG1 DB 13,10,'PLEASE INPUT:$'XS1 DB 13,10,'ORIGIN:$'XS2 DB 13,10,'NOW:$'XS3 DB 13,10,'MAX:$'XS4 DB 13,10,'MIN:$'XS5 DB 13,10,'AVG:$'XS6 DB 13,10,'AVG2:$'DATA ENDSSTACK SEGMENTDW 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATAMOV DS,AXMOV ES,AXMOV DX,OFFSET MESG1MOV AH,09HINT 21HLEA DX,SRCLDMOV CX,5LEA SI,SRADD SI,2LEA DI,VARIN_LOOP:MOV x, 0MOV Y,0_INX:MOV AH, 01HINT 21H;-------------------------------- CMP AL, '0'JB OKKCMP AL, 3AHJB SUB_30H;-------------------------------- JMP OKK;-------------------------------- SUB_30H:SUB AL, '0'MOV AH, 0MOV Y, AXMOV AX, xMUL TENADD AX, YMOV x, AXJMP _INX;-------------------------------- OKK:MOV AX,xSTOSWINC SILOOP IN_LOOP;-------------------------ORIGIN--- MOV DX,OFFSET XS1MOV AH,09HINT 21HMOV CX,5LEA SI,VARLOOPXS1:CALL XSLOOP LOOPXS1;-------------------------------CLDMOV CX,4MOV DX,1LOOPPX: CALL PXINC DXLOOP LOOPPX;----------------------------NOW-- MOV DX,OFFSET XS2MOV AH,09HINT 21HMOV CX,5LEA SI,VARLOOPXS2:CALL XSLOOP LOOPXS2;----------------------------MAX--- MOV DX,OFFSET XS3MOV AH,09HINT 21HLEA SI,VARADD SI,8CALL XS;-----------------------------MIN--- MOV DX,OFFSET XS4MOV AH,09HINT 21HLEA SI,VARCALL XS;-----------------------AVG------ MOV DX,OFFSET XS5MOV AH,09HINT 21HMOV AX,[SI]MOV BX,[SI+2]ADD AX,BXMOV BX,[SI+4]ADD AX,BXCWDIDIV PLEA SI,AVGMOV [SI],AXCALL XS;----------------------AVG2---------- MOV DX,OFFSET XS6MOV AH,09HINT 21HMOV CX,16LEA SI,AVGMOV AX,[SI]LPAVG: CWDSHR AX,1 ;to CFJB ONEMOV DX,0JMP PPONE: MOV DX,1PP: PUSH DXLOOP LPAVGMOV CX,16AVG2XS:POP DXADD DL,30HMOV AH,02HINT 21HLOOP AVG2XSEXIT: MOV AH,4CHINT 21HXS PROCLODSWMOV BX,1ZL1: CWDIDIV TENPUSH DXCMP AX,0JZ ZL2INC BXJMP ZL1ZL2: POP DXADD DL,30HDEC BXMOV AH,2INT 21HJNZ ZL2MOV DL,20HMOV AH,02HINT 21HRETXS ENDPPX PROCPUSH CXMOV CX,5SUB CX,DXMOV SI,0RECMP: MOV AX,VAR[SI]CMP AX,VAR[SI+2]JLE NOCHXCHG AX,VAR[SI+2]XCHG AX,VAR[SI]NOCH: ADD SI,2LOOP RECMPPOP CXRETPX ENDPCODE ENDSEND START五、运行结果按照实验要求,我们输入了“300,250,280,240,260,”。

微机原理字符及字符串输入输出与顺序程序设计实验

微机原理字符及字符串输入输出与顺序程序设计实验

2.2 字符及字符串输入输出与顺序程序设计实验2.2.1 实验目的1、学习和掌握字符及字符串的输入输出方法。

2、掌握顺序程序的设计方法。

3、进一步掌握调试工具的使用方法。

2.2.2 实验预习要求1、复习DOS功能调用中用于字符输入(功能号01H)、字符输出(功能号02H)、字符串输入(功能号为0AH)以及字符串输出(功能号09H)的调用方法(详见教材5.5.6)。

2、复习BCD码运算调整指令。

3、根据“2.2.3 实验内容”中给出的源程序框架编写完整的源程序,以便实验时调试。

4、从“2.2.4 实验习题”中任选一道题目,编写源程序,以便上机调试。

2.2.3实验内容从键盘输入两个一位十进制数,计算这两个数之和,并将结果在屏幕上显示出来。

1、问题分析比如使用功能号为01H的用于实现单个字符输入的DOS功能调用接收从键盘输入的两个十进制数8和6,这时计算机内部得到的是这两个数的ASCII码值38H和36H。

由于数字0 9的ASCII码值与其代表的数值之间相差30H,因此将其减去30H即可得到以非压缩型BCD数形式表示的十进制数08H和06H,使用ADD指令对它们进行相加后结果为0EH(00001110B),显然需要用非压缩型BCD数加法调整指令对ADD的运算结果进行调整,调整后得到两个非压缩型BCD数01H和04H,将它们分别加上30H后变为其对应的ASCII码31H(1的ASCII码)和34H(4的ASCII码),然后调用功能号为02H 用于单个字符输出的DOS功能调用将它们显示出来。

综上所述,需要考虑以下问题。

(1)从键盘输入一个一位十进制数的方法通过功能号为1的DOS功能调用实现从键盘输入一个字符,格式如下:MOV AH, 01HINT 21H ;此时程序等待用户键入,键入字符的ASCII码值存在AL中SUB AL, 30H ;减去30H后得到键入数字所代表的数值(2)提示信息字符串的显示通过功能号为9的DOS功能调用实现字符串显示,注意字符串的最后一个字符必需为’$’。

字符及字符串输入输出与顺序程序设计实验微机

字符及字符串输入输出与顺序程序设计实验微机
字源自及字符串输入输出与顺序程序设计实验
一、实验预习
实验序号 3 实验题目 字符及字符串输入输出与顺 序程序设计实验 预习日期 2014/5/10
要求:1.实验目的;2.实验设备;3.实验内容及步骤;4.思考与练习
实验目的:1、学习和掌握字符及字符串的输入、输出方法。 2、掌握顺序程序的设计方法。 3、进一步掌握调试工具的使用方法。 实验设备:微型计算机 一台 实验预习要求:1、复习DOS功能调用中用于字符输入(功能号01H) 、字符输出(功能号为02H) 、字符串输(功 能号为0AH)以及字符串输出(功能号为09H)的调用方法。 2、复习BCD码运算调整指令AAA。 3、根据“实验内容及步骤 2”中给出的源程序框架,编写完整的源程序,以便实验时调试。 4、从“实验习题”中任选一道题目,编写源程序,以便上机调试。 实验内容及步骤: 从键盘输入两个1位十进制数,计算这两个数之和,并将结果在屏幕上显示出来。 ①.从键盘输入一个1位十进制数的方法。 通过功能号为1的DOS功能调用实现从键盘输入一个字符,格式如下: MOV AH,01H INT 21H ;此时程序等待用户键入,键入字符的ASCII码值存在AL中。
②.提示信息字符串的显示。 通过功能号为9的DOS功能调用实现字符串的显示,注意字符串的最后一个字符必需为‘$’。指令格式如下: MOV DX,OFFSET INFOR1 MOV AH,09H INT 21H ;INFOR1为在数据段中定义的要显示的字符串名。
③.非压缩型BCD码加法调整指令的使用。 设从键盘输入的数值已存放在寄存器AL,BL中,可用下列程序完成数据相加和调整操作: XOR ADD AAA AH,AH AL,BL ;执行该指令后,AH中为和的十位数,AL中为和的个位数

微机原理实验报告——字符串排序

微机原理实验报告——字符串排序

一、实验名称:字符串排序二、实验目的:⑴学习利用系统功能调用的“INT 21H”进行字符的输入、字符串的显示方法,熟悉排序相关指令及方法。

⑵掌握汇编语言的编写、编译、连接及运行方法。

三、实验内容:①利用INT 21H的1号功能,从键盘输入任意长度的字符串,以回车符结束。

②将输入的字符串存放在数据段中。

③对输入的字符串按ASCⅡ码从小到大排序(ASCⅡ码小者占低地址存放)。

④将排好序的字符串利用INT 21H的9号功能显示在微机屏幕上。

四、程序流程图:定义堆栈段、数据段分配各段调用输入程序,输入并存储一个字符NO输入是否为回车键YES冒泡法对存储单元中的内容排序使用INT 21H的9号功能,将排好序的字符串输出返回DOS五、结论:程序运行时,从键盘上输入包含数字、大、小写字母的字符串,回车后,屏幕上显示字符ASCⅡ码从小到大排列的结果。

六、实验心得:通过实验,首先,我进一步理解学习了冒泡法排序的具体过程:冒泡法的外层循环次数等于其排序总数减一,每层内循环次数等于外循环总数减去已执行的次数。

第二,在编写程序时,如若程序太长,最好将一段反复使用的程序段编成子程序,在主程序中反复调用即可。

第三,在使用INT 21H的各种功能时,要注意将功能号值付给AH,并需正确使用入口、出口参数。

最后,堆栈段、数据段使用时要特别注意,堆栈段必须重新定义,程序中使用数据段时也要对数据段进行重新定义,否则程序将产生错误。

附:程序清单STACK SEGMENT STACKDB 100 DUP(?)STACK ENDSDA TA SEGMENTX DB 100 DUP(?)DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACKMAIN PROCMOV AX,DATAMOV DS,AXMOV SI,OFFSET XCALL INPUTSUB SI,2MOV BX,SINEXT3:MOV CX,BXMOV SI,OFFSET XNEXT2:MOV AL,[SI]CMP AL,[SI+1]JBE NEXT1XCHG AL,[SI+1]MOV [SI],ALNEXT1:INC SILOOP NEXT2DEC BXJNZ NEXT3MOV DX,OFFSET XMOV AH,9INT 21HMOV AH,4CHINT 21HMAIN ENDPINPUT PROCSTART:MOV AH,1INT 21HMOV [SI],ALINC SICMP AL,0DHJNZ STARTMOV BYTE PTR [SI-1],'$'RETINPUT ENDPCODE ENDSEND MAIN。

微机原理实验报告冒泡法对数据排序

微机原理实验报告冒泡法对数据排序

实验内容:用“冒泡“法对一组数300,250,280,240,260,按从小到大的顺序排列。

实验要求:1.编制程序,对这组数进行排序,并输出原数据及排序后数据;2.利用DEBUG调试工具,用D0命令,查看排序前后,内存数据的变化;3. 去掉最大和最小的两个值,求出其余值的平均值,并输出最大值,最小值和平均值;4. 用学过的压栈PUSH和出栈POP指令,将平均值按位逐个输出(即输出263);5.将平均值263转化为二进制串,并将这组二进制串输出。

6.所有数据输出前要用字符串的输出指令,进行输出提示(如:zui da zhi shi : 300等),所有数据结果能清晰地显示在屏幕上。

程序代码:DATA SEGMENT ;定义数据段DT1 DW 300,250,280,240,260DT2 DB 'what five data input is',0DH,0AH,'$'DT3 DB 'what after rank is',0DH,0AH,'$'DT4 DB 'The max is',0DH,0AH,'$'DT5 DB 'The min is',0DH,0AH,'$'DT6 DB 'The average is',0DH,0AH,'$'DT7 DB 'show you the average one by one',0DH,0AH,'$'DT8 DB 'show you the average in binary form',0DH,0AH,'$'DT9 DB 0DH,0AH,'$'DT0 DB 'B',0DH,0AH,'$'N EQU 5DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA ;说明代码段、数据段STAT: MOV AX,DATAMOV DS,AXLEA DX,DT2 ;输出字符串MOV AH,09HINT 21HCALL ZIXU ;调用数据输出过程对数据进行排序:MOV CX,N-1 ;设置N-1轮比较次数MOV DX,1 ;比较轮次技术JM4:PUSH CXMOV CX,NSUB CX,DXLEA SI,DT1JM3:MOV AX,[SI]CMP AX,[SI+2]JLE JM2XCHG AX,[SI+2]XCHG AX,[SI]JM2:ADD SI,2LOOP JM3POP CXINC DXLOOP JM4输出排序后的顺序:LEA DX,DT3MOV AH,09HINT 21HCALL ZIXU输出最大值:LEA DX,DT4MOV AH,09HINT 21HLEA SI,DT1+8 ;排序后最后一个数就是最大值MOV AX,[SI]CALL ZIXU1输出最小值:LEA DX,DT5MOV AH,09HINT 21HLEA SI,DT1 ;排序后第一个数就是最小值MOV AX,[SI]CALL ZIXU1输出平均值:LEA DX,DT6MOV AH,09HINT 21HLEA SI,DT1+2 ;去掉最大最小后的数求和MOV AX,[SI]ADD AX,[SI+2]ADD AX,[SI+4]MOV BX,3MOV DX,0DIV BX ;求其平均值MOV CX,AXCALL ZIXU1 ;调用输出程序输出把平均值分三位输出:LEA DX,DT7MOV AH,09HINT 21HMOV AX,CXMOV BX,100MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,AL ;输出平均值的第一位MOV AH,2INT 21HLEA DX,DT9 ;换行MOV AH,09HINT 21HPOP DXMOV AX,DXMOV BX,10MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,AL ;输出平均值的第二位MOV AH,2INT 21HLEA DX,DT9 ;换行MOV AH,09HINT 21HPOP DXADD DX,30HMOV AH,2 ;输出平均值的第三位I NT 21HLEA DX,DT9MOV AH,09HINT 21H;以二进制位输出平均值LEA DX,DT8MOV AH,09HINT 21HMOV BX,CXMOV CX,16JM5:MOV DX,0SAL BX,1RCL DX,1ADD DX,30HMOV AH,02HINT 21HDEC CXJNZ JM5LEA DX,DT0MOV AH,09HINT 21HMOV AH,4CH ;返回DOSINT 21H;数据序列的输出写成一个过程:ZIXU PROCMOV CX,5LEA SI,DT1JM1:MOV AX,[SI]MOV BX,100MOV DX,0DIV BX PUSH DX ADD AL,30H MOV DL,AL MOV AH,2 INT 21H POP DX MOV AX,DX MOV BX,10 MOV DX,0 DIV BX PUSH DX ADD AL,30H MOV DL,AL MOV AH,2 INT 21H POP DX ADD DX,30H MOV AH,2INT 21HLEA DX,DT9MOV AH,09HINT 21HADD SI,2LOOP JM1RETZIXU ENDP;当个数据输出过程:ZIXU1 PROC ;将数据的输出写成一个过程MOV BX,100MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,ALMOV AH,2INT 21HPOP DXMOV AX,DX MOV BX,10 MOV DX,0 DIV BX PUSH DX ADD AL,30H MOV DL,AL MOV AH,2 INT 21H POP DX ADD DX,30H MOV AH,2 INT 21H LEA DX,DT9 MOV AH,09H INT 21H RETZIXU1 ENDPCODE ENDSEND STAT调试中出现的一些问题:1.输入时不慎将字母O当数字0输入,结果导致了下面第5行提示的错误。

微机实验排序实验报告

微机实验排序实验报告

一、实验目的1. 熟悉排序算法的基本原理和实现方法;2. 掌握冒泡排序、选择排序、插入排序等常用排序算法;3. 通过实验,加深对排序算法的理解,提高编程能力。

二、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发环境:Visual Studio 2019三、实验内容1. 冒泡排序2. 选择排序3. 插入排序四、实验原理1. 冒泡排序:冒泡排序是一种简单的排序算法,它重复地遍历待排序的序列,比较相邻的元素,如果它们的顺序错误就把它们交换过来。

遍历序列的工作是重复地进行,直到没有再需要交换,也就是说该序列已经排序完成。

2. 选择排序:选择排序是一种简单直观的排序算法。

它的工作原理是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

以此类推,直到所有元素均排序完毕。

3. 插入排序:插入排序是一种简单直观的排序算法。

它的工作原理是:将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增加1的有序表。

对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

五、实验步骤1. 冒泡排序(1)定义一个函数,用于实现冒泡排序算法;(2)在主函数中,定义一个整数数组,并对其进行初始化;(3)调用冒泡排序函数,对数组进行排序;(4)打印排序后的数组。

2. 选择排序(1)定义一个函数,用于实现选择排序算法;(2)在主函数中,定义一个整数数组,并对其进行初始化;(3)调用选择排序函数,对数组进行排序;(4)打印排序后的数组。

3. 插入排序(1)定义一个函数,用于实现插入排序算法;(2)在主函数中,定义一个整数数组,并对其进行初始化;(3)调用插入排序函数,对数组进行排序;(4)打印排序后的数组。

六、实验结果与分析1. 冒泡排序实验结果:```原始数组:5 3 8 6 2排序后数组:2 3 5 6 8```分析:冒泡排序在最好情况下(已排序)的时间复杂度为O(n),在平均和最坏情况下(逆序)的时间复杂度为O(n^2)。

微机原理实验报告

微机原理实验报告

微机原理实验报告——冒泡法实现数据排序姓名:XXX学号:1043031467专业:电气工程及其自动化一、实验内容用“冒泡“法对一组数300,250,280,240,260,按从小到大的顺序排列。

提示:用冒泡的方法对一组数据元素排序,它的基本方法是:将相邻的两个元素通过比较进行排序,通过多次,多遍的邻元素排序,实现整个一组数的排序。

对于5(N)个元素,整个排序通过4遍(=N-1)邻元素排序完成。

每一遍的排序由若干次邻元素的排序组成。

4遍排序中,邻元素的排序依次为4,3,2,1遍。

完成第一遍排序后,最大数沉底,已经到达它应占据的位置,不需要参加下一遍的排序。

外循环的次数为CX=4次(N-1),内循环的次数为4,3,2,1(DEC CX)排序遍数本遍排序前第一次排序后第二次排序后第三次排序后第四次排序后1 300,250,280,240,260 250,300,280,240,260250,280,300,240,260250,280,240,300,260250,280,240,260,3002 250,280,240,260,300250,280,240,260,300250,240,280,260,300250,240,260,280,3003 250,240,260,280,300250,240,260,280,300240,250,260,280,3004 240,250,260,280,300240,250,260,280,300实验要求:1.编制程序,对这组数进行排序,并输出原数据及排序后数据;2.利用DEBUG调试工具,用D0命令,查看排序前后,内存数据的变化;3. 去掉最大和最小的两个值,求出其余值的平均值,并输出最大值,最小值和平均值;4. 用学过的压栈PUSH和出栈POP指令,将平均值按位逐个输出(即输出263);5将平均值263转化为二进制串,并将这组二进制串输出。

6.所有数据输出前要用字符串的输出指令,进行输出提示(如:zui da zhi shi : 300等),所有数据结果能清晰地显示在屏幕上。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

字符串排序实验报告
一,实验目的:
⑴学习利用系统功能调用的“INT 21H”进行字符的输入、字符串的显示方
法,熟悉排序相关指令及方法。

⑵掌握汇编语言的编写、编译、连接及运行方法。

二,实验内容:
(1)利用INT 21H的1号功能,从键盘输入任意长度的字符串,以回车符结束;
(2)将输入的字符串存放在数据段中。

(3)对输入的字符串按ASCⅡ码从小到大排序(ASCⅡ码小者占低地址存放)。

(4)将排好序的字符串利用INT 21H的9号功能显示在微机屏幕上。

三,实验流程图:
四,实验结果:
程序运行时,从键盘上输入包含数字、大、小写字母的字符串,回车后,屏幕上显示字符ASCⅡ码从小到大排列的结果。

五,实验总结:
通过实验,首先,我进一步理解学习了冒泡法排序的具体过程:冒泡法的外层循环次数等于其排序总数减一,每层内循环次数等于外循环总数减去已执行的次数。

第二,在编写程序时,如若程序太长,最好将一段反复使用的程序段编成子程序,在主程序中反复调用即可。

第三,在使用INT 21H 的各种功能时,要注意将功能号值付给AH,并需正确使用入口、出口参数。

最后,堆栈段、数据段使用时要特别注意,堆栈段必须重新定义,程序中使用数据段时也要对数据段进行重新定义,否则程序将产生错误。

六,实验程序:
初始程序:
STACK SEGMENT STACK
DB 100 DUP(0)
STACK ENDS
DATA SEGMENT
A D
B 0AH,0DH,'$'
STRING DB 100 DUP('$')
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE ,DS:DATA ,SS:STACK
MAIN PROC
MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET STRING
NEXT:MOV AH,1
INT 21H
MOV [SI],AL
INC SI
CMP AL,0DH
JNE NEXT
MOV BX,SI
SUB BX,2
NEXT3:MOV CX,BX
MOV SI,OFFSET STRING
NEXT2:MOV AL,[SI]
CMP AL,[SI+1]
JAE NEXT1
XCHG AL,[SI+1]
MOV [SI],AL
NEXT1:INC SI
LOOP NEXT2
DEC BX
JNZ NEXT3
MOV DX,OFFSET A
MOV AH,9
INT 21H
MOV DX,OFFSET STRING
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
MAIN ENDP
CODE ENDS
END MAIN
运行后为从大到小排序,导致在键盘输入空格后,空格位于序列最后,无法辨别。

更改后程序:
STACK SEGMENT STACK
DB 100 DUP(0)
STACK ENDS
DATA SEGMENT
A D
B 0AH,0DH,'$'
STRING DB 100 DUP('$')
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE ,DS:DATA ,SS:STACK MAIN PROC
MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET STRING
NEXT:MOV AH,1
INT 21H
MOV [SI],AL
INC SI
CMP AL,0DH
JNE NEXT
MOV BX,SI
SUB BX,2
NEXT3:MOV CX,BX
MOV SI,OFFSET STRING
NEXT2:MOV AL,[SI]
CMP AL,[SI+1]
JBE NEXT1
XCHG AL,[SI+1]
MOV [SI],AL
NEXT1:INC SI
LOOP NEXT2
DEC BX
JNZ NEXT3
MOV DX,OFFSET A
MOV AH,9
INT 21H
MOV DX,OFFSET STRING
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
MAIN ENDP
CODE ENDS
END MAIN
更改后为从小到大排序,空格显示在数列最前,可以清楚辨识。

相关文档
最新文档