汇编实验报告..

合集下载

汇编语言实验7实验报告

汇编语言实验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. 字符串拼接程序首先,需要从键盘输入两个字符串。

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

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

汇编语言程序设计实验报告二(分支循环程序实验)一、实验目的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。

《汇编语言》实验报告

《汇编语言》实验报告

《汇编语言》实验报告实验名称:汇编语言实验报告实验目的:通过实验了解汇编语言的基本概念、语法结构和程序设计方法,掌握汇编语言的编写方法。

实验时间:2024年1月1日实验地点:实验室一、实验背景汇编语言是计算机硬件和软件之间的桥梁,通过汇编语言可以直接操作计算机的底层硬件。

汇编语言是一种低级语言,使用汇编语言可以实现对计算机内存、寄存器等硬件资源的直接操作,从而实现程序的功能。

本实验通过编写汇编语言程序,加深对汇编语言的理解。

二、实验过程1. 确定实验环境:使用DOSBox模拟DOS环境进行汇编程序编写和调试。

2. 编写第一个汇编程序:编写一个简单的汇编程序,将字符串“Hello, World!”输出到屏幕上。

3.程序分析:a.定义要输出的字符串,将字符串存储在数据段中。

b.设置段寄存器,将数据段地址加载到DS寄存器中。

c.设置显示模式和光标位置。

d.将字符串逐个字符输出到屏幕上。

e.关闭显示模式。

4. 编译运行:使用汇编语言的编译器将汇编程序转换成机器码,并在DOSBox中运行程序。

5.调试程序:根据程序运行结果和分析,调试程序中存在的错误,并进行改正。

三、实验结果与分析经过多次编写和调试,我们成功实现了将字符串“Hello, World!”输出到屏幕上的功能。

通过程序分析和调试过程,加深了对汇编语言的理解和掌握。

四、实验总结通过本次实验,我们深入了解了汇编语言的基本概念、语法结构和程序设计方法。

通过实际编写汇编语言程序,对汇编语言的编写方法有了更加深入的认识。

同时,通过调试程序的过程,我们也提高了自身的问题解决能力和分析能力。

在今后的学习和工作中,我们将继续学习和深入研究汇编语言,提高自己的编程能力和创新思维能力。

总体而言,本次实验给我们带来了很大的收获,我们以后将更加努力地学习汇编语言,提高自己的编程水平,为以后的学习和工作做好充分的准备。

实验二:监控程序与汇编实验报告

实验二:监控程序与汇编实验报告

实验二:监控程序与汇编实验报告一、实验目的本次实验的主要目的是深入了解监控程序的工作原理和汇编语言的编程方法,通过实际操作和编程实践,提高对计算机底层工作机制的理解和掌握能力。

二、实验环境1、操作系统:Windows 102、编程工具:MASM 汇编编译器3、调试工具:DEBUG 调试器三、实验内容1、监控程序的基本原理监控程序是一种系统软件,它负责管理计算机系统的资源,如内存、处理器、输入输出设备等。

监控程序提供了一系列的服务和功能,如任务调度、内存管理、中断处理等,以确保计算机系统的正常运行。

2、汇编语言的基础知识汇编语言是一种低级编程语言,它直接操作计算机的硬件资源,如寄存器、内存地址等。

学习了汇编语言的指令格式、寻址方式、数据类型等基础知识。

3、简单的汇编程序编写与调试使用汇编语言编写了一些简单的程序,如加法运算、数据存储与读取等。

通过 DEBUG 调试器对编写的程序进行调试,查看寄存器和内存的状态,分析程序的执行过程和结果。

四、实验步骤1、安装和配置实验环境下载并安装 MASM 汇编编译器和 DEBUG 调试器。

配置环境变量,以便在命令行中能够方便地使用这些工具。

2、学习监控程序的原理通过阅读相关的教材和资料,了解监控程序的功能和工作流程。

分析监控程序在计算机系统中的作用和地位。

3、学习汇编语言的基础知识掌握汇编语言的指令集和语法规则。

