汇编语言程序设计实验教程第二章实验报告

合集下载

汇编语言实验报告1~7

汇编语言实验报告1~7

汇编语言实验报告1~7实验一:数据传输指令、算术指令、逻辑指令的使用实验内容:利用汇编语言,编写一个程序,实现两个整数相加,并将结果存入第三个变量中实验步骤:1. 声明三个变量a、b、c2. 将10存入a,将20存入b3. 将a的值传入al,将b的值传入bl4. 使用add指令将al和bl相加,将结果存入al5. 将al的值传入c6. 显示c的值实验结果:a db 10mov al,aadd al,blint 21hmov ax,4c00h实验二:分支指令的使用实验内容:利用汇编语言,编写一个程序,实现当输入的值为正数时,输出"I'm positive!";当输入的值为负数时,输出"I'm negative!";当输入的值为零时,输出"I'm zero!"1. 定义一个变量num2. 接收用户输入,并将其存储在num中3. 用test指令判断num的值4. 当num=0时,执行输出"I'm zero!"的指令7. 退出程序num db ?lea dx, promptsub al, '0'test num, numjz zerojs negjmp positiveneg:output:zero_msg db 'I am zero!$'prompt db 'Please enter a number:', 0dh, 0ah, '$'1. 定义变量i、sum,分别表示累加的数字和累加和2. 将i赋初值1,sum赋初值03. 进入循环5. 使用inc指令将i加16. 使用cmp指令将i与10比较,如果i小于等于10,继续循环,否则退出循环7. 输出结果mov bx, iloopStart:inc bx实验四:过程调用的使用2. 循环遍历1到100之间的每个数3. 用一个for语句嵌套一个for语句判断该数是否为质数4. 用两个自定义的子程序is_prime和output输出结果call is_primeskip:cmp i, 100prime_loop:div blretje newlinejmp done实验目的:掌握字符串操作指令的使用实验内容:利用汇编语言,编写一个程序,将字符串"SJTU"改为字符串"MIT"1. 定义字符串SJTU和MIT2. 定义两个变量i和len,分别表示字符串的下标和长度3. 使用movsb将SJTU的值传到MIT中4. 输出MITSJTU db 'SJTU'lea si, SJTUstringLoop:实验内容:利用汇编语言,编写一个程序,实现将输入的字符串写入一个文件中,然后再读取该文件中的字符串并输出2. 打开文件3. 将字符串写入文件中4. 关闭文件6. 读取文件内容8. 输出读取的字符串fileName db 'test.txt'content db 32 dup(?)mov cx, word ptr [content]实验内容:利用汇编语言,编写一个程序,在系统按下Ctrl+C时,输出一条信息并退出1. 声明函数handleCtrlC2. 获取中断21的地址,将其存储到文件头中org 100hmov [old_int_21h], es:bxmov dx, offset handleCtrlCend开始:。

汇编实验2-循环程序设计-实验报告

汇编实验2-循环程序设计-实验报告

汇编实验2-循环程序设计-实验报告一、实验目的1、了解循环程序设计的方法2、理解汇编语言中循环指令的使用3、掌握汇编语言中常用的循环结构二、实验原理1、循环指令循环指令是计算机中常用的一种控制结构,其作用是重复执行一定的操作。

在汇编语言中,常用的循环指令有LOOP、LOOPE、LOOPNE等,具体功能如下:(1)LOOP:重复执行指定次数的操作;(2)LOOPE:执行操作直到CX寄存器为0或ZF寄存器为1;(3)LOOPNE:执行操作直到CX寄存器为0或ZF寄存器为0。

LOOP指令的语法格式如下:LOOP label其中,label表示循环的目标地址。

2、循环结构循环结构是计算机程序设计中常用的一种结构,其基本形式包括:while、do...while、for等。

在汇编语言中,常用的循环结构有以下两种:(1)无限循环结构:该结构适用于需要不停顿地进行某项操作的情况,底层逻辑基于测试指令;(2)计数器循环结构:该结构适用于需要循环指定次数的情况,底层逻辑基于循环指令。

三、实验内容1、使用循环指令实现计算1~10的和;2、使用循环结构实现计算1~10的和。

四、实验步骤1、使用循环指令实现计算1~10的和。

(1)将计数器初始化为10,即MOV CX,10;(2)将累加器初始化为0,即MOV AX,0;(3)将当前计数器值加到累加器中,即ADD AX,CX;(4)将计数器减1,即DEC CX;(5)判断计数器是否为0,若不为0,则执行第3步;若为0,则跳转到计算结果的部分。

2、使用循环结构实现计算1~10的和。

(1)将计数器初始化为10,即MOV CX,10;(2)将累加器初始化为0,即MOV AX,0;(3)将当前计数器值加到累加器中,即ADD AX,CX;(4)将计数器减1,即DEC CX;(5)判断计数器是否为0,若不为0,则执行第3步;若为0,则跳转到计算结果的部分。

五、实验结果(1)使用循环指令实现计算1~10的和MOV CX,10MOV AX,0LOOP label1ADD AX,CXDEC CXJNZ label1label1:MOV sum,AX(2)使用循环结构实现计算1~10的和MOV CX,10MOV AX,0label2:ADD AX,CXDEC CXJNZ label2MOV sum,AX六、实验总结本次实验实现了两种不同的循环方式,分别使用了循环指令和循环结构。

汇编语言程序设计实验报告

汇编语言程序设计实验报告

汇编语言程序设计实验报告汇编语言程序设计实验报告引言:汇编语言是计算机中最基本的语言,通常用于处理硬件相关问题。

在这个实验中,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。

以下是我们的实验报告。

正文:1. 实验环境我们使用的实验环境是Intel 8086微处理器与高级汇编语言。

微处理器使用的是PCB-512主板,而高级汇编语言是MASM。

