计算机原理与汇编语言—实验报告1,2,3
计算机组成原理与汇编实验报告

计算机组成原理与汇编实验报告姓名:学号:学院:信息科学与工程学院班级:实验1 存储器实验实验目的⏹掌握静态存储随机存储器RAM的工作特性⏹掌握静态存储随机存储器RAM的读写方法实验设备74LS273(一片),静态存储器MEMORY 6116(一片),与门(一片),与非门(一片),单脉冲(一片),开关若干,灯泡若干实验原理在微机系统中,常用的静态RAM 有6116、6264、62256 等。
在本实验中使用的是6116。
6116 为2K╳8 位的静态RAM,其逻辑图3.1如下:图3.1 6116逻辑图其中A0~10 为11 根地址线,I/O0~7 为8 根数据线,CS 为片选端,OE 为数据输出选通端,WR 为写信号端。
其工作方式见下表3-1:表3-1工作方式表实验所用的半导体静态存储器电路原理如图3.2 所示,实验中的静态存储器一片6116(2K×8)构成,其数据线接至数据总线,地址线由地址锁存器(74LS273)给出。
地址灯AD0—AD7 与地址线相连,显示地址线内容。
数据开关经一三态门(74LS245)连至数据总线,分时给出地址和数据。
图3.2 存储器实验原理图因地址寄存器为8 位,接入6116 的地址A7—A0,而高三位A8—A10 接地,所以其实际容量为256 字节。
6116 有三个控制线:CE(片选线)、OE(读线)、WE(写线)。
当片选有效(CE=0)时,OE=0时进行读操作,WE=0时进行写操作。
本实验中将OE 常接地,在此情况下,当CE=0、WE=0 时进行读操作,CE=0、WE=1 时进行写操作,其写时间与T3 脉冲宽度一致。
控制信号SW-B 为低电平有效,控制信号LDAR 为高电平有效。
实验步骤1. 选择实验设备:根据实验原理图,将所需要的组件从组件列表中拖到实验设计流程栏中。
搭建实验流程:将已选择的组件进行连线(鼠标从一个引脚的端点拖动到另一组件的引脚端,即完成连线)。
微机原理与汇编语言实验报告

微机原理与汇编语言实验报告学号:********班级:*****姓名:*****指导教师:*****一.实验目的1.通过上机实验进一步熟悉并掌握汇编语言的指令系统和寻址方式;2.熟悉汇编语言程序上机的流程,以及与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)3.学习汇编程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法4.能够独自编写,调试,并成功运行一个完整的程序。
二.实验内容与步骤1.掌握汇编语言程序上机过程首先,新建文本文档后将扩展名改为.ASM,这是汇编语言源程序的文件格式,以记事本形式打开后在其中键入所编写的程序。
第一次题目是在屏幕上显示一串字符串,在老师的指导下,编写的程序如下:data segmentnote db 'hello','$'data endscode segmentmain proc farassume cs:code,ds:data,es:datastart:push dssub ax,axpush axmov ax,datamov ds,axmov es,axmov ah,09hlea dx,noteint 21hmain endpcode endsend start之后,要进行编译和运行。
源程序经过翻译程序成为机器能够识别的目标程序,目标程序再经过连接程序连接后转换成在机器上可执行的程序。
基本流程图如下:在编译的过程中,程序查出的主要是语法上的错误,如果有错,则不能通过汇编,要纠错后重新汇编直到无错为止。
最后,生成的.EXE文件即为可执行文件,从磁盘调入内存运行,得到运行结果。
上述程序的运行结果为在屏幕上显示出“hello”。
2.编程完成任意两个两位数的加法运算编程任务的基本要求为:从键盘输入任意两个两位数相加,将结果显示在屏幕上。
刚开始拿到题目后,头脑里是比较混乱的。
经过与同学的探讨之后,我们大概确定出要完成整个功能,需经过以下过程:将输入的ASCII码与十进制数值进行转换,并保存在寄存器中;通过调用程序将两个数相加,并将结果保存;将结果显示在屏幕上。
(最新版)汇编语言实验报告