练习不同的寻址方式和数据类型的使用。

4、编写简单的汇编程序使用文本编辑器编写汇编程序代码。

保存为asm 文件。

5、编译和链接汇编程序在命令行中使用 MASM 编译器对asm 文件进行编译,生成obj 文件。

使用 LINK 链接器将obj 文件链接为可执行文件exe。

6、调试汇编程序启动 DEBUG 调试器,加载可执行文件。

使用调试命令查看寄存器、内存的内容,单步执行程序,观察程序的执行过程和结果。

五、实验结果与分析1、加法运算程序编写了一个实现两个数相加的汇编程序。

汇编实验一实验报告

汇编实验一实验报告

汇编语言程序设计实验报告课程名称汇编语言程序设计班级姓名学号指导教师汇编语言程序设计实验一DEBUG 程序使用技巧1.寄存器和内存开始Debug 程序。

输入“Q ” 退出程序。

再次启动Debug。

输入“r ”来显示CPU的当前状态和寄存器中的当前内容。

输入“r AX ”和“1234”,AX 寄存器中的内容变为1234。

输入“r DS ”和“2000”,DS 寄存器中的内容变为2000。

输入“d DS:1000 ”来显示数据段中80H 字节数据,把数据抄在这里:输入“f DS:1000 1100 77 ”再显示一次这80H 字节。

判断这条指令的作用是什么?答:从DS:1000地址七,将1100H字节的内容赋值为77H再输入“d 2000:1000 ”来显示数据段中80H 字节数据。

观察与前面的数据有无不同。

输入“d 1900:0100 ”和“d 1ff0:0100 ”来显示两个存储段中的内容。

比较其中2000:0000 段中的数据。

相同段落中的数据相同么?根据你的观察,得出结论,是否程序员可以用不同的段起始地址和偏移量组合,把不容内容存入相同的内存段中。

答:相同段落中的数据相同, 程序员可以用不同的段起始地址和偏移量组合,把不容内容存入相同的内存段中。

2.输入机器码,使用单步和断点退出Debug,再重新启动Debug。

输入“r ”观察CPU 的状态,下一条指令是什么?答:下一条指令是ADD [BX+SI],AL使用两种方式输入一段程序,第一种方式:直接输入机器码。

输入“u ”来显示程序段中的指令序列。

然后输入“d CS:100 ” 来显示代码段中的数据。

观察显示内容。

“u CS:100 106 ”做反汇编,就是显示出汇编语句。

将这几句汇编语句记录下来:使用输入“r ”观察CPU 的状态,使用“t ”来跟踪程序,直至最后一条指令执行完毕。

注意,跟踪程序前,要让IP 寄存器中的值是100H。

一直监视AX 和IP 寄存器的内容变化,尤其是标志位的变化。

汇编语言程序设计上机实验报告(实验三)-循环程序设计

汇编语言程序设计上机实验报告(实验三)-循环程序设计

汇编语言程序设计上机实验报告(实验三)一、实验题目、内容及要求:一、实验题目、内容及要求:题目:循环程序设计内容:编写一程序,要求从键盘接收一个4位十六进制数,在终端上显示与它等值的二进制数。

二进制数。

要求:实验前要作好充分准备,包括程序清单、调试步骤、调试方法,对程序结果的分析等。

本实验要求在EDIT 下编写完整的汇编语言程并生成可执行文件运行。

下编写完整的汇编语言程并生成可执行文件运行。

二、实验时间及地点二、实验时间及地点日期:日期: 2011/11/21 节次:节次: 7.8 地点:地点:电子实验楼二楼电子机房电子实验楼二楼电子机房 三、实验目的三、实验目的通过本实验掌握DOS 系统功能调用功能,掌握循环程序设计的方法;学会编写循环结构程序。

构程序。

简述在实验过程中遇到的问题和解决的方法:简述在实验过程中遇到的问题和解决的方法:1、问题:遇到死循环解决方法:程序显示disp 中发现执行int int 21h 21h 会修改al 的值,避免这种情况的方法就是使用堆栈段。