2. 实验目的我们的实验目的主要是学习汇编语言的基础知识和编程技巧,包括了汇编语言的寄存器、指令、内存管理等方面的知识。

我们的另一个目的是掌握汇编语言的常用编程技巧,能够独立完成一些简单的汇编程序。

3. 实验内容我们的实验内容主要包括以下几点:(1)学习汇编语言的基础知识,包括寄存器、指令、内存管理等方面的知识。

(2)掌握汇编语言的常用编程技巧,包括数据输入输出、运算、跳转等基本操作。

(3)实践用汇编语言编写程序,如计算器、菜单等实用程序。

(4)了解8086微处理器的结构和原理。

4. 实验过程在这个实验过程中,我们完成了以下几个程序:(1)计算器计算器是一个简单的程序,主要用于实现两个数之间的加、减、乘、除等基本运算。

我们通过输入输出指令、存储指令等指令实现了这个程序的功能。

(2)菜单菜单是一个实用程序,主要用于展示一个简单的菜单并实现用户选择相关功能的功能。

我们使用了汇编语言中的跳转指令、输入输出指令等实现了这个程序。

5. 实验结果在我们的实验中,我们成功完成了上述两个程序。

我们通过输入输出指令、存储指令等指令实现了这个程序的功能。

6. 实验总结在这个实验过程中,我们学习汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。

我们通过编写计算器和菜单等简单实用程序,加深了对汇编语言的理解和认识。

我们认为这个实验对我们今后的学习和工作都有很大的帮助。

结论:通过这个实验,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。

汇编语言程序设计实验报告二(分支循环程序实验)

汇编语言程序设计实验报告二(分支循环程序实验)

汇编语言程序设计实验报告二(分支循环程序实验)一、实验目的1、掌握分支程序、循环程序的设计方法。

2、熟悉DEBUG程序的使用方法。

3、掌握汇编语言程序的编辑、汇编、连接以及调试过程。

二、实验内容1、编写一程序,将内存中某一区域的数据传送到另一个区域中(要求用循结构,不考虑数据块重叠问题)。

2、编写一程序,将内存中某一区域的数据传送到另一区域(要求考虑数据块重叠问题)。

三、实验准备1、预习数据传送指令,熟悉分支和循环程序设计方法。

2、预习DEBUG调试程序的使用方法。

3、根据实验内容要求,编写好实验源程序。

四、实验步骤1、用QE或其它编辑软件,在计算机上编辑源程序,使其正确无误。

2、汇编、连接源程序,产生.EXE可执行文件。

3、运行程序。

(1) 进入DEBUG。

打入DEBUGT MYPROG.EXE。

MYPROG为所编程序的文件名。

(2) 先用G命令连续剧连续执行程序,程序执行完毕后,观察运行结果。

如果执行后是对的,说明程序编写是正确的,如果结果不对,说明程序有错误,则执行下一步。

(3) 检查程序。

在程序中设置若干断点,以便杳出错误所在。

(4) 采用单步命令T或执行程序,观察各寄存器和存储单元内容,以便找到错误之处。

五、实验报告要求1、列出程序清单,并给出程序流程图。

2、总结实现数据传送的几种方法,指出它们的区别。

开始3、分析实验中所遇到的一些问题,分析错误原因。

4、说明本实验中是如何使用DEBUG进行调试的。

CX、SI、DI置初值六、流程图勤开始设置增量方式CX、SI、DI置初值保存SI内容AL [SI] SI SI+源块长度[DI] AL N SI>DIYSI SI+1 恢复SI内容恢复SI内容DI DI+1CX CX-1 设置减量方式N CX=0, SI指向源块末尾DI指向目的块末尾Y结束 [DI] [SI]题一流程图 N 传完了吗, 书馆 Y结束题二流程图七、程序清单题一程序清单:STACK SEGMENT STACK ‘STACK’DB 100 DUP(0)STACK ENDSDATA SEGMENT PARA ‘DATA’SOUR DB 0、1、2、3、4、5、6、7、8、9 DEST DB 10 DUP(,)DB ‘$’DATA ENDSSEGMENT PARA‘CODE’ASSUME CS:CODEMAIN PROC FARSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV CX,10MOV SI,offset SOURMOV DI, offset DESTAGAIN: MOV AL,[SI]MOV [DI],ALINC SIIN DILOOP AGAINMOV DX,offset DESTMOV AH,09HINT 21HRETMAIN ENDPCODE ENDSEND START题二程序清单:DATA SEGMENT PARA ‘DATA’STRG DB ‘ABCDEFGHIJKLMNOP’STG1 EQU STRG+4STG2 EQU STHG+8STRSE EQU 6DATA ENDSSTACK SEGMENT PARA ‘CODE’DB 100 DUP(0) STACK ENDSCODE SEGMENT PARA ‘CODE’ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK PROC FARSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXMOV CX,STRSEMOV SI,OFFSET STG1MOV DI,OFFSET STG2CLDPUSH SIADD SI,STRSE-1CMP SI,DIPOP SIJL MOVESTDADD SI,STRSE-1ADD DI,STRSE-1 MOVE: REP MOVSB RETMAIN ENDPCODE ENDSEND START。

实验2-用户登录验证程序的实现