汇编语言课程设计学院:专业:姓名:学号:汇编语言是计算机专业的一门重要的专业基础课,主要介绍汇编语言程序设计的基本原理和方法。
汇编语言是一门理论性和实践性较强的课程,辅助课堂教学的实验有助于帮助学生理解汇编语言的基本原理,锻炼学生的动手能力,提高学生的综合应用知识的能力。
目录1 利用DEBUG调试汇编语言程序段………………………………………2 初级程序的编写与调试实验(一).................................................................................3 初级程序的编写与调试实验(二)………………………………………...4 汇编语言程序上机过程 .......................................................................................................... 5分支程序实验……………………………………………………………6 循环程序实验……………………………………………………………..1 利用DEBUG调试汇编语言程序段一.课程目的1.熟悉DEBUG有关命令的使用方法;2.利用DEBUG掌握有关指令的功能;3.利用DEBUG运行简单的程序段。
二.课程内容1.进入和退出DEBUG程序;2.学会DEBUG中的1)D命令(显示内存数据D 段地址:偏移地址)例1:-D1002)E命令(修改指定内存)例1:-E100 41 42 43 44 48 47 46 45-D 100,L08结果:08F1:0100 41 42 43 44 48 47 46 45例2:-E 100:08F1:0100 76 42 :42是操作员键入此命令是将原100号内存内容76修改为42,用D命令可察看。
3)R命令(显示当前寄存器的内容)4)T命令(设置陷井,单步执行)5)A命令(将指令直接汇编成机器码输入到内存中。
汇编语言实验报告..【范本模板】

汇编语言课程设计学院:专业:姓名:学号:汇编语言是计算机专业的一门重要的专业基础课,主要介绍汇编语言程序设计的基本原理和方法.汇编语言是一门理论性和实践性较强的课程,辅助课堂教学的实验有助于帮助学生理解汇编语言的基本原理,锻炼学生的动手能力,提高学生的综合应用知识的能力。
目录1 利用DEBUG调试汇编语言程序段………………………………………2 初级程序的编写与调试实验(一) .................................................................................3 初级程序的编写与调试实验(二)………………………………………...4 汇编语言程序上机过程 .......................................................................................................... 5分支程序实验……………………………………………………………6 循环程序实验…………………………………………………………….。
1 利用DEBUG调试汇编语言程序段一.课程目的1.熟悉DEBUG有关命令的使用方法;2.利用DEBUG掌握有关指令的功能;3.利用DEBUG运行简单的程序段.二.课程内容1.进入和退出DEBUG程序;2.学会DEBUG中的1)D命令(显示内存数据D 段地址:偏移地址)例1:-D1002)E命令(修改指定内存)例1:—E100 41 42 43 44 48 47 46 45-D 100,L08结果:08F1:0100 41 42 43 44 48 47 46 45例2:—E 100:08F1:0100 76 42 :42是操作员键入此命令是将原100号内存内容76修改为42,用D命令可察看。
3)R命令(显示当前寄存器的内容)4)T命令(设置陷井,单步执行)5)A命令(将指令直接汇编成机器码输入到内存中。
汇编语言实验报告

合肥工业大学计算机与信息学院实验报告课程:汇编语言程序设计专业班级:学号:姓名:实验一Debug程序的使用一.实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。
2、掌握8086/8088的寻址方式及多字节数据的处理方法。
二.实验内容1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。
2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H 单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。
要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。
三.实验过程和程序1.e ds:0200 78 56 34 12e ds:0204 98 BA DC FE2.直接寻址:mov ax,[0200]mov bx,[0202]add ax,[0204]adc bx,[0206]mov [0208 ],axmov [020a],bx间接寻址:mov si,[0200]mov di,[0204]mov bx,[0208]mov ax,[si]mov dx,[si+2]add ax,[di]adc dx,[di+2]mov [bx],axmov [bx+2],dx附加题1e ds:0000 1c 02e ds:0002 01 00e ds:0004 FF FFe ds:0006 38 04e ds:0008 00 00Microsoft Windows [???? 6.1.7600]???????? (c) 2009 Microsoft Corporation????????????????C:\Users\Administrator>debug-e ds:0000 1c 02-e ds:0002 01 00-e ds:0004 FF FF-e ds:0006 38 04-e ds:0008 00 00-a13B3:0100 mov ax,[0000]13B3:0103 mov bx,[0002]13B3:0107 imul bx13B3:0109 mov cx,ax13B3:010B mov bx,dx13B3:010D mov ax,[0004]13B3:0110 cwd13B3:0111 add cx,ax13B3:0113 adc bx,dx13B3:0115 sub cx,21c13B3:0119 sbb bx,013B3:011C mov ax,[0006]13B3:011F cwd13B3:0120 sub ax,cx13B3:0122 sbb dx,bx13B3:0124 mov bx,[0000]13B3:0128 idiv bx13B3:012A mov [0008],ax13B3:012D-g =0100 012dAX=0002 BX=021C CX=FFFF DX=0001 SP=FFEE BP=0000 SI=0000 DI=0000DS=13B3 ES=13B3 SS=13B3 CS=13B3 IP=012D NV UP EI PL ZR AC PE CY13B3:012D 0000ADD [BX+SI],AL DS:021C=00-四.实验结果1.利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。
计算机组成原理实验1-汇编语言实验

微处理器与接口技术实验指导实验一监控程序与汇编语言程序设计实验一、实验要求1、实验之前认真预习,明确实验的目的和具体实验内容,设计好主要的待实验的程序,做好实验之前的必要准备。
2、想好实验的操作步骤,明确通过实验到底可以学习哪些知识,想一想怎么样有意识地提高教学实验的真正效果。
3、在教学实验过程中,要爱护教学实验设备,认真记录和仔细分析遇到的现象与问题,找出解决问题的办法,有意识地提高自己创新思维能力。
4、实验之后认真写出实验报告,重点在于预习时准备的内容,实验数据,实验过程、遇到的现象和解决问题的办法,自己的收获体会,对改进教学实验安排的建议等。
善于总结和发现问题,写好实验报告是培养实际工作能力非常重要的一个环节,应给以足够的重视。
二、实验目的【1】学习和了解TEC-XP16教学实验系统监控命令的用法;【2】学习和了解TEC-XP16教学实验系统的指令系统;【3】学习简单的TEC-XP16教学实验系统汇编程序设计。
三、实验注意事项(一)实验箱检查【1】连接电源线和通讯线前TEC-XP16实验系统的电源开关一定要处于断开状态,否则可能会对TEC-XP16实验系统上的芯片和PC机的串口造成损害。
【2】五位控制开关的功能示意图如下:【3】几种常用的工作方式【开关拨到上方表示为1,拨到下方为0】(二)软件操作注意事项【1】用户在选择串口时,选定的是PC机的串口1或串口2,而不是TEC-XP16实验系统上的串口。
即选定的是用户实验时通讯线接的PC机的端口;【2】如果在运行到第五步时没有出现应该出现的界面,用户需要检查是不是打开了两个软件界面,若是,关掉其中一个再试;【3】有时若TEC-XP16实验系统不通讯,也可以重新启动软件或是重新启动PC再试;【4】在打开该应用软件时,其它的同样会用到该串口的应用软件要先关掉。
(三)联机通讯失败自检如果上述的硬件和软件的操作都正确,联机却依旧失败,可以进行如下测试:【1】测试PC机的串口是否能正常工作,或是换一台PC或换同一台PC的另一个串口再试,在换串口时要将TEC-XP16实验系统断电,换完后重新启动实验系统和软件;【2】检查机器上的元器件插接是否正确(建议用户对照能够正常通讯的实验系统进行详细检查),有没有被学生动过,尤其是扩展内存和扩展I/O接口时,芯片方向是否插对,片选信号有没有连接;【3】检查相应的短路子是否连接正确;【4】建议教师预留一台运行正常的TEC-XP16实验系统备用,机器出问题后可以对照检查。
计算机组成原理与汇编实验报告.

计算机组成原理与汇编实验报告.计算机组成原理与汇编课程设计实验报告⽬录⼀、课程设计⽬标 (3)⼆、课程设计基本要求 (3)三、课程设计的内容 (3)四、课程设计的要求 (5)五、实验详细设计 (5)1.统计⽂件中各字母出现的频率 (5)2.⽤递归计算50以内Fibonacci 数, 以⼗进制数输出 (9)3.虚拟平台模拟机实验 (11)六、使⽤说明 (19)七、总结与⼼得体会 (19)⼋、参考⽂献 (20)九、附录 (20)1.字符统计.asm (20)2.斐波那契数(⼩于50).asm (29)⼀、课程设计⽬标通过课程设计使学⽣综合运⽤所学过的计算机原理与汇编知识,增强解决实际问题的能⼒,加深对所学知识的理解与掌握,提⾼软硬件开发⽔平,为今后打下基础。
课程设计的⽬的和要求:1、使学⽣巩固和加强《计算机原理与汇编语⾔》课程的基本理论知识。
2、使学⽣掌握汇编语⾔程序设计的⽅法及编程技巧,正确编写程序。
3、使学⽣养成良好的编程习惯并掌握调试程序的基本⽅法。
4、使学⽣养成规范书写报告⽂档的能⼒,撰写课程设计总结报告。
5、通过查阅⼿册和⽂献资料,培养学⽣独⽴分析问题和解决问题的能⼒。
⼆、课程设计的基本要求1、认真查阅资料,独⽴完成设计任务,每道题都必须上机通过。
2、编写预习报告,写好代码,上机调试。
3、独⽴思考,培养综合分析问题解决问题和调试程序的能⼒。
4、按时完成课程设计,写出课程设计报告。
三、课程设计的内容1、给定⼀个英⽂ASCII码⽂件,统计⽂件中英⽂字母的频率,以⼗进制形式输出。
2、⽤递归计算50以内Fibonacci 数, 以⼗进制数输出.3、虚拟平台的模型机实验,具体要求如下:1)选择实验设备,将所需要的组件从组件列表中拖到实验设计流程栏中2)搭建实验流程:根据原理图1和电路图(见附件),将已选择的组件进⾏连线。
3)输⼊机器指令:选择菜单中的“⼯具”,再选择“模型机调试”,在指令输⼊窗⼝中输⼊如下指令:00000000000100000000100100100000000010110011000000001011010000000000000000000001本实验设计机器指令程序如下:4)这⾥做的是个加法运算,第⼀个加数已经存⼊到内存的0000 1010单元中,第⼆个加数是需要⼿⼯输⼊的。
计算机组成原理和汇编语言实验报告