2、问题:调试中出现no data segment 解决方法:start 开始时没有将数据段的IP 地址赋给dx 。

data segment 3、问题:可执行,结果为乱码解决方法:数据划分比较的粗,没有系统的将数据系统划分。

系统划分:<30h other 30h-39h num 39h-41h other 41h-46h big zi mu 46h-61h other 61h-67h small zi mu >67h other 运行结果:(要求用“抓图软件”抓程序的运行结果)(要求用“抓图软件”抓程序的运行结果)结果分析及实验体会:结果分析及实验体会:1、结果0001001000110100是十六进制数1234转化而来。

十六进制数通过ASCII码对照转换为二进制数。

A~F----- -57hA~ f----- -57h0~9 ------ -37h2、学习应用了循环指令并了解了其特点:A、循环指令不影响标志位B、其功能为使寄存器CX的值减1,如果结果不等于0,则循环至标号,否则顺序执行。

汇编语言实验报告_6

汇编语言实验报告_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)冒泡排序也遇到一些困难。

调试结果:。

汇编语言实验报告

汇编语言实验报告

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

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

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

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

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

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

希望对你有所帮助!。

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

合肥工业大学计算机与信息学院实验报告课程:汇编语言程序设计专业班级:学号:姓名:实验一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、启动DOS操作系统2、运行程序(若当前盘为C)C:>DEBUG↙– ;(“–”为DEBUG提示符,仅当屏幕出现该提示符后,才可输入DEBUG命令)3、用“A”命令编辑和汇编源程序–A ↙186E:0100 MOV AX,[0200]↙186E:0103 MOV BX,[0202]↙186E:0107 ADD AX,[0204]↙186E:010B ADC BX,[0206]↙186E:010F MOV [0208],AX↙186E:0112 MOV [020A],BX↙186E:0116 ↙4、用“U”命令反汇编验证源程序–U CS:0100↙186E:0100 A10002 MOV AX,[0200]186E:0103 8B1E0202 MOV BX,[0202]186E:0107 03060402 ADD AX,[0204]186E:010B 131E0602 ADC BX,[0206]186E:010F A30802 MOV [0208],AX186E:0112 891E0A02 MOV [020A],BX186E:0116–注意:●检查源程序是否有错误,若有则返回到第3步用“A 地址”命令进行修改,直到程序无错误。

●DEBUG约定在其命令或源程序中所涉及到的数据均被看作十六进制数,其后不用“H”说明。

●在DEBUG下,源程序中不能使用“标号”、“变量”和一些伪指令。

●在DEBUG下,大小写不敏感。

5、程序未执行前,用“R”命令观察,相关寄存器的内容。

–R↙如:(AX)= 0000H ,(BX)=0000H,(SI)= 0000H ,(DI)= 0000H ,(CS)= 0B32H ,(IP)= 0100H 。

6、在程序未执行前,用“D”命令观察DS:0200H,DS:0204H、DS:0208H单元的内容–D 200 20B ↙7、用“G”命令运行源程序–G =110 0116 ↙8、再用“D”命令观察DS:0200H~DS:020BH字节单元中的内容–D 200 20B↙9、用“T”单步操作命令对源程序单步执行,观察AX、BX、CS、IP寄存器内容的变化,并与预计的结果相比较。

注意:●D命令显示内存数据,注意观察多字节数据在内存中的存放方式。

●指令执行的时候,IP寄存器随着变化,注意观察。

1、程序运行结果:(AX)= 00ABH ,(BX)=00ABHDS:0208H四字节单元的内容:00AB00ABH2、试用寄存器间接寻址方式编写程序段,完成上述程序段的功能。

(参考下列程序流程图)3、附加题目:1.从DS:0000H开始的5个16位带符号数分别记为x,y,z,v,w,用E命令初始化为:540,1,-1,1080,0, 试求w=(v-(x*y+z-540))/x2.完成BX中1的个数的统计。