实验2-用户登录验证程序的实现
DEC COUNT ;可尝试次数-1 JZ EXIT ;如果次数用完则退出 JMP U_MODULE
P_MODULE: MOV AH,2 ;换行 MOV DL,0AH INT 21H
MOV AH,09H ;DOS显示提示字符串 MOV DX,OFFSET PASSWORD INT 21H
MOV BX,OFFSET BUF1 MOV CX,LLL MOV COUNT,3
五、支撑毕业要求指标点
目标 3.1 使学生了解微型计算机硬件结构和微型计算机工作原理,掌握 Intel X86 指令系统。使学 生能够将掌握的软硬件相关工程基础知识,用于分析微型计算机及应用领域的相关工程问题。 目标 3.2 使学生掌握汇编语言程序设计方法,具备汇编语言程序开发能力,能够根据实验方案,配置 实验环境、开展实验,进行数据分析与处理,综合实验结果以获得合理有效的结论。
U_MODULE: ;用户名模块
3
MOV AH,09H ;DOS显示字符串 MOV DX,OFFSET MESG1 ;取偏移地址 INT 21H
MOV AH,0AH ;等待从键盘输入的字符串(在屏幕上显示),并保存在缓 冲区
MOV DX,OFFSET BUF;DX=缓冲区首地址 INT 21H
;判断用户名是否正确 MOV DI,OFFSET BUF+2 MOV SI,OFFSET USER CLD
10
六、指导教师评语 (含学生能力达成度的评价)
成绩
批阅人
日期
评分项 评 遵守实验室规章制度
学习态度
算法思想准备情况
程序设计能力

解决问题能力
课题功能实现情况
算法设计合理性
算法效能评价
回答问题准确度

汇编语言程序设计实验教程第二章实验报告

汇编语言程序设计实验教程第二章实验报告

汇编语言程序设计实验教程第二章实验报告实验2.1用表格形式显示字符1.题目:用表格形式显示ASCII字符SMASCII2.实验要求:按15行*16列的表格形式显示ASCII码为10H-100H的所有字符,即以行为主的顺序及ASCII码递增的次序依次显示对应的字符。

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

3.提示:(1)显示每个字符可使用功能号为02的显示输出功能调用,使用方法如下:mov ah,02hmov dl,输出字符的ASCII码int 21h(2)显示空白符时,用其ASCII码0置入dl寄存器。

每行结束时,用显示回车(ASCII 为0dh)和换行符(ASCII为0ah)来结束本行并开始下一行。

(3)由于逐个显示相继的ASCII字符时,需要保存并不断修改dl寄存器的内容,而显示空白、回车、换行符时也需要使用dl寄存器,为此可使用堆栈来保存相继的ASCII字符。

具体做法是:在显示空白或回车、换行符前用指令push dx把dl的内容保存到堆栈中去。

在显示空白或回车、换行符后用指令pop dx恢复dl寄存器的原始内容。

4.程序清单:code segmentassume cs:codestart:mov dx,0010hnext:mov cx,10hloop1:mov ah,02hint 21hinc dxpush dxint 21hpop dxloop loop1push dxmov dl,0ahint 21hmov dl,0dhint 21hpop dxcmp dx,100hjb nextmov ah,4chint 21hcode endsend start5.运行结果如下:6.实验总结:通过本次实验我深刻的知道用汇编语言编译程序的方法,掌握了如何合理的利用各个寄存器进行程序的控制操作,初步了解到循环程序的控制方法,以及dos中断调用的基本要领对学习汇编语言有了非常好的帮助作用!汇编语言实验二查找匹配字符串一、目的查找匹配字符串SEARCH程序接收用户键入的一个关键字以及一个句子。

汇编语言程序设计实验报告

汇编语言程序设计实验报告

汇编语言程序设计实验报告汇编语言程序设计实验报告引言汇编语言是一种低级语言,用于编写计算机的底层程序。

在计算机科学与技术领域,汇编语言程序设计是一门重要的课程。

本篇实验报告将介绍我在汇编语言程序设计实验中所学到的知识和经验。

实验目的本次实验的目的是通过编写汇编语言程序,加深对计算机底层原理的理解,并掌握汇编语言的基本语法和编程技巧。

实验环境在实验中,我使用了一台运行Windows操作系统的计算机,并安装了MASM 汇编语言开发工具。

实验内容1. 汇编语言基础知识在实验开始前,我先学习了汇编语言的基础知识。

汇编语言使用助记符来代表机器指令,与机器指令一一对应。

了解了寄存器、内存和指令的概念,并学会了如何使用它们来编写汇编程序。

2. 汇编语言程序设计在实验中,我编写了一些简单的汇编语言程序,以加深对汇编语言的理解和应用。

例如,我编写了一个计算两个数之和的程序,通过将两个数存储在寄存器中,并使用加法指令进行运算,最后将结果保存到指定的内存位置。

3. 汇编语言程序调试在编写汇编语言程序时,我遇到了一些错误和问题。

为了解决这些问题,我学会了使用调试工具来定位错误。

通过逐步执行程序,并观察寄存器和内存的变化,我能够找到程序中的错误并进行修正。

4. 汇编语言程序优化在实验中,我也尝试了对汇编语言程序进行优化,以提高程序的性能和效率。

通过减少指令的数量和使用更高效的算法,我成功地改进了程序的执行速度。

实验心得通过本次实验,我深刻体会到了汇编语言程序设计的重要性和挑战性。

汇编语言虽然复杂,但它能够直接操作计算机的硬件,提供了更高的灵活性和效率。

通过编写汇编语言程序,我不仅加深了对计算机底层原理的理解,还提高了问题解决和调试能力。

总结汇编语言程序设计实验是一门重要的课程,它为我们提供了学习计算机底层原理和编程技巧的机会。

通过实验,我掌握了汇编语言的基本知识和技巧,并成功编写和优化了汇编语言程序。

这次实验不仅加深了我的理论知识,还培养了我的实际操作能力。

汇编语言实验报告

汇编语言实验报告

汇编语言实验报告
1. 实验简介
本次实验是针对汇编语言的学习和实践,在实验中,我们将学习如何使用汇编语言编写程序、调试程序,并通过一系列实例来练习和巩固所学知识。

2. 实验目的
(这一部分可以根据实际情况来写,列举实验的具体目的和要求)
3. 实验环境及工具
(介绍实验所使用的软件环境和工具,如:编译器、调试器)
4. 实验步骤
(根据实验内容具体描述实验步骤,可以分为多个小节)
4.1 准备工作
在开始实验之前,需要进行一些准备工作,包括安装编译器、创建工作环境等。