计算机组成原理和汇编语言实验报告专业班级:计算机0801班实验一、汇编:冒泡排序1、实验内容:定义一个字数组序列:1567,25,46,4560,678,1234,32540。
用冒泡排序对该数组由小到大排序,并将排序结果以十进制数字的形式在屏幕上显示出来。
2、实验原理:程序首先定义了要排序的数组,然后对其在原数组内进行冒泡排序。
冒泡排序是基于交换排序的一种算法,它依次两两比较待排序的元素,若为逆序则进行交换。
每趟冒泡都将待排元素序列中的最大量交换到最后位置。
冒泡过程共需进行n(n-1)/2次比较,直到全部元素有序为止。
数组有序以后,进行输出的工作。
依次从小到大,将元素转换为十进制数的ASCII码值来输出,并在输出每个数时,增加输出回车换行来使输出结果清晰。
3、实验代码:;-------------------------PROGRAM BEGINS---------------------------;----------------------------DEFINE DS-------------------------------DATA SEGMENTTIME DW 0 ;THE LOOP TIME OF THE OUTER LOOPCHU DW 10 ;USED TO CONVERT THE NUM TO DECIMAL DTY DW 1567,25,46,4560,678,1234,32540 ,'$' ;DEFINE THE ARRARYRESULT DB ?DATA ENDS;-----------------------------DEFINE CS-----------------------------CODE SEGMENT "CODE"ASSUME CS:CODE ,DS:DATASTART:MOV AX,DATAMOV DS,AXAGAIN:MOV CX, 6 ;THE LOOP NUM OF THE INER LOOP MOV BP,12 ;NUM OF THE BYTESAGAIN1:MOV AX,DTY[BP]CMP DTY[BP-2],AX ;CMP WITH THE FORMER BYTEJBE NEXT ;JMP IF BELOW OR EQUALXCHG AX,DTY[BP-2] ;IF ABOVE,THEN CHANGEXCHG AX,DTY[BP]NEXT:SUB BP,2 ;POINT TO THE FORMER ONEDEC CXCMP CX,TIME ;IS IT DONE?JE NEXT1 ;DONEJMP AGAIN1 ;NOT DONE YETNEXT1:INC TIMECMP TIME,6 ;IS IT DONE?JE NEXT3 ;DONEJMP AGAIN ;NOT DONE YETNEXT3:MOV TIME,0 ;RENEW THE DATAMOV BP,0CHANGE:MOV RESULT[5],13 ;FINISH OF THE NUMMOV RESULT[6],10MOV RESULT[7],'$'MOV AX,WORD PTR DTY[BP] ;THE DW TO OUTPUTMOV CX,5 ;LOOP NUMMOV BX,4 ;TWO BITS * 4 =WORD CHANGE1:MOV DX,0DIV CHU ;DX:AX/CHUMOV RESULT[BX],DL ;THE REMAINDERADD RESULT[BX],30H ;TO DECIMALDEC BX ;POINT TO THE FORMER TWO BITS LOOP CHANGE1MOV CX,4MOV BX,0FIND0:CMP RESULT[BX], '0' ;IS IT ZERO?JNE FINAL ;NOT ZEROADD BX,1 ;ZEROLOOP FIND0FINAL:LEA DX, RESULT[BX] ;OUTPUTMOV AH,09HINT 21HADD BP, 2 ;POINT TO NEXT WORDINC TIMECMP TIME,7 ;IS IT DONE?JNE CHANGE ;NOT NONEMOV AH,4CHINT 21HCODE ENDSEND START;--------------------PROGRAM ENDS--------------------实验二算术逻辑运算实验一、实验目的1.掌握简单运算器的组成以及数据传送通路。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验1:循环接收用户按键输入,将用户输入的大字母原样输出,将用户输入的小写字母转换为小写字母再输出,用户若输入数字0则退出程序,其它情况输出“error!”实验程序代码str db 'error!$'data endsstack segment para stack 'stack'db 100 dup(?)stack endscode segmentassume ds:data,cs:code,ss:stackstart:mov ax,datamov ds,axagain:mov ah,01hint 21hcmp al,'0'je nextcmp al,'A'jb error ;小于A的出错cmp al,'Z'jbe print1 ;在A,Z之间的输出print1cmp al,'a'jb error ;在Z(41hH)和a(61H)之间的出错cmp al,'z'jbe print2 ;在a,z之间的输出print2jmp errorprint1: mov dl,almov ah,02hint 21hjmp again ;循环输入,againprint2:mov dl,alsub dl,20hmov ah,02hint 21hjmp again ;循环输入,againerror :mov dx,offset strmov ah,09hint 21hnext:mov ah,4chint 21hcode endsend start实验截图实验总结实践。
第一次真实的体会到汇编语言的特点,以及和C++语言的区别。
实验2:从键盘接收用户输入的一个正整数(0-32767之间),输出该数字的所有因子。
实验程序代码输入字符(0-9),判断合法性,减去30H,存入到数组string[]中将数组string[]里的数字,整合转换为正整数,存入变量num中求出num的因子,存入string[]中转换string[]中数据,加30H,输出ASCIIdata segmentstr db 'input data 0-32767:$'num dw 0string db 5 dup(0)data endsstack segment para stack 'stack'db 1000 dup(?)stack endscode segmentassume ds:data,cs:codestart:mov ax,datamov ds,axmov dx,offset strmov ah,09hint 21h ;显示标题mov si,0mov di,0rein:mov ah,01hint 21hcmp al,20hjz inte ;输入空格表示输入结束cmp al,30hjb exit ;不在0-9之间的退出cmp al,39hja exitsub al,30h ;不在0-9之间的退出mov string[si],alinc sicmp si,6jz exit ;输入位数超过5位的退出jmp rein;*******************以下整和整数dec si ;到达这一步时,si比输入的位数大1,所以要减1 inte:mov bx,nummov ax,10mul bxadd al,string[di]adc ah,00hmov num,axinc dicmp di,sijb inte ;得出的整数放置于变量num中;********************以下求因子,输出mov bx,0again:mov ax,nummov dx,0inc bxcmp bx,numja exitdiv bxcmp dx,0je tcalljmp againtcall:call tprintjmp againtprint proc near ;print子程序打印输出bxmov cx,10mov si,4mov ax,bxboa1:cmp ax,10jb boa2xor dx,dxdiv cxor dl,30hmov string[si],dldec sijmp boa1boa2:or al,30hmov string[si],alg:mov dl,string[si] ;打出输出ASCIImov ah,2int 21hinc sicmp si,5jne gmov dl,20hmov ah,2int 21h ;空格隔开每个因子rettprint endpexit: mov ah,4chint 21hcode endsend start实验截图注释1:以上为编译连接运行的结果,其中,输入的,12,120,1310,6789,12345,8等均能给出因子。
注释2:下图为,特殊的输入情况下,程序退出1,输入的字符不是0—9之间的字符,退出2,输入的位数超过范围(0—32767),退出输入字符‘r’,‘-’等退出程序输入的整数222222超过范围,自动退出程序实验总结本次实验花费了较长时间,其中在修改调试程序上花费时间占绝大部分。
在实验代码的一步步完善过程中,经历了一下步骤:1,程序编译出错这里的问题出现在语法错误上,不过这些错误很少,容易修改;不过有一个错误是提示:no end of file,造成的原因是由于我定义调用宏,编译时出现的一个不会修改的错误。
之后我去掉宏,然后把宏内的代码直接复制到相应的位置,之后再次编译,没有错误。
2,编译连接都没有错误,但在运行时出错修改运行,出现无限循环输出乱码情况,再次,修改后,出现一个更严重的情况,只要我一运行yinzi.exe程序,电脑就发出do的报警声,再次修改,……….,再后面,程序可以运行,并且可以输出一些正常的结果3,在根据输入的ASCII字符转换成整数时,如下代码inte:dec simov bx,nummov ax,10 此行代码错误mul bxadd al,string[di]adc ah,00hmov num,axinc dicmp di,sijb inte程序运行结果是:1,能正确求出两位数的因子,如12,为1,2,3,4,6,12等2,输入三位数120,结果是12的因子1,2,3,4,6,12输入四位数1230,结果是12的因子1,2,3,4,6,12输入五位数12100,结果是121的因子1,11,121……只需将上面inte:这个移到下一行即可解决问题;虽然,实验花了很长时间修改,克服种种错误终于能够输出正确结果,但我觉得不但的找出错误并修正错误这个过程更能锻炼人,学到的东西更多。
不过,我们在写程序时,一定要细心谨慎,因为如果写的时候不仔细,回头再次调试修改的话就得花更多的时间,不值得,这是我的一点心得体会。
实验3:从键盘接收用户输入的一个正整数(0-32767之间),输出该数字的所有因子。
1、 函数input:接收用户一个正整数,将数据保存到AX2、函数outpot:将AX中的数据在屏幕上显示出来3、函数sort:将BX所指向的一批数据进行排序,数据个数在AX中从键盘接收用户一批数据输入,对该批数据从小到大排序,将原数据和排序后的数据在屏幕上显示出来。
实验程序代码n dw 0000hdata dw 100 dup(?)num dw 0buffer db 5 dup(?) ;输入ASCII转换成整数的缓冲区string0 db 'how many datas: $'string1 db 'input data: $'string2 db 'order: $'data1 endsstack segment para stack 'stack'db 100 dup(?)stack endscode segmentassume ds:data1,cs:codestart:mov ax,data1mov ds,axmov dx,offset string0mov ah,9int 21h ;提示输入多少数据call inputmov n,ax ;数据个数存入到变量n中mov dl,0ahmov ah,2int 21h ;换行mov cx,nmov di,0datain:call inputmov data[di],axadd di,2loop datain ;循环输入几个数据打印出,并存入到data[]中 mov dl,0ahmov ah,2int 21h ;换行mov dx,offset string1mov ah,9int 21h ;提示输出排序前的mov si,0mov cx,nagain1:mov ax,data[si]call outputadd si,2loop again1mov dl,0ahmov ah,2int 21h ;换行mov dx,offset string2mov ah,9int 21h ;提示输出排序后的mov cx,ncall sort ;对data[]排序mov si,0mov cx,nagain2:mov ax,data[si]call outputadd si,2loop again2jmp nextinput proc near ;*****接收输入的整数存入AX中,参数buffer[],num********push dipush bxmov si,0mov di,0rein:mov ah,01hint 21hcmp al,20hje inte ;空格表示输入结束sub al,30hmov buffer[si],alinc sicmp si,5jb reindec siinte:mov bx,nummov ax,10mul bxadd al,buffer[di]adc ah,00hmov num,axmov buffer[di],00h ;清零inc dicmp di,sijb intemov ax,num ;将整理好的整数放到AX中mov num,0000h;用完num清0pop bxpop diretinput endp ;***** 用到的寄存器ax,si,di,bx****************output proc near ;*****打印出AX中的数据,传入参数AX即可******** push cxpush sipush dxmov cx,10mov si,4boa1:cmp ax,10jb boa2xor dx,dxdiv cxor dl,30hmov buffer[si],dldec sijmp boa1boa2:or al,30hmov buffer[si],alg:mov dl,buffer[si] ;打出输出ASCIImov ah,2int 21hmov buffer[si],0 ;打印完后清零,避免重叠inc sicmp si,4jbe gmov dl,20hmov ah,2int 21h ;空格隔开pop dxpop sipop cxretoutput endp ;***** 用到的寄存器ax,cx,si,dx**************sort proc near ;********* 字序列的冒泡排序子程序,参数data[],cx(元素个数) *********dec cx ;比较遍数loop1:mov di, cx ;比较次数mov bx, 0loop2:mov ax, data[bx] ;相邻两数cmp ax, data[bx+2] ;比较jbe continuexchg ax, data[bx+2] ;交换位置mov data[bx], axcontinue:add bx, 2loop loop2mov cx, diloop loop1retsort endp ; ************用到的寄存器ax,bx,di ************* next:mov ah,4chint 21hcode endsend start实验截图不断积累错误中产生的;由于我盲目的复制第二个实验里自己写的代码到第三个实验中,导致一系列错误,步步为营查找很就才查找到几个严重的错误:1,错误运行结果截图,‘*’测试用的2,不排序输出,也是这样,如错误原因:1,存入data[si]时,si是以inc si递增的;2,读取data[si]时,也是以1递增的由于data[]定义是dw,每个数据占两个字节,故导致以上错误;修改两处,用loop循环修改后:进一步完善即记得上图中的正确结果:。