3.用串操作指令将DS:0000开始20个字节初始化为:0CCH。

并将这20个字节的内容复制到其后的20个字节里。

cld四.实验体会通过这次试验,对于debug环境有了一个基本的了解,同时通过对指令的使用而对计算机的数据传送、算术运算、逻辑和移位操作、串操作、控制转移和循环等指令有了更深的理解。

串操作指令是对一个一个字节进行操作的。

实验二汇编语言程序设计(顺序、循环)一.实验目的1、掌握顺序和循环程序结构和设计方法;2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

二.实验内容1、X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。

试编写汇编语言程序完成以下功能:①计算表达式值(V–(X*Y+Z-720))/X;②将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。

dseg segmentx dw 2y dw 360z dw 0v dw 5sum1 dw ?sum2 dw ?dseg endscseg segmentassume cs:cseg,ds:dsegstart:mov ax,dsegmov ds,axmov ax,xmov bx,ymul bxmov bx,zadd ax,bxsub ax,2d0hmov bx,vsub bx,axmov ax,bxcbwmov bx,xdiv bxmov sum1,axmov sum2,dxmov ah,4chint 21hcseg endsend start2、求一个班50名学生成绩的平均值(附加题:最大值和最小值,并将结果显示出来)dseg segmentscore db 10 dup(80,70,60,90,90)avg db ?max db 0dh,0ah,?min db 0dh,0ah,?dseg endscseg segmentassume cs:cseg,ds:dsegstart:mov ax,dsegmov ds,axmov cx,50mov ax,0mov bh,0mov bl,100mov si,0l: add al,score[si]adc ah,0inc siloop ldiv dlmov avg,almov cx,50mov si,0l1: cmp score[si],bhjbe s1mov bh,score[si] s1: inc siloop l1mov cx,50mov si,0l2: cmp score[si],blja s2mov bl,score[si] s2: inc siloop l2mov al,blmov ah,0mov cl,10div clcmp al,0jz gw1cmp al,10jz mf1mov ch,ahadd al,30hmov dl,almov ah,2int 21hadd ch,30hmov dl,chmov ah,2int 21hjmp done1add dl,30hmov ah,2int 21hjmp done1 mf1: mov dl,31hmov ah,2int 21hmov dl,30hmov ah,2int 21hmov dl,30hmov ah,2int 21h done1:mov dl,0dhmov ah,2int 21hmov dl,0ahmov ah,2int 21hmov al,bhmov ah,0mov cl,10div clcmp al,0jz gwcmp al,10jz mfmov ch,ahadd al,30hmov dl,almov ah,2int 21hadd ch,30hmov dl,chmov ah,2int 21hjmp donegw: mov dl,ahadd dl,30hmov ah,2int 21hjmp done mf: mov dl,31hmov ah,2int 21hmov dl,30hmov ah,2int 21hmov dl,30hmov ah,2int 21h done: mov ah,4chint 21h cseg endsend start3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:查找中间是否有‘asm’子串。

如果有,输出‘Yes’;否则,输出‘No’)。

data segments1 db 51,?,51 dup('$')s3 db 0ah,0dh,'Yes$'s4 db 0ah,0dh,'No$'data endsdseg segments2 db 'asm'dseg endscseg segmentassume cs:cseg,ds:data,es:dsegstart:mov ax,datamov ds,axmov ax,dsegmov es,axlea dx,s1mov ah,0ahint 21hmov dl,0dhmov ah,2int 21hmov dl,0ahmov ah,2int 21hlea dx,s1+2mov ah,9int 21hmov cl,s1+1cmp cl,3jb notfoundlea si,s1lea di,s2mov dx,simov bx,dimov ah,48cldagain:mov cx,3repz cmpsbjz foundadd dx,1mov si,dxmov di,bxdec ahjnz againjmp notfoundjmp over found:lea dx,s3mov ah,9int 21hjmp over notfound:lea dx,s4mov ah,9int 21h over:mov ah,4chint 21h cseg endsend start三.实验体会通这次试验,熟悉了MASM汇编环境和汇编程序设计的格式,熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