4.2 实验一:简单的汇编程序
本实验通过编写一个简单的汇编程序来熟悉汇编语言的基本语法和指令集,包括数据传送、算术运算、逻辑运算等。

4.3 实验二:汇编程序的调试
在实验二中,我们将学习如何使用调试器对汇编程序进行调试,包括设置断点、查看变量值、单步执行等操作。

4.4 实验三:汇编程序的优化
本实验将通过优化代码来提高程序的执行效率,包括减少指令的使用、优化循环结构等。

5. 实验结果与分析
(对实验的结果进行总结和分析,可以包括程序的输出结果、性能分析等)
6. 实验总结
(针对本次实验的收获和心得体会进行总结,可以包括对汇编语言的理解、解决问题的思路等)
7. 实验感想
(对本次实验的感想和建议,如实验过程中遇到的困难、改进的方向等)
8. 参考文献
(列出本报告中所引用的参考文献)
注:该文章只是按照题目提示给出了一个大致的框架和构思,实际根据具体的实验内容和要求来编写每个小节的详细内容。

希望对你有所帮助!。

《汇编语言程序设计》实验报告二n

《汇编语言程序设计》实验报告二n

实验报告课程名称汇编语言程序设计实验项目实验二、分支与循环程序结构和设计实验仪器微机系统、汇编调试环境系别专业班级/学号学生姓名实验日期成绩指导教师宋平实验二分支与循环程序结构和设计一、实验目的1.学习汇编程序设计的基本方法,掌握用汇编语言设计、编写、调试和运行程序的方法;2.熟悉汇编语言源程序的编辑和汇编、目标模块的连接以及可执行程序的调试;3.熟悉、掌握顺序结构、分支结构、循环结构程序设计和调试。

二、实验要求1.Windows操作系统并具有命令提示符操作界面的计算机,且系统内安装有汇编语言编程环境;2.在开始本实验之前,复习教科书的相关内容,并预先写出相应的源程序;3.通过汇编IDE上机调试,注意观察,并记录下现象;4.学会顺序结构程序设计、分支结构程序设计、循环结构程序设计;5.通过本实验掌握汇编语言程序调试的具体步骤;6.通过查看存储单元和寄存器的内容掌握程序的运行结果。

三、实验内容1.编辑源文件【使用文本编辑器编辑具有下列功能源文件,并将该文件存入一指定的“实验文件夹”(如D:\4123\4123-2\4123-2-1.asm),分别编辑要求的源程序(共三个功能文件,涵盖顺序、分支、循环等基本程序结构)。

】2. 汇编源文件、连接目标文件,生成可执行文件操作步骤如下:(1)建立独立的实验文件夹【将源程序文件、汇编和连接工具程序(MASM.EXE、LINK.EXE)复制到同一实验文件夹】(2)TPC-USB集成开发环境【参阅“TPC-USB学生实验指导书.pdf”文档第21页开始处的说明】(3)汇编与连接操作【参阅“TPC-USB学生实验指导书.pdf”文档第21页开始处的说明当汇编和连接后出现错误提示时,请按提示位置和信息修改后保存,并重新执行汇编和连接,直至没有严重错误。

】3. 调试【参阅“TPC-USB学生实验指导书.pdf”文档用TPC-USB集成开发环境中的编译连接、启动调试/执行、单步执行、跳过、连续执行等命令调试程序,观察指令执行过程中各语句执行后的状况及程序运行结果。

汇编语言程序设计实验报告二

汇编语言程序设计实验报告二

汇编语言程序设计实验报告(二)一、实验目的1)加深对循环结构的理解。

2)掌握循环程序的设计方法。

3)学习子程序的定义和调用方法。

4)掌握子程序、子程序的嵌套、递归子程序的结构。

5)掌握子程序设计、编制及调试。

6)熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。

二、实验内容1)编制在屏幕上显示九九乘法表的程序。

2)编制在屏幕上显示用*组成的三角形的程序。

三、实验结果(1)(2)四、源代码(1)DA TA SEGMENTM DB 31H,32H,33H,34H,35H,36H,37H,38H,39H DA TA ENDSSTACK1 SEGMENT STACKDW 20H DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACK1 START:MOV AX,DA TAMOV DS,AXMOV CX,9MOV DI,OFFSET MLOP1:PUSH CXMOV CX,[DI]AND CX,0FHMOV SI,OFFSET M LOP2:MOV AL,[SI]MOV DL,ALMOV AH,2INT 21HAND AL,0FHMOV BH,ALMOV DL,'*'MOV AH,2INT 21HMOV BL,[DI]MOV DL,BLMOV AH,2INT 21HMOV DL,'='MOV AH,2INT 21HAND BL,0FHMOV AL,BHMOV AH,0MOV DL,10DIV DLMOV BL,AHCMP AL,0JE NEXTMOV DL,ALADD DL,30HMOV AH,2INT 21H NEXT:MOV DL,BLADD DL,30HMOV AH,2INT 21HMOV DL,' 'MOV AH,2INT 21HINC SILOOP LOP2MOV DL,0AHMOV AH,2MOV DL,0DHINT 21HINC DIPOP CXLOOP LOP1MOV AH,4CHINT 21HCODE ENDSEND START(2)STACK1 SEGMENT STACKDW 20H DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK1 BEGIN:MOV AH,1INT 21HMOV BL,ALSUB BL,30HMOV DL,0AHINT 21HMOV DL,0DHMOV AH,2INT 21HMOV BH,0MOV CX,BXMOV BX,1L1: PUSH CXMOV CX,BX L2: MOV DL,'*'MOV AH,2INT 21HLOOP L2MOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HADD BX,1POP CXMOV AH,4CHINT 21HCODE ENDSEND BEGIN五、实验心得这是第二次做汇编实验,首先,心理上已经没有了第一次做实验的那种茫然,知道了想要编写一个完整的程序,应当先将这一个大问题分解成若干个小的问题,找出每一个小问题所对应的解决方法,然后用代码一步一步实现,再将这一个一个的小问题串联起来,找到它们的契合点,用联系把它们组成一个完整的程序,其中最常用的就是转移指令和循环。

