实验报告模板—汇编语言
汇编实验报告七
计算机组成与汇编语言实验报告
通过结果说明程序运行结果正确。
2.调试程序2的运行结果如下。
说明程序实现的功能是查找0第一次出现的位置。
通过结果说明程序运行结果正确。
1.编写程序1运行结果如下。
4.编写程序2运行结果如下。
5.编写程序3运行结果如下。
实验情况与体会:通过本次上机实验,学习了数值转换。
实验过程中,遇到很多问题,比如程序一的编写,基本上都是学习书本以及依靠书本多做题才编出来的,仅有的几次上机实验,要抓紧时间学习和交流,时间挺少的。
在今后的学习和生活中,我们都需要相互学习、相互交流,共同进步。
学习是一个循序渐进的过程。
通过这次实验,使我了解到运行调试程序的不易,今后一定更加努力,把程序做到最好!对于不足之处,会积极改正。
汇编语言实验7实验报告
汇编语言实验7实验报告一、实验目的本次实验旨在通过汇编语言编写程序,实现对字符串的操作和输出。
二、实验内容1. 编写一个汇编程序,要求从键盘输入一个字符串,并将其逆序输出到屏幕上;2. 编写一个汇编程序,要求从键盘输入两个字符串,并将它们拼接起来后输出到屏幕上。
三、实验过程1. 字符串逆序输出程序首先,需要从键盘输入一个字符串。
为了方便起见,我们可以先规定字符串的最大长度为100。
接着,我们需要定义两个变量:```buffer db 100 ; 用于存储输入的字符串length dw ? ; 存储输入的字符串长度```其中,db代表定义字节型变量,dw代表定义双字节型变量。
然后,我们需要使用INT 21H中断来读取用户输入的字符串。
具体而言,我们可以使用下面这段代码:```mov ah, 0Ah ; 设置INT 21H功能号为0Ahmov dx, offset buffer ; 将buffer的地址传给DX寄存器int 21h ; 调用INT 21H中断```该代码会将用户输入的字符串存储在buffer中,并且将其长度存储在length变量中。
接着,我们需要将该字符串逆序输出到屏幕上。
为了实现这个功能,我们可以使用栈来存储字符串中的每个字符,并逐个弹出来输出。
具体而言,我们可以使用下面这段代码:```mov si, offset buffer + 1 ; 将si寄存器指向字符串的第一个字符mov cx, length ; 将cx寄存器设置为字符串长度dec cx ; 字符串长度需要减1reverse:push byte ptr [si] ; 将当前字符压入栈中inc si ; 指向下一个字符loop reverse ; 循环直到所有字符都被压入栈中mov ah, 02h ; 设置INT 21H功能号为02h,表示输出一个字符print:pop dx ; 弹出栈顶元素int 21h ; 输出该字符loop print ; 循环直到所有字符都被弹出并输出完毕```2. 字符串拼接程序首先,需要从键盘输入两个字符串。
《汇编语言》实验报告
《汇编语言》实验报告实验名称:汇编语言实验报告实验目的:通过实验了解汇编语言的基本概念、语法结构和程序设计方法,掌握汇编语言的编写方法。
实验时间:2024年1月1日实验地点:实验室一、实验背景汇编语言是计算机硬件和软件之间的桥梁,通过汇编语言可以直接操作计算机的底层硬件。
汇编语言是一种低级语言,使用汇编语言可以实现对计算机内存、寄存器等硬件资源的直接操作,从而实现程序的功能。
本实验通过编写汇编语言程序,加深对汇编语言的理解。
二、实验过程1. 确定实验环境:使用DOSBox模拟DOS环境进行汇编程序编写和调试。
2. 编写第一个汇编程序:编写一个简单的汇编程序,将字符串“Hello, World!”输出到屏幕上。
3.程序分析:a.定义要输出的字符串,将字符串存储在数据段中。
b.设置段寄存器,将数据段地址加载到DS寄存器中。
c.设置显示模式和光标位置。
d.将字符串逐个字符输出到屏幕上。
e.关闭显示模式。
4. 编译运行:使用汇编语言的编译器将汇编程序转换成机器码,并在DOSBox中运行程序。
5.调试程序:根据程序运行结果和分析,调试程序中存在的错误,并进行改正。
三、实验结果与分析经过多次编写和调试,我们成功实现了将字符串“Hello, World!”输出到屏幕上的功能。
通过程序分析和调试过程,加深了对汇编语言的理解和掌握。
四、实验总结通过本次实验,我们深入了解了汇编语言的基本概念、语法结构和程序设计方法。
通过实际编写汇编语言程序,对汇编语言的编写方法有了更加深入的认识。
同时,通过调试程序的过程,我们也提高了自身的问题解决能力和分析能力。
在今后的学习和工作中,我们将继续学习和深入研究汇编语言,提高自己的编程能力和创新思维能力。
总体而言,本次实验给我们带来了很大的收获,我们以后将更加努力地学习汇编语言,提高自己的编程水平,为以后的学习和工作做好充分的准备。
汇编语言实验十实验报告
汇编语言实验十实验报告一、实验目的本次实验的主要目的是通过学习汇编语言中的输入输出指令和字符串操作指令,掌握如何在汇编语言中进行简单的输入输出和字符串操作。
二、实验内容本次实验主要包括以下内容:1. 输入输出指令:学习如何使用INT 21h中断来进行简单的键盘输入和屏幕输出操作。
2. 字符串操作指令:学习如何使用MOV、LEA、LDS等指令来进行字符串的存储、传递和比较等操作。
3. 实现一个简单程序:通过上述知识点,完成一个简单的程序,可以进行键盘输入和屏幕输出,并对两个字符串进行比较。
三、实验过程1. 输入输出指令在汇编语言中,我们可以使用INT 21h中断来进行键盘输入和屏幕输出操作。
其中,AH寄存器用于指定不同的功能号码。
例如:- AH=01h:在屏幕上显示一个字符- AH=02h:在屏幕上显示一个ASCII码值所代表的字符- AH=06h:从键盘读取一个字符下面是一个示例程序,可以让用户从键盘上输入一个字符,并将其显示在屏幕上:```mov ah, 06h ; 将06h存入AH寄存器int 21h ; 调用中断21hmov dl, al ; 将读取的字符存入dl寄存器mov ah, 02h ; 将02h存入AH寄存器int 21h ; 调用中断21h,显示字符```2. 字符串操作指令在汇编语言中,我们可以使用MOV、LEA、LDS等指令来进行字符串的存储、传递和比较等操作。
例如:- MOV:可以将一个字符串从一个内存地址复制到另一个内存地址- LEA:可以将一个字符串的地址加载到寄存器中- LDS:可以将一个段地址和偏移地址加载到DS和SI寄存器中下面是一个示例程序,可以将一个字符串从一个内存地址复制到另一个内存地址,并比较两个字符串是否相等:```mov si, offset str1 ; 将str1的偏移地址加载到SI寄存器中lea di, str2 ; 将str2的地址加载到DI寄存器中mov cx, length ; 将字符串长度加载到CX寄存器中copy_loop:lodsb ; 从SI指向的内存单元读取一字节数据,并自动将SI加1 stosb ; 将AL所包含的数据写入DI指向的内存单元,并自动将DI 加1loop copy_loop ; 循环执行,直至CX为0cmp str1, str2 ; 比较str1和str2是否相等je equal ; 如果相等,跳转到equal标签not_equal:; 如果不相等,执行一些操作jmp endequal:; 如果相等,执行一些操作end:```三、实验结果通过本次实验,我学会了如何在汇编语言中进行简单的输入输出和字符串操作。
汇编语言实验报告_6
青岛理工大学课程实验报告
课程名称汇编语言程序设计班级实验日期
2013.11.3
姓名学号实验成绩
实验
名称
子程序
实验目的及要求1.掌握子程序设计相关指令和伪指令的使用方法
2.掌握子程序设计方法, 特别是参数传递方法
3.掌握主程序和子程序之间的调用关系和调用方法
4.熟悉循环和子程序结合应用解答问题的思路
实验环境1.命令行方式
2.MASM.EXE LINK.EXE DEBUG.EXE
实验内容1.设DATA1开始的内存单元中, 存放着一串带符号字数据, 要求采用冒泡排序算法(Bubble Sort)按照从小到大的顺序排序并将排好序的数据存在DATA1开始的单元。
然后在显示器输出排好序的数据, 中间用’,’隔开。
2.输出数据使用子程序方式。
算法描述及实验步骤步骤:
(1)设置数据段地址
(2)设置堆栈段地址
(3)设置堆栈指针
(4)调用9号功能, 输出一个提示性字符串。
(5)循环进入子程序, 输出原始数据。
(6)在子程序内循环输出每一位的十进制数字。
(7)主程序进行内外循环, 进行冒泡排序。
(8)再一次调用子程序输出排序后的结果。
调试过程及实验结果调试过程:
(2)(1)在输出时, 调用DOS 9号功能, 并不是只要语句MOV AH,09H
(3)它是存在入口条件的, 入口条件:DS:DX=输出字符缓冲区首地址。
所以前面必须加上MOV DX,OFFSET NOTE1。
(4)汇编语言是不会再输出汉字的。
(5)子程序结束时一定要有RET
(6)冒泡排序也遇到一些困难。
调试结果:。
汇编语言实验报告模板
《汇编语言》实验报告班级网131学号139074272姓名王祥兵指导教师刘恒实验一汇编语言运行环境及方法、简单程序设计一、实验目的:1、熟悉汇编语言运行环境和方法2、了解如何使用汇编语言的编制程序。
3、熟悉DEBUG有关命令的使用方法。
4、利用DEBUG掌握有关指令的功能。
5、利用DEBUG运行简单的程序段。
二、实验内容:编写一程序:比较两个字符串string1和string2所含的字符是否相同。
若相同则显示‘match’,否则‘No match’。
三、实验步骤:1.在dos提示符下,进入MASM目录2.在MASM目录下启动EDIT编辑程序,输入源程序,并对其进行汇编,链接和运行3.记录每一步的命令,以及查看结果的方法四、程序代码:五、实验总结及教训1.代码运行结果:2.debug调试结果:熟悉了汇编环境的使用,学会了用debug来调试程序实验二:用DEBUG编程:使用堆栈段将AX和BX的内容进行交换一、实验目的:1、熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
2、掌握数据在内存中的存放方式和内存操作数的几种寻址方式。
3、掌握简单指令的执行过程。
二、实验内容:1、设堆栈指针SP=2000H,AX=3000H,BX=5000H;请编一程序段将AX和BX的内容进行交换。
请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试。
2、设DS=当前段地址,BX=0300H,SI=0002H;请用DEBUG 的命令将存储器偏移地址300H~304H连续单元顺序装入0AH,0BH,0CH,0DH,0EH。
在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完毕时,AX 中的内容是什么。
程序清单如下:MOV AX,BXMOV AX,0304HMOV AX,[0304H]MOV AX,[BX]MOV AX,0001[BX]MOV AX,[BX][SI]MOV AX,0001[BX][SI]HLT三、实验要求:1、实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等。
汇编语言实验报告
汇编语言实验报告
1. 实验简介
本次实验是针对汇编语言的学习和实践,在实验中,我们将学习如何使用汇编语言编写程序、调试程序,并通过一系列实例来练习和巩固所学知识。
2. 实验目的
(这一部分可以根据实际情况来写,列举实验的具体目的和要求)
3. 实验环境及工具
(介绍实验所使用的软件环境和工具,如:编译器、调试器)
4. 实验步骤
(根据实验内容具体描述实验步骤,可以分为多个小节)
4.1 准备工作
在开始实验之前,需要进行一些准备工作,包括安装编译器、创建工作环境等。
4.2 实验一:简单的汇编程序
本实验通过编写一个简单的汇编程序来熟悉汇编语言的基本语法和指令集,包括数据传送、算术运算、逻辑运算等。
4.3 实验二:汇编程序的调试
在实验二中,我们将学习如何使用调试器对汇编程序进行调试,包括设置断点、查看变量值、单步执行等操作。
4.4 实验三:汇编程序的优化
本实验将通过优化代码来提高程序的执行效率,包括减少指令的使用、优化循环结构等。
5. 实验结果与分析
(对实验的结果进行总结和分析,可以包括程序的输出结果、性能分析等)
6. 实验总结
(针对本次实验的收获和心得体会进行总结,可以包括对汇编语言的理解、解决问题的思路等)
7. 实验感想
(对本次实验的感想和建议,如实验过程中遇到的困难、改进的方向等)
8. 参考文献
(列出本报告中所引用的参考文献)
注:该文章只是按照题目提示给出了一个大致的框架和构思,实际根据具体的实验内容和要求来编写每个小节的详细内容。
希望对你有所帮助!。
汇编实验报告(适合初学者)
汇编实验报告(适合初学者)汇编语言程序设计一、实验目的与要求1.熟悉汇编语言运行、调试环境及方法。
2.掌握简单汇编语言程序的设计方法。
3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。
二、实验内容根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。
1.若X、Y、R、W是存放8位带符号数字节单元的地址,Z是16位字单元的地址。
试编写汇编程序,完成Z<-((W-X)/5-Y)某(R+2)①.程序算法流程图。
开始初始化AL=(W-X)AL=(W-X)/5CL=(W-X)/5-YAL=(R+2)Z=((W-X)/5-Y)某(R+2)结束②.源程序清单。
DATASEGMENTXDB1H;数据定义YDB0HRDB3HWDB6HZDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX;段寄存器定义MOVAL,WSUBAL,X;求(W-X)CBW;字节转换为字MOVCL,5IDIVCL;(W-X)/5MOVCL,ALMOVAL,Y;(W-X)/5-YSUBCL,ALMOVAL,RADDAL,2;(R+2)IMULCL;((W-X)/5-Y)某(R+2)MOV[Z],AXADDAL,30H;输出结果MOVDL,AL;MOVAH,2INT21HMOVAH,4CHINT21HCODEENDSENDSTART③.程序运行结果。
④.调试过程中遇到的问题和解决的方法。
还未能实现动态的输入数据,对指令的不熟悉,以至于在程序中经常性出错,得掌握固定的程序功能。
2.试编写一个程序,测试数是否是奇数。
如该数是奇数,则把DL的第0位置1,否则将该位置0。
①.程序算法流程图。
开始AL=XAL右移一位得CF否CF==1是DL与000000001B相或DL与11111110B相与结束②.源程序清单。
DATASEGMENTXDB9H;数据定义DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX;段寄存器定义MOVAL,XSHR AL,1;利用右移一位得到cf值,JB判断 JB NEXT;为1则为奇数ANDDL,11111110B;偶数DL第一个数置为0JMPEXITNEXT:ORDL,000000001B;奇数DL第一个数置为1EXIT:MOVAH,4CHINT21HCODEENDSENDSTART③.程序运行结果。
汇编实验报告
汇编实验报告一、实验目的本次汇编实验的主要目的是深入理解计算机底层的工作原理,掌握汇编语言的基本语法和编程技巧,能够运用汇编语言编写简单的程序来实现特定的功能。
通过实践操作,提高对计算机体系结构的认识,培养解决实际问题的能力。
二、实验环境本次实验使用的操作系统为 Windows 10,汇编语言编译器为MASM 615。
三、实验内容(一)数据传送与算术运算1、编写程序实现将两个 16 位的整数相加,并将结果存储在指定的内存单元中。
2、实现数据在不同寄存器和内存单元之间的传送。
(二)逻辑运算与移位操作1、对给定的两个字节数据进行逻辑与、或、异或操作,并观察结果。
2、进行移位操作,包括左移和右移,理解移位对数据的影响。
(三)循环与分支结构1、利用循环结构计算 1 到 100 的整数之和。
2、根据给定的条件,使用分支结构实现不同的操作。
(四)子程序调用1、编写一个子程序,实现两个数的乘法运算。
2、在主程序中调用该子程序,并输出结果。
四、实验步骤(一)数据传送与算术运算1、打开 MASM 编译器,新建一个汇编源文件。
2、使用`MOV` 指令进行数据传送,将两个整数分别存储在寄存器`AX` 和`BX` 中。
3、使用`ADD` 指令将两个数相加,结果存储在`CX` 寄存器中。
4、最后,使用`MOV` 指令将结果存储到指定的内存单元。
(二)逻辑运算与移位操作1、在源文件中定义两个字节变量,并初始化其值。
2、使用逻辑运算指令(如`AND`、`OR`、`XOR`)对这两个变量进行操作。
3、使用移位指令(如`SHL`、`SHR`)对变量进行移位,并观察结果。
(三)循环与分支结构1、对于循环结构,使用`LOOP` 指令实现从 1 到 100 的累加。
2、在分支结构中,根据给定的条件(如比较两个数的大小),使用`JZ`、`JL` 等指令执行不同的分支操作。
(四)子程序调用1、定义一个子程序,使用参数传递的方式接收两个数,并进行乘法运算。
汇编语言实验报告二
汇编语言实验报告)(实验二实验二)一.实验目的1.掌握程序设计中的3种基本结构(顺序结构、选择程序、循环程序)。
2.熟练使用汇编语言的指令:数据传送类指令、数据运算类指令、逻辑判断类指令与转移指令、循环指令等。
3.初步了解系统功能调用的使用方法,尝试使用01H号功能调用进行字符输入的方法及使用02H号功能调用进行字符输出(显示)的方法。
二.程序说明1.计算1+2+3+…+10,将结果显示在屏幕上。
2.利用01H号功能调用输入10个一位数字,并将其由ASCII码转换为二进制数,依此保存到变量BUF的10个字节中,变量BUF的形式为BUF DB 10 DUP(?)。
编程求出这10个数中的最大数和最小数,将最大数存入MAX单元、最小数存入MIN单元,并将其在屏幕上显示出来。
三.设计思想1、先将1-10循环求和,为了将结果显示在屏幕上,需要讲计算后保存在ax中的结果以十进制形式输出,可以将结果的两位数分别存于低位和高位中,即除以10取整和余al是商,ah是余数,后加上30h。
2、使用si寄存器,用于在存储器中寻址。
利用循环输入10个数字,将10个数比较,大的放在al,小的放在bl。
利用01号功能,输出。
四.程序代码程序一code segment main proc far assume cs:code start: push ds sub ax,ax push ax mov bx,0ah mov cx, 0ah sum1: add ax,bx dec bx loop sum1 printit: mov bl,10 div bl add al,30h mov ch,ah mov dl,al mov ah,2 int 21h add ch,30h mov dl,ch mov ah,2 int 21h ret main endp code ends end 程序二程序二data segment ;数据段定义开始数据段定义开始buf db 10 dup(?) ;数据定义及其存储空间数据定义及其存储空间 max db ? min db ? Str1 db 0DH,0AH,'Please input: ','$' ;定义Str1的内容的内容 Str2 db 0DH,0AH,'MAX:','$' ;定义Str2的内容的内容 Str3 db 0DH,0AH,'MIN:','$' ;定义Str3的内容的内容 data ends ;数据段定义结束数据段定义结束Stack segment stack ;堆栈段定义开始堆栈段定义开始db 10 dup(?) stack ends ;堆栈段定义结束堆栈段定义结束code segment ;代码段定义开始代码段定义开始main proc far assume cs:code,ds:data,ss:stack start: push ds sub ax,ax push ax mov ax,data mov ds,ax mov ax,stack mov ss,ax mov cx,10 mov si,0 ;寄存器,用于寻址寄存器,用于寻址mov bx,0 lop1: lea dx,Str1 mov ah,09 int 21h mov ah,01h ; 输入输入int 21h mov buf[si],al inc si loop lop1 ;返回循环1 mov cx,9 mov si,0 mov al,buf[si] mov bl,al lop2: inc si mov dl,buf[si] cmp dl,al jl compare1 mov al,dl compare1: cmp bl,dl ;比较,小的数放在bl jl compare2 mov bl,dl compare2: loop lop2 mov max,al mov min,bl lea dx,Str2 mov ah,09 int 21h mov dl,max mov ah,02h int 21h ;输出最大数输出最大数lea dx,Str3 mov ah,09 int 21h mov dl,min mov ah,02h int 21h ;输出最小数输出最小数ret main endp code ends end start 五. 结果分析并回答: 1. 设计的程序包含了几个段设计的程序包含了几个段 2. 你的代码经过编译和连接之后,总共占用多少个字节你的代码经过编译和连接之后,总共占用多少个字节3. 调用DEBUG 进行反汇编,查看程序的第一条指令的地址码是多少?最后一条指令的地址码是多少?指令的地址码是多少?4. 对于第2题,怎样修改程序可以同时实现将10个数字的累加功能个数字的累加功能5.对于第2题,若要求输入的是两位数,又该怎么办?题,若要求输入的是两位数,又该怎么办? 程序一:运行结果运行结果1、本程序包含了一个段,即为代码段、本程序包含了一个段,即为代码段2、代码经过编译和连接之后,共占32个字节个字节3、第一条指令的地址码、第一条指令的地址码最后一条指令的地址码最后一条指令的地址码程序二运行结果运行结果1、本程序包含了数据段、堆栈段和代码段三个段。
汇编语言实验报告
实验报告一:汇编语言实验基础一.实验目的:1. 熟悉汇编语言程序的开发过程以及汇编语言常用软件的使用方法2. 掌握DEBUG常用命令的使用方法二、实验内容:1.DEBUG 命令使用2.8088常用指令练习三、实验步骤:(一)DEBUG 命令使用:1、打 DEBUG 进入 DEBUG 控制,显示提示符'_ '。
2、用命令 F 100 10F 'A' 将'A'的ASCII码填入内存。
3、用命令 D 100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。
4、用命令 F 110 11F 41 重复上二项实验,观察结果并比较。
5、用命令 E 100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码? 6、用H命令检查下列各组16进制数加减结果并和你的手算结果比较:(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H(5)A758,347FH7、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF 和AF的内容。
8、用R命令将AX,BX内容改写为1050H及23A8H。
(二)8088常用指令练习1、传送指令1)用A命令在内存100H处键入下列内容:MOV AX,1234MOV BX,5678XCHG AX,BXMOV AH,35MOV AL,48MOV DX,75ABXCHG AX,DX2)用U命令检查键入的程序,特别注意左边的机器码。
3)用T命令逐条运行这些指令,注意有关寄存器及IP的变化情况。
并注意标志位有无变化。
2、加减法指令:1)用A命令在内存100H处键入下列内容:MOV AH,34MOV AL,22ADD AL,AHSUB AL,78MOV CX,1284MOV DX,5678ADD CX,DXSUB CX,AXSUB CX,CX2)用U命令检查键入的程序及对应的机器码。
汇编语言实验报告一.doc
汇编语言实验报告(实验一)一.实验目的1.掌握汇编语言程序的上机步骤;(1)用编辑程序(如EDIT、记事本等)编辑汇编语言源程序(建立.ASM文件)。
(2)用MASM程序产生OBJ文件。
(3)用LIINK程序产生EXE文件。
(4)程序的运行(用DEBUG或在DOS下直接运行)。
2.掌握DEBUG的使用方法。
二.程序说明1.在数据段DATA中有两个数据X和Y,假设X=1122H,Y=3344H,编程求两个字的和,结果存放到Z单元中。
2.从SOURCE_BUFFER单元开始存放了20个字母A,编程将这个20个字母A 的字符串传送到DEST_BUFFER开始的单元中。
3.从SOURCE_BUFFER单元开始存放了20个字母A,编程将这个20个字母A 的字符串向下移10个单元。
三.设计思想1、将1122H和3344H分别存放在双字x,y中,定义双字Z,x,y带进位相加放入Z中。
2、定义数据段source_buffer,把数据段地址放入ds寄存器,定义附加段extra_buffer,把附加段地址放入es寄存器,移动整个字符串。
3、定义数据段附加段,先移高位,这样要移20次。
四.程序代码1、DATA SEGMENTX DW 1122HY DW 3344HZ DW ?DATA ENDS ;数据段定义结束STACK SEGMENT ;堆栈段定义开始DW 40 DUP(0)STACK ENDS ;堆栈段定义结束CODE SEGMENT ;代码段定义结束ASSUME CS:CODE,SS:STACK,DS:DATASTART: MOV AX,DATAMOV DS,AX ;设置数据段的开始地址MOV DX,XADC DX,YMOV Z,DXMOV AH,4CH ;返回DOCINT 21HCODE ENDSEND START2、DATA SEGMENT ;定义数据段SOURCE_BUFFER DB 20 DUP(‘a’) ;定义个小写a DATA ENDSEXTRA SEGMENT ;定义附加段DEST_BUFFER DB 20 DUP(?)EXTRA ENDSCODE SEGMENT ;定义代码段MAIN PROC FARASSUME CS:CODE,DS:DATA,ES:EXTRASTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV AX,EXTRAMOV ES,AXLEA SI,SOURCE_BUFFERLEA DI,DEST_BUFFERCLDMOV CX,20REP MOVSB ;移动整个串RET ;返回到DOSMAIN ENDPCODE ENDSEND START3、DATA SEGMENT ;定义数据段SOURCE_BUFFER DB 20 DUP(‘a’) ;定义个小写a DATA ENDSEXTRA SEGMENT ;定义附加段DEST_BUFFER DB 20 DUP(?)EXTRA ENDSCODE SEGMENT ;定义代码段MAIN PROC FARASSUME CS:CODE,DS:DATA,ES:EXTRASTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS, AXMOV AX, EXTRAMOV ES, AXLEA SI, SOURCE_BUFFERLEA DI,DEST_BUFFERCLDMOV CX,20REP MOVSB ;移动整个串RET ;返回到DOSMAIN ENDPCODE ENDSEND START五.结果分析并回答:1.设计的程序包含了几个段第1段包含数据段、堆栈段、代码段第2、3个包含数据、附加段、代码段2.你的代码经过编译和连接之后,总共占用多少个字节第1、2个占30个字节,第3个占32个字节3.调用DEBUG进行反汇编,查看程序的第一条指令的地址码是多少?最后一条指令的地址码是多少?程序1第一条指令:1454:000 BB4B14 MOV AX,144B最后一条指令:1451:001E 807F0400 CMP BYTE PTR [BX+04],00程序2第一条指令:1450:0000 1E PUSH DS最后一条指令:1450:001E 8B0? MOV AX,[BX]程序3第一条指令:144D:0000 1E PUSH DS最后一条指令:144D:0020 8B5702 MOV DX,[DX+02]。
汇编语言程序设计实验报告
二、实验内容
P131作业29。
实验三子程序设计实验
一、实验目的
1.掌握汇编语言源程序子程序设计方法;
2.会使用CV软件工具。
二、实验内容
把实验二作为子程序,编写主程序来对能否构成三角形进行10判断。
实验四宏汇编程序设计实验
一、实验目的
1.掌握宏汇编程序编程技术及宏调用的方法;
2.主模块程序完成子程序的调用,及判断结果的显示,程序名为:ZHU.asm。
实验五混合程序的开发实验
一、实验目的
1.了解混合调用中的参数设置;
2.掌握混合调用的方法;
二、实验内容
P156第5题。
实验一单指令功能测试实验
一、实验目的
1.会使用DEBUG软件;
2.利用DEBUG单步执行功能测试指令的执行。
二、实验内容
判断从键盘输入的ASCII码数字,若是小于等于5,显示“C”,若是大于5显示“D”。假设输入的只可能是0~9数字。
实验二完整的汇编语言程序设计实验
一、实验目的
1.掌握完整的汇编语言源程序的设计方法;
实验五多模块程序设计实验
一、实验目的
1.掌握汇编段的属性的含义;
2.掌握利用LINK将多模块连接起来的方法;
3.掌握利用库文件将多模块连接起来的方法。
二、实验内容
假设内存单元中有三个字a、b和c,编写一个程序,它可判断它们能否构成一个三角形,若能,显示“Y”,否则,显示“N”;
具体要求:
1.三角形的判断程序为一模块子程序,程序名为:ABC.asm。入口参数:字节变量a、b、c。出口参数:字节变量d=1是三角形,d=0不是三角形。
2.了解COM文件的编程方法及特点;
汇编实验报告一实验总结
汇编实验报告一实验总结
实验报告一:汇编实验总结
实验目的:通过汇编实验,掌握汇编语言的基本语法和编程技巧,加深对计算
机底层工作原理的理解。
实验过程:在实验中,我们首先学习了汇编语言的基本语法和指令格式,包括
寄存器的使用、内存地址的访问、算术运算和逻辑运算等。
随后,我们进行了
一系列的编程练习,包括编写简单的程序来实现加法、乘法、比较大小等功能。
在实验的最后阶段,我们还学习了如何调用系统中断来实现输入输出操作。
实验结果:通过本次实验,我们深入了解了汇编语言的编程技巧和应用场景。
我们不仅掌握了汇编语言的基本语法,还学会了如何编写简单的汇编程序来实
现一些基本的功能。
同时,通过实验,我们对计算机底层的工作原理有了更深
入的理解,对计算机系统的运行机制有了更清晰的认识。
实验总结:本次汇编实验让我们深入了解了汇编语言的基本知识和编程技巧,
为我们今后的学习和工作打下了坚实的基础。
通过实验,我们不仅学会了如何
使用汇编语言编写程序,还对计算机系统的底层工作原理有了更深入的理解。
希望在今后的学习和工作中,我们能够继续深入研究汇编语言,不断提高自己
的编程水平,为计算机科学技术的发展贡献自己的力量。
实验五汇编语言程序设计实验(一)
实验五汇编语言程序设计实验(一)一、实验目的1、了解和掌握汇编语言子程序和主程序的设计。
2、掌握循环程序的设计。
3、掌握汇编语言主程序与子程序的调用和参数传递。
4、进一步熟悉在PC机上建立,汇编,链接,调试和运行8086、8088汇编语言程序的过程。
二、实验内容1、复习汇编语言源程序的上机过程:2、编写一个完整程序(包含循环设计和子程序设计)在以strg为首地址的缓冲区中存放着1个字符串,以-1作为结束标志,编程统计字符串长度,并将结果存入lenth单元。
要求统计字符串用子程序完成。
data segmentstrg db ‘abcd’,-1lenth dw ?data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlea dx,strgcall scountmov lenth,bxmov ah,4chint 21hscount proc nearpush sixor bx,bxmov si,dxnext:cmp byte ptr[si],-1jz overinc bxinc sijmp nextover:pop siretscount endpcode endsend start三、实验器材IBM PC 微机一台四、实验要求1、正确理解本次实验的目的,内容和原理。
2、能编写相应的程序五、实验报告要求完成下面任务:从键盘输入1个长度小于100的字符串,存入以buff 为首地址的缓冲区,其中如有大写字母,要求用子程序转换成小写字母,字符串以回车键作为结束。
写出操作步骤,程序清单,程序注释,实验现象。
汇编语言顺序程序设计实验报告
实验名称:汇编语言顺序程序设计实验报告实验目的:通过本次实验,学生能够掌握使用汇编语言编写顺序程序的基本方法,理解汇编语言的基本结构和运行机制。
实验内容:1. 汇编语言基础知识1.1 汇编语言的概念1.2 汇编语言的特点1.3 汇编语言的应用领域2. 汇编语言程序设计2.1 程序设计的基本流程2.2 程序设计的基本步骤2.3 汇编语言程序设计的规范与技巧3. 实验步骤3.1 确定实验题目和要求3.2 分析实验任务,设计程序流程图3.3 编写汇编程序3.4 调试程序,确保程序正确运行3.5 编写实验报告4. 实验报告要求4.1 实验题目4.2 实验目的4.3 实验内容和步骤4.4 程序设计思路和实现方法4.5 实验结果分析和讨论4.6 实验心得体会实验过程:1. 确定实验题目和要求本次实验的题目为“汇编语言顺序程序设计”,要求学生使用汇编语言编写一个顺序程序,实现指定的功能要求。
2. 分析实验任务,设计程序流程图在开始编写汇编程序之前,我们首先要明确实验的功能需求,然后设计程序的流程图,规划程序的整体结构。
3. 编写汇编程序在设计好程序流程后,根据汇编语言的语法规则,编写相应的程序代码,并确保程序的逻辑正确,语法无误。
4. 调试程序,确保程序正确运行编写完成程序后,需要对程序进行调试,逐步检查程序运行过程中的各个环节,发现并修复可能存在的错误。
5. 编写实验报告我们需要撰写本次实验的实验报告,详细记录实验的整体过程,包括程序设计思路、程序实现方法、实验结果分析和讨论,以及实验心得体会。
实验结果分析和讨论:经过本次实验,我们掌握了汇编语言顺序程序设计的基本方法和技巧,了解了汇编语言程序设计的规范和要求。
在实验过程中,我们遇到了一些问题和困难,但通过不懈的努力和团队合作,最终成功完成了实验任务,并取得了令人满意的成绩。
实验心得体会:通过本次实验,我们深刻认识到汇编语言在计算机领域中的重要性和应用价值,同时也意识到汇编语言程序设计的复杂性和技术挑战。
汇编实验一 实验报告
实验一查看CPU和内存用机器指令和汇编指令编程
一、实验目的
1.掌握debug的使用方法,会用基本的D,R命令查看、显示内存和寄存器
2.了解汇编指令编程的方法。
二、实验任务
1检查在存储器低端的BIOS数据区的内容。
(1)检查串行与并行端口
(2)检查系统设备
(3)检查键盘Shift状态
(4)检查显示状态
2 考察ROM BIOS
目的:检查在存储器高端的ROM BIOS中的数据。
(1)检查版本通告
(2)检查ROM BIOS数据
3.用D、R命令查看、显示内存和寄存器,可对寄存器内容进行修改。
三、实验结果及分析
1、检查在存储器低端的BIOS数据区的内容
(1)检查串行与并行端口
说明:检查后发现有四个串行端口,分别是03F8、02F8、03E8、02E8;并行端口也有四个,分别是03BC、03BC、0378、0278、9FC0
(2)检查系统设备
(3)检查键盘Shift状态
(4)检查显示状态
2、考察ROM BIOS (1)检查版本通告
(2)检查ROM BIOS数据
3、用D、R命令查看、显示内存和寄存器,可对寄存器内容进行修改
四、实验总结(心得、体会)
1、通过对检查在存储器低端的BIOS数据区的内容的查看,可以了解计算机的各种状态,而考察ROM BIOS可以鉴定计算机的出厂信息。
2、通过用D、R命令查看、显示内存和寄存器,可以了解计算机运行的过程步骤,并且可以通过偏移地址读取内容。
3、在读取时需要注意的是,在DEBUG显示中是低位至高位的显示,而我们需要的是高位至低位的显示方式,所以在操作时对于双字节的读取,需要将前后字节地址内容互换。
汇编语言编程实验报告
汇编语言编程实验报告汇编语言程序设计实验报告(一)汇编语言程序设计实验报告(一)一、预备知识汇编语言程序设计是一门实践性很强的课程。
编写程序、上机调试、运行程序是进一步学习和掌握汇编语言程序设计的必要手段。
二、实验目的1、掌握实验运行汇编语言所用的计算机机型2、熟悉常用编辑程序(行编辑程序EDLIN、全屏幕编辑程序QE及其它用于文件编辑的应用程序。
)3、掌握汇编程序ASM、宏汇编程序MASM1.0以上。
4、LINK连接程序5、DEBUG调试程序三、汇编语言源程序上机操作过程2、编辑源文件根据给定的任务,可编写程序。
如果经过检查认为所编程序无错时,就可在计算机上通过编辑程序建立源程序文件了。
一般在编辑过程中总会有错误产生,因此还要进行人工检查、修改以致重新编辑,直到所编辑的源程序无误为止,然后以一个源程序文件(ASM文件)存盘。
将包含QE文件的工作磁盘插入驱动器A:。
进入QEA\QE进入全屏幕后可以开始编程。
文件名取为Myprog。
asm;Ddisplystring (09H)CODESEGMENTPUBLICASSUME CS:CODE,DS:CODEORG 100HSTART:JMP BEGINMSG DB‘Hi ! This ia a dollar sign terminated string.’,’$’BEGIN:MOV AX,CS ;set up to display messageMOV DS,AXMOV DX,OFFSET,SG ;set up to display messageMOV AH,09H;display string function requestINT 21H ;call DOSMOV AH ,4CH ;terminate propram funct requestINT 21H ;Call DOSCODE ENDS;end of code segmentEND START;strat is the entry point输入完毕后,按ALT---X,存盘返回DOS3、汇编源程序文件(ASM,MASM)由编辑程序所建立的ASM文件只是个文本文件,计算机无法执行。
汇编语言实验报告实验七
汇编语言实验报告实验七实验七一.实验目的1.体验并了解DOS界面下色彩显示2.了解并掌握INT10功能BIOS调用显示屏幕控制二.实验原理及要求将实验代码键入计算机中在屏幕中间建立一个20列宽和9高的窗口,然后把键入的内容在这窗口显示出来。
键入的字符将被显示在窗口的最后一行,每当输入20个字符,该行就向上卷动,9行字符键入完成后,顶端行的内容丢失。
观察并记录实验现象,然后更改实验代码将显示字符背景改为蓝色,字符颜色改为红色,并使其闪烁。
三.实验代码原代码:Codes segmentAssume cs:codesMov ah,6;屏幕初始化功能号Mov al,0;全屏幕为空白Mov ch,0 ;左上角行号Mov cl,0 ;右上角列号Mov dh,24 ;右下角行号Mov dl,79 ;右下角列号mov bh,0111b ;卷入行属性Int 10hPoscurse:Mov ah,2 ;置光标位置功能号Mov dh,16 ;行Mov dl,30 ;列Mov bh,0 ;页号Int 10hMov cx,20Getchar:Mov ah,1Int 21hCmp al,'Q'Jz exitLoop getcharMov ah,6 ;屏幕初始化功能号Mov al,1 ;上卷行数Mov ch,8 ;左上角行号Mov cl,30 ;左上角列号Mov dh,16Mov dl,50Mov bh,0111bint 10hJmp poscurseExit:Mov ah,4chInt 21hCodes endsEnd更改后代码:Codes segmentAssume cs:codesMov ah,6 ;屏幕初始化功能号Mov al,0 ;全屏幕为空白Mov ch,0 ;左上角行号Mov cl,0 ;右上角列号Mov dh,24 ;右下角行号Mov dl,79 ;右下角列号Int 10hPoscurse:Mov ah,2 ;置光标位置功能号Mov dh,16 ;行Mov dl,30 ;列Mov bh,0 ;页号Int 10hMov ah,6 ;屏幕初始化功能号Mov al,1 ;上卷行数Mov ch,8 ;左上角行号Mov cl,30 ;左上角列号Mov dh,16Mov dl,50Mov bh,10010100bint 10hMov cx,20Getchar:Mov ah,1Int 21hCmp al,'Q'Jz exitLoop getcharJmp poscurseExit:Mov ah,4chInt 21hCodes endsEnd四.实验过程1.打开DOS操作界面;2.将代码输入到edit环境中并在e:盘中MASM文件夹下保存为1.asm文件;3.在MASM文件夹下用MASM程序编译文件1.asm并在该文件夹中保存为1.obj文件;4.在MASM文件夹下用LINK程序链接文件1.obj并正在该文件夹下保存为1.exe可执行程序;5.在DOS操作界面下输入1.exe观察程序运行结果,并记录。
汇编语言实验报告
汇编语言实验报告实验一、汇编运行环境及方法、简单程序设计一、程序说明本程序用来比较两个字符串string1和string2所含的字符是否相同。
若相同’,否则显示‘No match’。
则显示‘Match在程序的数据段先定义两个字符串string1和string2,再定义两个字符串mess1’和‘Nomatch’。
再代码段比较字符串string1和string2,和mess2,分别代表‘Match通过比较判断是否相同。
若相同则显示‘Match’,否则显示‘No match’。
二、调试说明再EDIT中建立ASM文件,再用汇编程序对源程序汇编产生目标文件Obj,再用连接程序产生执行文件EXE。
再用Debug进行调试。
其中常用到的指令有:用-g命令来用运行程序,用-u命令来显示程序,用-d 命令来查看数据段的情况,-e或-f命令来修改需要改正的部分,用-t指令来逐步执行程序,用-r指令来查看寄存用器和修改寄存器的值,-q命令用来退出debug程序。
在这些命令的后面加上地址,可以将命令执行到相应的地方。
如用-g指令运行程序后,再用-u指令显示程序的执行借给如下:若将string2改为'Move the cursor backwards.',程序的其他部分不做改动,执行结果:若将mov cx,25语句改成mov cx,24,结果为:此时少做了一次循环,得到的结果就不正确了。
实验二、用DEBUG编程:使用堆栈段将AX和BX的内容进行交换等一、程序说明本实验包括两个部分,第一个部分是将AX和BX的内容进行交换,并用堆栈作为两寄存器交换内容的中间存储单元;第二部分是用DEBUG的命令将存储器偏移地AH, 0BH,0CH,0DH,0EH。
在DEBUG状态址300H,304H连续单元顺序装入0 下送入给出的程序中。
第一个程序先将AX的内容进栈,然后将BX的内容赋给AX,再将出栈的内容赋给BX即可。
第二个程序是在进入debug后,用-a指令输入给出的程序,然用-r指令安要求修改内存的内容,再用-t指令逐步执行每条指令,看修改的内存内容对指令执行结果的影响。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
指导教师 (签名):一.实验原理(基本知识简单介绍、算法、流程)二.实验结果(截图,提供实验测试/调试的结果等,在空白地方手写注释)计算机组成原理与汇编语言实验(2013)Student strucm_sName db 6 dup(' ')m_sNum db 8 dup(' ')m_sScore db 3 dup(' ')Student endsstsg segment stack 's'dw 32 dup(?)stsg endsanykey macromov ah,7int 21hendmanykeyback macroanykeyshowmsg backendmcrlfm macropush axpush dxmov ah,9lea dx,crlfint 21hpop dxpop axendmexchange macro i,jpush cxpush sipush dimov cx,17;t=[i],即t=前项mov si,ilea di,stutemprep movsbmov cx,17;i=j,si->后项,即前项=后项mov di,i ;rep movsbmov cx,17;j=t,di->后项,即后项=tlea si,stutemprep movsbmov swapped,1pop dipop si计算机组成原理与汇编语言实验(2013)pop cxendmspace macropush dxpush axlea dx,gapmov ah,9int 21hpop axpop dxendmshowmsg macro npush axpush dxmov ah,9lea dx,msg&nint 21hpop dxpop axendmmovitem macro dst,srcpush cxpush dipush sicldmov cx,17lea di,[dst]lea si,[src]rep movsbpop sipop dipop cxendmdata segmentstudentx student 30 dup(<>)stutemp db 17 dup (0),'$'studisp db 19 dup(0),'$'namepar LABEL BYTEmaxnlen db 7namelen db ?namefld db 7 dup(?)numpar label bytemaxmlen db 9numlen db ?numfld db 9 dup(?)scopar label bytemaxsco db 4scolen db ?scofld db 4 dup(?);输入文件路径缓冲区pathpar label bytepathmax db 40pathlen db ?pathnam db 40 dup(?)ae90 db 0ae80 db 0ae70 db 0ae60 db 0b60 db 0msg_b60 db 9,9,'Scores<60:$'msg_ae60 db 9,9,'Scores>=60:$'msg_ae70 db 9,9,'Scores>=70:$'msg_ae80 db 9,9,'Scores>=80:$'msg_ae90 db 9,9,'Scores>=90:$'cur_i dw ?crlf db 13,10,'$'titl db ' Students Management System',0DH,0AH,' ',0DH,0AH,0DH,0AHmenu1 db ' I(Insert the data of the students)',0dh,0ah ;menumenu2 db ' L(Browse the data of the students)',0dh, 0ahmenu3 db ' Q(Query the data of the students)',0dh, 0ahmenu4 db ' D(Delete the data of the students)',0dh, 0ahmenu5 db ' M(Modify the data of the students)',0dh,0ahmenu7 db ' P(Print the data of the students)',0dh, 0ahmenu8 db ' C(Statistics the data of the students)',0dh, 0ahmenu9 db ' E(Exit the System)',0dh, 0ah,'$'msgmenu5_1 db 0DH,0AH,'1-----Modify name',0DH,0AHmsgmenu5_2 db '2-----Modify number',0DH,0AHmsgmenu5_3 db '3-----Modify score',0DH,0AH,'$'msgmenu3_1 db 0DH,0AH,'1-----Search name',0DH,0AHmsgmenu3_2 db '2-----Search number',0DH,0AHmsgmenu3_3 db '3-----Search score',0DH,0AH,'$'mmenutip db ' choose a number from the menu above',0DH,0AH,'$'msgprinttitle db 0DH,0AH,0DH,0AH,' sno sname score ',0DH,0AH,'$'gap db ' $'stu dw ?stustored dw 0swapped db 0sav_cnt dw ?stusaved dw 0saveflag db 1errcde db 0endcde db 0endaddr dw ?filehandle dw ?msg_titleln db ' ------------------------------------',13,10,'$'msgsepln db '--------------------------------',0DH,0AH,'$'msg02 db 'Please input the new student info.',13,10,'$'msg03 db 'Name:','$'msg04 db 'ID:','$'msg05 db 'Score:','$'msg07 db 'Successly Saved!',13,10,'$'msgdeled db 'Successly Deleted a item!',13,10,'$'msgmoded db 'Successly Modified a item content!',13,10,'$'msginsed db 'Successly Inserted item(s)!',13,10,'$'msgqforins db 'Insert this item?(y/n):',13,10,'$'msgback db 'Press any key to back.$'msgexit db 'Press any key to exit.$'msg09 db 'students out of 30.',13,10,'$'msg20 db 'There are more than 30 students.',13,10,'$'msg21 db 'Save as:',13,10,'$'msg22 db 'Please input the file you want to operate:',13,10,'$'msg23 db 'Read successly!',13,10,'$'msg27 db 'There isn',27h,'t any student.',13,10,'$'msgnoext db 'There is no such item!',13,10,'$'msgnaminfid db 'Please input a name to find:',13,10,'$'msgnuminfid db 'Please input a number to find:',13,10,'$'msgscoinfid db 'Please input a score to find:',13,10,'$'msgstattit db 9,9,'The result of statistics is listed as follow:',13,10,'$'msg_nname db 'Please input a new one:',13,10,'$'msg_nnum db 'Please input a new num.:','$'msg_nsco db 'Please input a new score.:','$'msgqsave db 'The ducoment have not saved.Do you want to save it now(y/n)?','$'msg_delnamin db 'Please input the name you want to delete:',13,10,'$'msg_modname db 'Please input the name field you want to modify:',13,10,'$' msg_modnum db 'Please input the number field you want to modify:',13,10,'$' msg_modsco db 'Please input the score field you want to modify:',13,10,'$'opnmsg db '***Error occured while opening file***',13,10,'$'wrtmsg db '***Error occured while writing file***',13,10,'$'readmsg db '***Error occured while reading file***',13,10,'$'routemsg db '***Path name is invalid***',13,10,'$'data endscode segmentassume cs:code,ds:data,ss:stsg,es:data计算机组成原理与汇编语言实验(2013)main proc farstart:mov ax,datamov ds,axmov es,axmainmenu:mov AX,0600Hmov CX,0000Hmov DX,174FHmov BH,07int 10Hmov AH,02 ;set cursormov BH,0mov DX,0100Hint 10Hlea DX,titl ;display menumov AH,9int 21Hshowmsg _titlelnlea DX,mmenutipmov AH,9int 21Hcase:mov ah,0int 16hcmp ah,17h;'i'je addonecmp ah,26h;'l'je browsecmp ah,19h;'p'je displaycmp ah,10h;'q'je querycmp ah,20h;'d'je del_intermcmp ah,2eh;'c'je statiscmp ah,32h;'m'je changecmp ah,12h;'e'je exitdisplay:call display_inanykeybackjmp mainmenuquery:call query_in计算机组成原理与汇编语言实验(2013)anykeybackjmp mainmenubrowse:call browse_inanykeybackjmp mainmenuaddone:call insert_inanykeybackjmp mainmenuexit:call quitstatis:call stat_inanykeybackjmp mainmenudel_interm:jmp deletechange:call mod_inanykeybackjmp mainmenudelete:call del_inanykeybackjmp mainmenubeep:mov AH,14mov AL,7mov BH,0int 10Hjmp mainmenumain endp;------------------------------------------------------------------------browse_in proc nearcall near ptr clearcall near ptr cursorcall near ptr readallcall name_sortcall near ptr printretbrowse_in endp;------------------------------------------------------------------------del_in proc nearcall clearcall cursorcall delete_inretdel_in endp;------------------------------------------------------------------------ query_in proc nearcall clearcall cursorcall bg_searchretquery_in endp;------------------------------------------------------------------------ stat_in proc nearcall clearcall cursorcall near ptr statretstat_in endp;------------------------------------------------------------------------ insert_in proc nearcall clearcall cursorcall near ptr inputcall name_sortretinsert_in endp;------------------------------------------------------------------------ display_in proc nearcall clearcall cursorcall near ptr printretdisplay_in endp;------------------------------------------------------------------------ mod_in proc nearcall clearcall cursorcall printcall bg_modifycall name_sortretmod_in endp;------------------------------------------------------------------------ delete_in proc nearpush axpush dxcall printcrlfmmov ah,9lea dx,msg_delnaminint 21hcall near ptr inputnamecall near ptr delcmp ax,-1je qdelshowmsg deledqdel:pop dxpop axretdelete_in endp;------------------------------------------------------------------------ bg_search proc nearshowmsg menu3_1mov ah,1int 21h;getch()crlfmcmp al,'1'je q1cmp al,'2'je q2showmsg scoinfidlea bx,studentx+14mov dx,3jmp bgsearq1:showmsg naminfidcall near ptr inputnamelea bx,studentxmov dx,1jmp bgsearq2:showmsg numinfidcall near ptr inputnumlea bx,studentx+6mov dx,2bgsear:push bxpush dxcall near ptr search;search(studentx,1)cmp ax,-1je qinsshowmsg printtitleshowmsg seplnpush simov si,axcall near ptr printlinepop sijmp qqueqins:showmsg qforinsmov ah,01int 21hcrlfmcmp al,'y'jne qquecall inputnumcall inputscocall storshowmsg insedmov saveflag,0qque:retbg_search endp;------------------------------------------------------------------------ bg_modify proc nearpush axpush bxpush dxshowmsg menu5_1;display modify submenumov ah,1int 21h;getch()crlfmcmp al,'1'je t1cmp al,'2'je t2mov bx,3call inputscojmp cint1:call inputnamemov bx,1jmp cint2:mov bx,2call inputnumcin:push bxcall near ptr modifycmp ax,-1je qmodicrlfmshowmsg modedqmodi:pop dxpop bxpop axretbg_modify endp;------------------------------------------------------------------------ quit proc nearcmp saveflag,0je qforsavjmp qsysqforsav:call clearcall cursorshowmsg qsavemov ah,1int 21hcmp al,'y'je savitjmp qsyssavit:call savemov ah,3eh;close filemov bx,filehandleint 21hqsys:mov ax,4c00hint 21hretquit endp;------------------------------------------------------------------------ search proc nearpush bpmov bp,sppush dipush bxpush sipush cxpush dxmov di,[bp+6]mov dx,stustoredmov bx,[bp+4];bx:typemov bp,dicmp bx,1je snamcmp bx,2je snummov cx,3mov bx,cxlea ax,scofldjmp loop1snam:mov cx,6mov bx,cxlea ax,namefldjmp loop1snum:mov cx,8mov bx,cxlea ax,numfldloop1:mov si,axmov cx,bxrepe cmpsbje foundadd bp,17mov di,bpdec dhjnz loop1mov ax,-1showmsg noextjmp qsearchfound:mov ax,bpmov dx,stustoredsub dx,bxmov cur_i,dxqsearch:pop dxpop cxpop sipop bxpop dipop bpret 4search endp;------------------------------------------------------------------------ name_sort proc nearpush sipush dipush axpush bxpush dxpush cxcmp stustored,1je qsortlea bx,studentxpush bxmov ax,stustoredsub ax,1mov bl,17mul blpop bxadd bx,axmov dx,stustoredsub dx,1 ;dx:il1:mov swapped,0sub bx,17mov endaddr,bxpush bxlea si,studentx;si:j,j=0l2:mov cx,6mov di,siadd di,17mov bx,dimov ax,sirepe cmpsbjbe s3exchange ax,bxs3:mov si,axadd si,17;j++cmp si,endaddrjbe l2pop bxcmp swapped,0je qsortdec dxjnz l1qsort:pop cxpop dxpop bxpop axpop dipop siretname_sort endp;------------------------------------------------------------------------ del proc nearpush bxpush dipush sipush cxlea bx,studentxpush bxmov bx,1;search(studentx,name)push bxcall near ptr searchcmp ax,-1je nomatchmov di,axmov si,diadd si,17;si:j,di:imov cx,stustoredsub cx,cur_imovit:movitem di,simov di,si;si:j+1 ,di:jmov dx,diadd dx,17mov si,dxloop movitmov ax,1mov saveflag,0sub stustored,1nomatch:pop cxpop sipop dipop bxretdel endp;------------------------------------------------------------------------ insert proc nearpush sipush dipush axpush bxpush cxcmp stustored,0je exilea si,stutemplea di,studentxmov ax,stustoredmov bl,17mul bladd di,axmov cx,17;rep movsbinc stustoredexi:pop cxpop bxpop axpop dipop siretinsert endp;------------------------------------------------------------------------ stor proc nearpush axpush bxpush dxpush dipush sipush cxcmp namelen,0je qstocldmov ax,stustoredmov bl,17mul bllea dx,studentxmov stu,dxadd stu,axmov di,stulea si,namefldmov cx,6rep movsblea si,numfldmov cx,8rep movsbmov cx,3lea si,scofldrep movsbinc stustoredqsto:pop cxpop sipop dipop dxpop bxpop axretstor endp;------------------------------------------------------------------------ modify proc nearpush bpmov bp,sppush bxpush dxpush dipush cx计算机组成原理与汇编语言实验(2013)mov bx,[bp+4]cmp bx,1je mdnamcmp bx,2je mdnumlea dx,studentx+14jmp findmdnam:lea dx,studentxjmp findmdnum:lea dx,studentx+6find:push dxpush bxcall near ptr searchcmp ax,-1je qu_modmov di,ax;cmp bx,1je mnamcmp bx,2je mnumlea dx,msg_nscomov ah,9int 21hlea dx,scoparmov ah,0ahint 21hmov cx,3lea si,scofldjmp mfymnam:lea dx,msg_nnamemov ah,9int 21hcall inputnamemov cx,6lea si,namefldjmp mfymnum:lea dx,msg_nnummov ah,9int 21hlea dx,numparmov ah,0ahint 21hmov cx,8lea si,numfld计算机组成原理与汇编语言实验(2013)mfy:rep movsbmov saveflag,0mov ax,1qu_mod:pop cxpop dipop dxpop bxpop bpret 2modify endp;------------------------------------------------------------------------stat proc nearpush cxpush bxpush dxpush axmov cx,stustoredlea bx,[studentx+14]sta:mov dx,[bx]mov ah,[bx+2]cmp dl,'1'je a90cmp dh,'9'jae a90cmp dh,'8'jae a80cmp dh,'7'jae a70cmp dh,'6'jae a60add b60,1jmp repeata90:add ae90,1jmp repeata80:add ae80,1jmp repeata70:add ae70,1jmp repeata60:add ae60,1repeat:add bx,17loop stashowmsg stattitshowmsg _titlelnshowmsg _b60mov bl,byte ptr b60call deciasccrlfmshowmsg _titlelnshowmsg _ae60mov bl,byte ptr ae60call deciasccrlfmshowmsg _titlelnshowmsg _ae70mov bl,byte ptr ae70call deciasccrlfmshowmsg _titlelnshowmsg _ae80mov bl,byte ptr ae80call deciasccrlfmshowmsg _titlelnshowmsg _ae90mov bl,byte ptr ae90call deciasccrlfmshowmsg _titlelnmov ae90,0mov ae80,0mov ae70,0mov ae60,0mov b60,0pop axpop dxpop bxpop cxretstat endp;------------------------------------------------------------------- errm proc nearpush axmov ah,9int 21hmov errcde,01pop axreterrm endp;------------------------------------------------------------------- input proc nearpush axpush dxcall near ptr clearcall near ptr cursorcmp stustored,29ja i1mov ah,09lea dx,msg02;display promptint 21hiloop:cmp stustored,29ja i1call near ptr inputnamecmp namelen,0je i2call near ptr inputnumcall near ptr inputscocall near ptr storjmp iloopmov saveflag,0jmp i2i1:mov ah,9lea dx,msg20;'There are more than 30 students.' int 21hi2:showmsg back;'Press any key to back.'i3:mov saveflag,0pop dxpop axretinput endp;---------------------------------------------------------------------- inputname proc nearpush axpush dxpush bxpush cxshowmsg 03mov ah,0ahlea dx,nameparint 21hcrlfmmov bh,0mov bl,namelenmov cx,7sub cx,bxn10:mov namefld[bx],20hinc bxloop n10pop cxpop bxpop dxpop axretinputname endp;----------------------------------------------------------------------- inputnum proc nearpush axpush dxpush bxpush cxshowmsg 04mov ah,0ahlea dx,numparint 21hcrlfmmov bh,0mov bl,numlenmov cx,9sub cx,bxn20:mov numfld[bx]inc bxloop n20pop cxpop bxpop dxpop axretinputnum endp;---------------------------------------------------------------------- inputsco proc nearpush axpush dxpush bxpush cxshowmsg 05mov ah,0ahlea dx,scoparint 21hcrlfmmov bh,0mov bl,scolenmov cx,4sub cx,bxn21:mov scofld[bx],20hinc bxloop n21pop cxpop bxpop dxpop axretinputsco endp;------------------------------------------------------------------------ print proc nearpush sipush cxpush dxpush axcmp stustored,0je qprintcrlfmcrlfmshowmsg printtitleshowmsg seplnlea si,studentxmov cx,stustoredpline: call near ptr printlineloop plinepop axpop dxpop cxpop siqprint:retprint endp;------------------------------------------------------------------------ printline proc nearpush dipush cxpush dxpush axlea di,studisp;stutemp=studentx[i]mov cx,6rep movsbmov [studisp+6],9add di,1mov cx,8rep movsbmov [studisp+15],9add di,1mov cx,3rep movsbmov ah,9lea dx,studispint 21hcrlfmshowmsg seplnpop axpop dxpop cxpop diretprintline endp;------------------------------------------------------------------------ deciasc proc nearmov ch,100dmov cl,10dre:cmp ch,0je qdecimov al,bl;cbwdiv ch;mov bl,ahcall near ptr printitmov al,chcbwdiv clmov ch,aljmp reqdeci:retdeciasc endp;-------------------------------------------------------------------- printit proc nearadd al,30hmov dl,almov ah,2int 21hretprintit endp;-------------------------------------------------------------------- stor2 proc nearpush sipush dipush axpush bxpush cxcmp stutemp,0je exittlea si,stutemplea di,studentxmov ax,stustoredmov bl,17mul bladd di,axmov cx,17;rep movsbinc stustoredpop cxpop bxpop axpop dipop siexitt: retstor2 endp;------------------------------------------------------------------------ get_path proc nearpush axpush bxpush dxshowmsg 22;'Please input the file you want to operate:' mov ah,0ahlea dx,pathparint 21h;crlfmmov bl,pathlenmov bh,0mov pathnam[bx],0pop dxpop bxpop axretget_path endp;-------------------------------------------------------------------- openh proc nearpush axpush cxpush dxcall near ptr get_pathmov ah,3dhmov cx,0lea dx,pathnamint 21hjc o1mov filehandle,axpop dxpop cxpop axreto1:mov endcde,01lea dx,opnmsgcall near ptr errmpop dxpop cxpop axretopenh endp;-------------------------------------------------------------------- readall proc nearpush axmov endcde,0call near ptr openhcmp endcde,0jne rexit;endcde=1mov stustored,0contin:call near ptr readhcmp endcde,0jne r20;endcde=1call near ptr stor2cmp stustored,30ja oexitjmp continr20:call near ptr clsehcall clearcall cursorshowmsg 23jmp rexitoexit:call near ptr clsehmov saveflag,0showmsg 09;rexit:showmsg back;pop axretreadall endp;----------------------------------------------------------------------- readh proc nearpush axpush bxpush cxpush dxmov ah,3fh;read filemov bx,filehandlemov cx,17lea dx,stutempint 21hjc c1cmp ax,0je c2;ax=0,end of file,quitcmp stutemp,1ah;EOF Marker?je c2pop dxpop cxpop bxpop axretc1:lea dx,readmsgcall near ptr errmc2:mov endcde,1pop dxpop cxpop bxpop axretreadh endp;----------------------------------------------------------------------- save proc nearpush cxpush axmov errcde,0call near ptr clearcall near ptr cursorcall near ptr creathcmp errcde,0jne s2sloop:mov cx,stustoredcmp stusaved,cxje sexitcall near ptr writhcmp errcde,0jne sexitjmp sloopsexit:call near ptr clsehmov saveflag,1showmsg 07s2:showmsg exitanykeymov stusaved,0pop axpop cxretsave endp;------------------------------------------------------------------------ creath proc nearpush axpush cxpush dxshowmsg 21call near ptr get_pathcrlfmmov ah,3chmov cx,0lea dx,pathnamint 21hjc a1mov filehandle,axpop dxpop cxpop axreta1:lea dx,opnmsgcall errmpop dxpop cxpop axretcreath endp;------------------------------------------------------------------------ clseh proc nearpush axpush bxmov ah,3ehmov bx,filehandleint 21hpop bxpop axretclseh endp;------------------------------------------------------------------------ writh proc nearmov ax,stusavedmov bl,17mul bllea dx,studentxadd dx,ax;dxmov ah,40hmov bx,filehandlemov cx,17;cxint 21hinc stusavedjnc d1lea dx,wrtmsgcall near ptr errmd1:retwrith endp;------------------------------------------------------------------------ clear proc nearpush axpush bxpush cxpush dxmov AX,0600H ;clear screenmov CX,0mov DX,174FHmov BH,07int 10Hpop dxpop cxpop bxpop axretclear endp;------------------------------------------------------------------------ cursor proc nearpush axpush bxpush dxmov ah,2mov bh,0mov dx,0;dh:row,dl:columnint 10hpop dxpop bxpop axretcursor endpcode endsend start三.实验总结(心得、体会、实验设计不足之处)。