同时对顺序和循环程序设计更加熟练,并在编程过程中熟悉了算术运算、位操作和串操作等指令。

算术运算中,对于不同类型数进行运算时,要进行扩展,还有不要忽视进位;对于循环和控制转移指令,如果有多个循环或转移指令,则前一个循环或转移结束后,一定到无条件转移到结尾处;串操作指令中,源串和目的串分别定义在DS和ES 两个段中的,不能对ES进行段超越操作等。

实验三汇编语言子程序设计(分支、子程序)一.实验目的1、掌握分支和子程序结构和设计方法;2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

3、通过汇编语言了解高级语言的参数传递等知识。

二.实验内容1、1. BL中的只有一位为1。

编写程序测试,并输出提示信息“The X Bit is 1”,要求:地址表和转移表。

dseg segmenta db 2msg0 db 0dh, 0ah,'The 0 Bit is 1','$'msg1 db 0dh, 0ah,'The 1 Bit is 1','$'msg2 db 0dh, 0ah,'The 2 Bit is 1','$'msg3 db 0dh, 0ah,'The 3 Bit is 1','$'msg4 db 0dh, 0ah,'The 4 Bit is 1','$'msg5 db 0dh, 0ah,'The 5 Bit is 1','$'msg6 db 0dh, 0ah,'The 6 Bit is 1','$'msg7 db 0dh, 0ah,'The 7 Bit is 1','$'addrtb1 dw func0,func1,func2,func3,func4,func5,func6,func7dseg endscseg segmentassume cs:cseg,ds:dsegstart:mov ax,dsegmov ds,axmov cx,8mov si,0mov bl,acmp bl,0jz exitl: shr bl,1jc l1inc siloop ljmp exitl1: mov ax,siand ax,0fhshl ax,1mov bx,axjmp addrtb1[bx] func0:lea dx,msg0jmp output func1:lea dx,msg1jmp output func2:lea dx,msg2jmp output func3:lea dx,msg3jmp output func4:lea dx,msg4jmp output func5:lea dx,msg5jmp output func6:lea dx,msg6jmp output func7:lea dx,msg7jmp output output:mov ah,9int 21hexit: mov ah,4chint 21hcseg endsend startdseg segmenta db 8msg0 db 0dh, 0ah,'The 0 Bit is 1','$' msg1 db 0dh, 0ah,'The 1 Bit is 1','$' msg2 db 0dh, 0ah,'The 2 Bit is 1','$' msg3 db 0dh, 0ah,'The 3 Bit is 1','$' msg4 db 0dh, 0ah,'The 4 Bit is 1','$' msg5 db 0dh, 0ah,'The 5 Bit is 1','$' msg6 db 0dh, 0ah,'The 6 Bit is 1','$' msg7 db 0dh, 0ah,'The 7 Bit is 1','$' dseg endscseg segmentassume cs:cseg,ds:dseg start:mov ax,dsegmov ds,axmov cx,8mov si,0mov bl,acmp bl,0jz exitl: shr bl,1jc l1inc siloop ljmp exitl1: mov ax,siand ax,0fhmov bx,axshl ax,1add bx,axadd bx,offset jmptb1jmp bxjmptb1:jmp near ptr func0jmp near ptr func1jmp near ptr func2jmp near ptr func3jmp near ptr func4jmp near ptr func5jmp near ptr func6jmp near ptr func7func0:lea dx,msg0jmp outputfunc1:lea dx,msg1jmp outputfunc2:lea dx,msg2jmp outputfunc3:lea dx,msg3jmp outputfunc4:lea dx,msg4jmp outputfunc5:lea dx,msg5jmp outputfunc6:lea dx,msg6jmp outputfunc7:lea dx,msg7jmp outputoutput:mov ah,9int 21hexit: mov ah,4chint 21hcseg endsend start2. 编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。

相关文档
最新文档