汇编语言程序设计实验报告

汇编语言程序设计实验报告

汇编语言程序设计实验报告汇编语言程序设计实验报告一、实验目的:(1)熟悉汇编语言运行环境和方法;(2)了解如何使用汇编语言编制程序;(3)熟悉DEBUG有关命令的使用方法;(4)利用DEBUG掌握有关指令的功能;(5)利用DEBUG 运行简单的程序段。

二、实验内容:1.学会输入,编辑汇编语言程序;2.学会习汇编语言程序进行汇编,连接和运行;3.进入和退出DEBUG程序;4.学会DEBUG中的D命令,E命令,R命令,T命令,A命令,G命令等的使用。

对于U命令,N命令,W命令等,也应试一下。

三、实验准备:1.仔细阅读有关汇编语言环境的内容,实现准备好使用的例子。

2.准备好源程序的清单,设计好调试的步骤,测试方法,对运行结果额分析。

3.编写一个程序:比较两个字符串所含的字符是否相同,若相同则显示’Match’。

否则显示’No match!’。

4.仔细阅读有关DEBUG命令的有关内容,对有关命令,都要事先准备好使用的例子。

四、实验步骤:1.在DOS提示下进入MASM目录。

2.在MASM目录下启动EDIT编辑程序,输入源程序,对其进行汇编,链接和运行。

(1)调用edit输入,编辑源程序并保存在指定目录中。

例: Edit abc.asin(2)用汇编程序masin对源程序汇编产生目标文件obj;例:不断修改错误,直至汇编通过为止。

(3)用连接程序link产生执行文件exe。

例:link abc(4)执行程序:可直接从DOS执行程序,即在DOS环境中,输入文件名即可。

3.详细记录每一步所用的命令,以及查看结果的方法和具体结果。

五、实验方法:比较字符串sle。

试编写一个程序:比较字符串string1和string2所含的字符是否相同。

若相同则显示’match ‘,否则则显示’No match’可以用串比较指令来完成程序所有要求的功能。

上机过程:1.调用字处理程序wordstar建立asm文件。

使用非文本文件方式(n命令)建立以sle.asm为文件名的源文件如下,然后用CTRLKX命令存入磁盘,并使用系统返回DOS。

汇编语言实验报告二

汇编语言实验报告二

汇编语言实验报告)(实验二实验二)一.实验目的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命令检查键入的程序及对应的机器码。

(完整版)汇编语言实验报告5574277

(完整版)汇编语言实验报告5574277

合肥工业大学计算机与信息学院实验报告课程:汇编语言程序设计专业班级:学号:姓名:实验一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 PLZR AC PE CY13B3:012D 0000ADD [BX+SI],AL DS:021C=00-四.实验结果1.利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。

汇编语言程序设计实验报告

汇编语言程序设计实验报告
2.掌握汇编语言源程序的执行过程。
二、实验内容
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文件的编程方法及特点;

实验报告二汇编语言程序设计

实验报告二汇编语言程序设计
2)、按下图所示设计彩色用户界面,颜色自选
PASSWORD:
PASSWORD:
3)、使用DOS系统的单字符输入子功能,配合循环程序接收用户键入的字符串
4)、为了保密,用户键入的字符串不应当如实地回显在屏幕上,为了真正起到通行字的作用,程序在接收键入的过程中,不应当响应Ctrl+C
3、程序设计
设计数据段有20个学生的单科成绩(百分制),编程计算并显示
3、程序设计
四、通行字识别
1、试验目的
学习串操作指令的应用、DOS功能调用与文本方式下的彩色字符串显示以及宏指令调用。
2、试验要求
1)、程序执行后,给出简单明了的操作提示,请用户给出“通行字”,只有当用户键入的字符串和程序内定的字符串相同时,程序才能返回DOS.
3、程序设计
二、BCD码数转换成二进制数显示
1、试验目的
学习BCD码数转换成二进制数以及子程序调数,要求采用子程序调用的方法,将他们转换成二进制数,并显示在屏幕上
3、程序设计
三、计算平均成绩
1、试验目的
学习二进制数转换成十进制数的编程方法
2、试验要求
实验报告二:汇编语言程序设计
班级:姓名:
一、统计负数的个数
1、试验目的
复习有符号数的表示与鉴别,学习循环程序与子程序调用的编程方法,掌握二进制数转换成十六进制数的编程方法
2、试验要求
设数据段有8个有符号数,设计一个程序(不是两个程序)完成两项要求:
1)、统计并显示负数的个数
2)、找出真值最大的数,并以十六进制的形式,显示在屏幕上

汇编语言实验报告2 - 寻址方式的综合应用及转移指令的原理

汇编语言实验报告2 - 寻址方式的综合应用及转移指令的原理

一、实验目的1.定位内存单元的寻址方式汇总2.寻址方式的综合应用3.转移指令的分类和原理4.熟悉在显存中编程的方法二、实验内容及要求(一)寻址方式的汇总及综合应用1. 定位内存单元的寻址方式有几种,并举例说明。

2. 寻址方式在结构化数据访问中的应用。

Power idea公司从1975年成立一直到1995年的基本情况如下。

年份收入(千美元) 雇员人均收入(千美元) 1975 16 3 ?1976 22 7 ?1977 382 9 ?1978 1356 13 ?1979 2390 28 ?1980 8000 38 ?M1995 5937000 17800 ?下面的程序中,已经定义好了这些数据:assume cs:codesgdata segmentdb '1975','1976','1977','1978','1979','1980','1981','1982','1983'db '1984','1985','1986','1987','1988','1989','1990','1991','1992'db '1993','1994','1995';年份dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ;公司总收入dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 dw 11542,14430,15257,17800;公司雇员人数data endstable segmentdb 21 dup('year summ ne ??')table ends编程,将data段中的数据按如下格式写入到table段中,并计算21年中的人均收入(取整),结果也按照下面的格式保存在table段中。

汇编语言程序设计实验报告

汇编语言程序设计实验报告

汇编语言程序设计实验报告汇编语言程序设计实验报告引言:汇编语言是一种底层的计算机语言,通过直接操作计算机的硬件和寄存器来实现程序的功能。

在本次实验中,我们学习了汇编语言的基本语法和编程技巧,并通过实践编写了一些简单的程序。

本报告将对实验过程和结果进行总结和分析。

一、实验目的本次实验的主要目的是让我们掌握汇编语言的基本语法和操作方式,培养我们对计算机底层运行机制的理解能力。

通过编写汇编程序,我们可以更深入地了解计算机的运行原理,并且可以更加高效地编写一些底层程序。

二、实验环境本次实验使用的是Windows操作系统,并且我们使用了MASM汇编器来编译和运行我们的汇编程序。

MASM是一款经典的汇编语言开发工具,具有强大的功能和广泛的应用领域。

三、实验内容在本次实验中,我们完成了以下几个任务:1. 编写一个简单的汇编程序,实现两个数字的相加功能。

2. 编写一个汇编程序,实现对一个字符串进行反转。

3. 编写一个汇编程序,实现对一个数组进行排序。

四、实验步骤1. 首先,我们学习了汇编语言的基本语法和指令集。

了解了汇编语言中的寄存器、指令和内存等概念,并且学会了如何使用它们来编写程序。

2. 接着,我们开始编写第一个程序,实现两个数字的相加功能。

通过学习汇编语言中的加法指令,我们可以将两个数字加载到寄存器中,并且使用相应的指令进行相加操作。

3. 然后,我们编写了第二个程序,实现对一个字符串进行反转。

通过学习汇编语言中的循环和条件判断指令,我们可以逐个字符地读取字符串,并且将它们按照相反的顺序存储到新的内存空间中。

4. 最后,我们编写了第三个程序,实现对一个数组进行排序。

通过学习汇编语言中的比较和交换指令,我们可以对数组中的元素进行排序,并且将排序结果存储到新的内存空间中。

五、实验结果通过以上的实验步骤,我们成功地完成了编写汇编程序的任务,并且得到了正确的结果。

我们的程序可以实现两个数字的相加、字符串的反转和数组的排序功能,并且运行速度较快,效果较好。

汇编语言编程实验报告

汇编语言编程实验报告

汇编语言编程实验报告汇编语言程序设计实验报告(一)汇编语言程序设计实验报告(一)一、预备知识汇编语言程序设计是一门实践性很强的课程。

编写程序、上机调试、运行程序是进一步学习和掌握汇编语言程序设计的必要手段。

二、实验目的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文件只是个文本文件,计算机无法执行。

汇编实验报告2

汇编实验报告2

篇一:汇编实验报告2汇编语言与接口课程实验报告实验名称循环与分支程序设计实验室名称班级________________软件93_______________ 学号_______________09161059_______________ 实验日期年月日评分教师实验报告成绩__________ 评分日期________年_______月________日一、二、实验目的实验环境实验内容熟悉汇编语言上机环境masm以及上机过程,学会设计循环与分支程序;掌握基本的输入输出及debug调试。

编程环境:masm for windows 集成实验环境 2011 三、预习:了解循环程序的结构形式,掌握do_while结构和do_until结构学会设置循环的初始状态、循环体和循环控制部分,掌握loop等指令了解分支程序的结构形式,掌握一般的控制转移指令及跳跃表法实验题目:1. 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来2. 试编制一个汇编语言程序,求出首地址为data的100d字数组中的最小偶数,并把它存放在ax中3. 试编写一汇编语言程序,要求从键盘接收一个4位的十六进制数,并在终端上显示与它等值的二进制数实验步骤:实验一主要步骤:从键盘接收一个字符,判断是否为’0’,若是则退出;否则判断该字符是否介于’a’和’z’之间,若是输出空格,并给该字符减去20h后输出,再输出回车换行进行下一次操作,否则直接回车换行进行下次操作。

实验二主要步骤:循环初始设置,将最大的奇数ffff赋给ax(无符号),bx设为0(采用寄存器相对寻址法),cx设为100,循环100次;从数组读取一个字到dx中,test若最后一位为1则进行下次循环,否则与ax进行比较,如果小则交换,否则进行下次循环实验三主要步骤:循环四次从键盘接收四个字符并将其存放到一个数组中,每次判断如果字符为’q’,则退出,介于’0’到’9‘之间,减去30h,介于’a’到‘f’之间减去37h;然后对每个字节分别向右移动3、2、1、0位,与0x01相与后输出四、源程序清单、测试数据、运行结果实验一(1) 源程序清单start:mov ax,datasmov ds,ax;此处输入代码段代码 next:mov ah,01h int 21h cmp al,0 jz exit cmp al,a jl next1 cmp al,z jg next1 mov bl,al mov dl,20h mov ah,02h int 21hsub bl,20h mov dl,bl mov ah,02h int 21h next1:mov dl,0ah mov ah,02h int 21hmov dl,0dh mov ah,02h int 21h jmp next exit:mov ah,4chint 21h(2) 运行结果:实验二(1) 源程序清单: start:mov ax,datas mov ds,ax;此处输入代码段代码 mov ax,0ffffh mov cx,100 movbx,0loop1:mov dx,data[bx] test dx,0001h jnz next cmp dx,ax jge next mov ax,dx next:add bx,2 loop loop1 mov ah,4chint 21h(2) debug调试:实验三(1)源程序清单 start:movax,datas篇二:汇编第2次上机实验报告汇编语言上机实验报告时间: 2013-4-19,19:00-21:30 地点:南一楼803室实验人员:王涛实验一一、题目从键盘输入两串字符分别存入buf1和buf2区,比较两串内容是否相等,相等显示“match !”, 不相等显示“no match !”。

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

汇编语言程序设计实验教程第二章实验报告实验2.1用表格形式显示字符1.题目:用表格形式显示ASCII字符SMASCII2.实验要求:按15行*16列的表格形式显示ASCII码为10H-100H的所有字符,即以行为主的顺序及ASCII码递增的次序依次显示对应的字符。

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

3.提示:(1)显示每个字符可使用功能号为02的显示输出功能调用,使用方法如下:mov ah,02hmov dl,输出字符的ASCII码int 21h(2)显示空白符时,用其ASCII码0置入dl寄存器。

每行结束时,用显示回车(ASCII 为0dh)和换行符(ASCII为0ah)来结束本行并开始下一行。

(3)由于逐个显示相继的ASCII字符时,需要保存并不断修改dl寄存器的内容,而显示空白、回车、换行符时也需要使用dl寄存器,为此可使用堆栈来保存相继的ASCII字符。

具体做法是:在显示空白或回车、换行符前用指令push dx把dl的内容保存到堆栈中去。

在显示空白或回车、换行符后用指令pop dx恢复dl寄存器的原始内容。

4.程序清单:code segmentassume cs:codestart:mov dx,0010hnext:mov cx,10hloop1:mov ah,02hint 21hinc dxpush dxint 21hpop dxloop loop1push dxmov dl,0ahint 21hmov dl,0dhint 21hpop dxcmp dx,100hjb nextmov ah,4chint 21hcode endsend start5.运行结果如下:6.实验总结:通过本次实验我深刻的知道用汇编语言编译程序的方法,掌握了如何合理的利用各个寄存器进行程序的控制操作,初步了解到循环程序的控制方法,以及dos中断调用的基本要领对学习汇编语言有了非常好的帮助作用!汇编语言实验二查找匹配字符串一、目的查找匹配字符串SEARCH程序接收用户键入的一个关键字以及一个句子。

如果句子中不包含关键字则显示‘NO match!’;如果句子中包含关键字则显示‘MATCH’,且把该字在句子中的位置用十六进制数显示出来。

流程图三、设计和编码DATA SEGMENTmess1 DB 'Enter keyword:','$' mess2 DB 'Enter Sentence:','$'mess3 DB 'Match at location:','$'mess4 DB 'NOT MATCH.',13,10,'$'mess5 DB 'H if the sentence',13,10,'$'change DB 13,10,'$'stoknin1 label bytemax1 db 10act1 db ?stokn1 db 10 dup(?)stoknin2 label bytemax2 db 50act2 db ?stokn2 db 50 dup(?)DATA ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODE SEGMENT;*************************************代码段main proc farassume cs:code,ds:data,es:dataSTART:push dssub AX,AXsub BX,BXsub DI,DIsub SI,SIpush AX ;为返回dos并清空后面要用到的寄存器MOV AX,DATAMOV DS,AXLEA DX,mess1MOV ah,09INT 21h ;输出Enter keywordLEA DX,stoknin1MOV ah,0ah ;用21号中段的0ah号功能获取关键字INT 21hcmp act1,0je exit ;如果为空直接退出程序a10:;********************************输入Sentence并判断LEA DX,changeMOV ah,09INT 21h ;输出回程,换行LEA DX,mess2MOV ah,09INT 21h ;输出Enter Sentence:LEA DX,stoknin2MOV ah,0ahINT 21h ;用21号中段的0ah号功能获取句子MOV AL,act1CBWMOV CX,AX ;保存关键字长度到cxPUSH CX ;cx入栈MOV AL,act2cmp AL,0je a50 ;保存句子长度到al,若句子为空则跳转显示not matchSUB AL,act1js a50 ;若句子长度小于关键字长度,则跳转显示not matchINC ALCBWLEA BX,stokn2 ;将句子的首地址放进BXMOV DI,0MOV SI,0a20:;****************************************比较,内循环MOV AH,[BX+DI]CMP AH,stokn1[SI] ;遇见字符不相等就跳转到a30jne a30INC DIINC SIDEC CX ;没遇到一个相等的字符,cx-1,cx不为0则比较下一个字符,当cx为0是说明关键字比较完CMP CX,0je a40jmp a20a30:;*****************************************外循环,BX+1,清空si,di继续内循环比较INC BXDEC ALcmp AL,0je a50MOV DI,0MOV SI,0POP CXpush CXjmp a20a40:;*****************************************match,将bx减去句子的首地址加一得到关键字所在位置,调用二进制转十六进制子函数将位置输出SUB BX,offset stokn2INC BXLEA DX,changeMOV ah,09INT 21hLEA DX,mess3MOV ah,09INT 21hCALL btohLEA DX,mess5MOV ah,09INT 21hjmp a10;****************************************二进制转换十六进制btoh PROC NEARMOV CH,4rotate: MOV CL,4ROL BX,CLMOV AL,BLand AL,0fhadd AL,30hcmp al,3ahjl printitadd al,7hprintit:MOV dl,alMOV ah,2int 21hdec chjnz rotateretbtoh endpa50:;*****************************************显示not matchLEA DX,changeMOV ah,09INT 21hLEA DX,mess4MOV ah,09INT 21hjmp a10exit:retmain endpCODE ENDSEND START四、运行结果及分析五、实验小结六、附录(选)实验2.4查找电话号码一、实验目的与要求学习用汇编语言设计与编写子程序。

题目:查找电话号码phone二、实验内容(1) 要求程序建立一个可存放50项的电话号码表,每项包括人名(20个字符)及电话号码(8个字符)两部分;(2) 程序可接收输入人名及相应的电话号码,并把它们加入电话号码表中;(3) 凡有新的输入后,程序应按人名对电话号码表重新排序;(4) 程序可接收需要查找电话号码的人名,并从电话号码表中查出其电话号码,再在屏幕上以如下格式显示出来。

name tel.X X X X X X X X三、实验步骤1.设计分析1)根据题目要求必须要定义的空间:✧可存50个联系人的号码表✧姓名缓冲区✧号码缓冲区✧各种提示字符串2)为操作方便,多定义以下空间:✧tab_len用来记录联系人数目✧endaddr 用来记录最后一个联系人的地址+28✧temp 一个联系人记录的大小,用于排序时的缓存数据2.程序执行流程图3.模块层次图4.模块说明四、实验总结与体会。

先画好程序框图和模块调用图,并在编码中不断修改完善,对把握程序的整体结构很有帮助。

把模块设计成子程序在主程序调用,分解了整个程序功能,降低了设计的难度,同时方便调试和修改。

程序中添加适当的辅助变量,可以简化操作,如本程序设表长tab_len 和endaddr(电话表最后一个基址)方便排序、插入等操作。

程序需要良好的人机交互,应该有各种操作提示和警告信息。

程序中输入输出等要有容错处理,要能对各种可能情况作出反应。

使用跳转指令时应注意跳转是否超出范围,Jmp指令能够实现无条件远转移,但je,jb等条件转移指令只能段内短转移,如有需要可以跳转到一个地方再用jmp跳转。

使用循环结构时不要忘记了结束条件,导致死循环。

因为汇编接近机器语言,直接对内存操作,所以脑中要有内存单元,单元地址等的清晰概念和形象,对数据在内存中表示、各种寻址方式、各寄存器的用途、用法都应该相当熟悉。

汇编语言没有像其他高级语言的数据类型的概念,数据都是以二进制存储。

通过这个综合设计,对寄存器的默认组合、使用,常用指令,各种寻址方式基本能够熟练运用。

个人感觉汇编与其他高级语言的操作上的区别:汇编语言把每一步操作都细化。

所以写起来比较麻烦些,但只有想不到,没有做不到的,只要想的出来的,汇编应该都可以写出来。

程序调试主要是用debug。

Debug是个十分好用的工具,通过设置断点,可以调试任意程序任意部分,通过单步执行可以十分清楚各寄存器和地址单元的变化来找出错误。

五、源程序data segmenttel_tab db 50 dup( 28 dup(' ')) ; tel_tab电话本空间tab_len dw 0 ; 已存联系人数目endaddr dw 0 ; 最后一个联系人的地址+28 tname db 21,?,20 dup(' '),? ; 姓名缓冲区tphone db 9,?,8 dup(' '),? ; 号码缓冲区temp db 28 dup(?) ; 一个联系人的临时空间iname db 13,10,'Input name:',13,10,'$'iphone db 13,10,'Input a telephone number:',13,10,'$'go_on db 13,10,'Continue insert? <Y/N>',13,10,'$'; 提示是否继续插入联系人sname db 13,10,'Name?',13,10,'$'name_e db 13,10,13,10,'The name has been in the table! Please input again!',13,10,'$' text2 db 13,10,'Name Tel. ',13,10,'$'text3 db 13,10,'The name is not in the telephone table!',13,10,'$'text4 db 13,10,13,10,'Do you want a telephone number? <Y/N>',13,10,'$'data endscode segment; ****************************************************************************; 主程序; -------------------------------------------------------------------------------------main proc farassume cs:code ,ds:data,es:datastart:push ds ; 保存旧数据用于返回sub ax,axpush axmov ax,data ; 数据段、附加段初始化mov es,axinname: lea dx,iname ; 提示输入姓名mov ah,09hint 21hcall input_name ; 调用读入姓名子程序call name_search ; 调用查找子程序,cmp bx,-1 ; 如表中不存在该联系人je stor ; 则跳转到storcall crlf ; 回车换行lea dx,name_e ; 否则提示该联系人已在表中,提示重新输入mov ah,09hint 21hjmp innamestor: call stor_name ; 调用姓名转存子程序,把姓名移动到表中lea dx,iphone ; 提示输入电话号码mov ah,09hint 21hcall inphone ; 调用读入号码子程序call name_sort ; 排序call crlflea dx,go_on ; 提示是否继续插入mov ah,09hint 21hchoice1: mov ah,07 ; 读取用户选择int 21hcmp al,'y'je innamecmp al,'Y'je innamecmp al,'n'je print_all ; 如选择不插入,则显示所有记录cmp al,'N'je print_alljmp choice1print_all: call printall ; 显示所有记录want_search: call crlflea dx,text4 ; 提示是否查找号码int 21hcall crlfchoice2: mov ah,07 ; 读取用户选择int 21hcmp al,'y'je search ; 如果为y或Y则跳转到查找searchcmp al,'Y'je searchcmp al,'n' ; 为n或N则退出程序je exit_mcmp al,'N'je exit_mjmp choice2search: lea dx,sname ; 提示用户输入要查找的姓名mov ah,09int 21hcall input_name ; 读入姓名call name_search ; 查找call crlfcall crlfcmp bx,-1 ; 是否查找到?je not_find ; (bx)=1 则跳转到未找到not_findlea dx,text2 ; 找到则输出'Name Tel. 'mov ah,09int 21hcall printline ; 显示查找到的联系人jmp want_search ; 跳转到提示查找not_find: ; 未找到call crlflea dx,text3 ;输出'The name is not in the telephone table!'mov ah,09hint 21hjmp want_searchexit_m: retprintall proc near;**************************************************************************;显示所有电话。

相关文档
最新文档