汇编实验报告汇总

合集下载

汇编语言实验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. 输入输出指令:学习如何使用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:```三、实验结果通过本次实验,我学会了如何在汇编语言中进行简单的输入输出和字符串操作。

汇编实验一实验报告

汇编实验一实验报告

汇编语言程序设计实验报告课程名称汇编语言程序设计班级姓名学号指导教师汇编语言程序设计实验一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 寄存器的内容变化,尤其是标志位的变化。

汇编语言实验报告一.doc

汇编语言实验报告一.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]。

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

调试结果:。

实验报告范文模板【汇编】

实验报告范文模板【汇编】

篇一例一定量分析实验报告格式(以草酸中h2c2o4 含量的测定为例)实验题目:草酸中h2c2o4 含量的测定实验目的:学习naoh 标准溶液的配制、标定及有关仪器的使用;学习碱式滴定管的使用,练习滴定操作。

实验原理:h2c2o4 为有机弱酸,其ka1=5.9 x 10-2 , ka2=6.4 x 10-5。

常量组分分析时cka1 > 10-8 , cka2> 10-8 , ka1/ka2 < 105,可在水溶液中一次性滴定其两步离解的h+:h2c2o4+2naoh===na2c2o4+2h2o 计量点ph 值8.4 左右,可用酚酞为指示剂。

naoh 标准溶液采用间接配制法获得,以邻苯二甲酸氢钾标定:-cook-cooh+naoh===-cook-coona+h2o此反应计量点ph 值9.1 左右,同样可用酚酞为指示剂。

实验方法:一、naoh 标准溶液的配制与标定用台式天平称取naoh1g于100ml烧杯中,加50ml蒸馏水,搅拌使其溶解。

移入500ml试剂瓶中,再加200ml蒸馏水,摇匀。

准确称取0.4~0.5g 邻苯二甲酸氢钾三份,分别置于250ml 锥形瓶中,力口20~30ml蒸馏水溶解,再加1~2滴0.2%酚酞指示剂,用naoh 标准溶液滴定至溶液呈微红色,半分钟不褪色即为终点。

二、h2c2o4含量测定准确称取0.5g左右草酸试样,置于小烧杯中,加20ml蒸馏水溶解,然后定量地转入100ml容量瓶中,用蒸馏水稀释至刻度,摇匀。

用20ml移液管移取试样溶液于锥形瓶中,加酚酞指示剂1~2滴,用naoh 标准溶液滴定至溶液呈微红色,半分钟不褪色即为终点。

平行做三次。

实验数据记录与处理:一、naoh 标准溶液的标定实验编号123备注mkhc8h4o4/g 始读数终读数结果vnaoh/ml 始读数终读数结果cnaoh/mol • 1-1naoh/mol • l-1结果的相对平均偏差二、h2c2o4含量测定实验编号123 备注cnaoh/mol • l-1m样/gv 样/ml20.0020.0020.00vnaoh/ml 始读数终读数结果3 h2c2o4h2c2o4结果的相对平均偏差实验结果与讨论:(1)(2) (3)……结论:例二合成实验报告格式实验题目:溴乙烷的合成实验目的:1 .学习从醇制备溴乙烷的原理和方法2.巩固蒸馏的操作技术和学习分液漏斗的使用。

汇编语言实验报告

汇编语言实验报告

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

汇编语言实验报告汇总

汇编语言实验报告汇总

实验1 查看CPU和内存,用机器指令和汇编指令编程1.预备知识:Debug的使用2.实验任务(第45页)(1)已跟踪执行(2)(3)通过DEBUG中的D命令查看到主板的生产日期[以月、日、年,分隔符为'/'的格式]存储在内存ffff:0005~ffff:000C(共8个字节单元中)处。

此生产日期不能被改变,因为其具有‘只读’属性。

(5)实验2 用机器指令和汇编指令编程1.预备知识:Debug的使用2.实验任务(第71页)(1)使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。

从第一空开始依次如下:ax=5BEAax=5CCAbx=30F0bx=6022sp=FE 220FE 5CCAsp=FC 220FC 6022sp=FE 6022sp=100H 5CCAsp=FE 220FE 30F0sp=FC 220FC 2F32说明:此题可能因机子软、硬件环境不同而导致答案不一致!(2)仔细观察图3.19的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?答:因为用T指令进行调试时,会产生中断。

而为了保护现场,CPU则先将标志寄存器进栈、再把当前CS的值进栈,最后将IP的值进栈。

实验三汇编语言程序的调试与运行1.将下面的程序保存为t1.asm文件,生成可执行文件t1.exe; assume cs:codesgcodesg segmentmov ax,2000hmov ss,axmov sp,0add sp,4pop axpop bxpush axpush bxpop axpop bxmov ax,4c00hint 21hcodesg endsend2.用Debug跟踪t1.exe的执行过程,写出每一步执行后相关寄存器中的内容3.PSP的前两个字节是CD 20,用Debug加载t1.exe,查看PSP的内容程序段前缀PSP格式:偏移字节数说明000002中断20H000202以节计算的内存大小(利用这个可看出是否感染引导型病毒)000401保留000505至DOS的长调用000A02INT 22H 入口 IP000C02INT 22H 入口 CS000E02INT 23H 入口 IP001002INT 23H 入口 CS001202INT 24H 入口 IP001402INT 24H 入口 CS001602父进程的PSP段值(可测知是否被跟踪)001814存放20个SOFT号002C02环境块段地址(从中可获知执行的程序名)002E04存放用户栈地址指针00321E保留005003DOS调用 ( INT 21H / RETF )005302保留005507扩展的FCB头005C10格式化的FCB1006C10格式化的FCB2007C04保留008080命令行参数长度(不包含总为最后的0D)及参数也是程序运行期间缺省的DTA实验四 [bx]和loop指令的联合使用1.编程:向内存0:200~0:23F依次传送数据0~63assume cs:codecode segmentmov ax,0020hmov ds,axmov bx,0mov dl,0mov cx,40hs: mov [bx],dlinc bxinc dlloop smov ax,4c00hint 21hcode endsend2.编程:向内存0:200~0:23F依次传送数据0~63,程序中只能使用9条指令(包括程序的2条返回语句)assume cs:codecode segmentmov ax,0020hmov ds,axmov bl,0mov cx,64s: mov [bx],blinc blloop smov ax,4c00hint 21hcode endsend3.下面程序的功能是将“mov ax,4c00h”之前的指令复制到内存0:200处,补全程序。

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

(此文档为word格式,下载后您可任意编辑修改!)湖北工程学院计算机与信息科学学院实验报告2013—2014学年第二学期课程名称:汇编语言程序设计班级:学号:姓名:雷震任课教师:叶从欢实验一:顺序结构一、实验目的:1.加深对汇编的理解;2.掌握汇编程序的设计方法;3.学会使用顺序结构。

二、实验内容:定义变量A、 B、 C、 D,编写程序实现:(a * b + c - 70) a。

并将最后的商保存在D中,余数保存在D+2中。

本实验中: a = 15, b = 75, c = 70。

程序中,定义字型变量A、B、C、D。

A、B、C分别保存算数表达式中的数值a、b、c,D保存算数运算的最终结果。

程序开始,先将变量A、B、C赋初值,计算A乘以B的值,将结果保存在DX、AX中,然后逐步计算A*B+C, A*B+C-70和(A*B+C-70)A。

最后计算结果的商保存在AX中,余数保存在DX中,最终将AX赋值给D,DX赋值给D+2。

程序运行完毕,程序返回。

三、实验步骤1.程序设计流程图2.调试与运行(1)首先进入DOS系统,进入目标文件所在的系统盘和文件夹;(2)输入“MASM TEST”,此命令是调用宏汇编程序MASM对源文件TEST.ASM进行编译,TEST是文件的名称,生成目标文件TEST.OBJ;(3)若汇编无错误,则用命令“LINK TEST”进行连接,生成可执行文件TEST.EXE;(4)若连接成功,则用命令“TEST”运行。

四.总结与体会通过这次实验,我初步了解了汇编程序设计的基本方法和步骤,掌握了汇编程序设计的顺序结构。

顺序结构是其他结构的基础,学好顺序结构对进一步学习汇编的好处不言而喻。

在本程序中,主要分为加法,减法,乘法,除法,本程序基本实现了四则运算的功能,该程序所完成的运算式为:(a * b + c - 70) a。

并将运算结果存入变量D中,而余数存入D+2中。

改程序的不足之处是还没能实现除法运算中不能运算较大的数,会产生溢出现象。

完成了这次实验后,对汇编产生了兴趣,而且拥有的信心,以后的学习会再接再厉!指导教师:叶从欢_ __ 实验二:分支结构一、实验目的1.熟悉汇编语言程序设计结构;2.了解汇编语言循环程序设计的基本流程;3. 熟悉汇编语言循环基本指令的使用方法;4.掌握利用汇编语言实现分支程序设计方法;5.熟悉汇编语言分支程序基本指令的使用方法;6.掌握利用汇编语言的循环指令完成循环程序设计方法。

二、实验内容:根据X的正、负、零来实现分支结构,最终分别输出不同的结果。

1.当X为正数时,将字符串变量Y中的内容“NAME~leizhen$”全部以大写字母输出;2.当X为负数时,将字符串变量Y中的内容“NAME~leizhen$”全部以小写字母输出;3.当X为0时,将字符串变量BUF中的内容“X:0!$”输出。

程序中,当X小于零时,转到A1标记,A1、A2、A3处理将Y中内容小写输出;当X大于等于0时,转到B1标记,在B1处判断X大于0还是等于0;当X等于0时,输出BUF中的内容;当X大于0时,程序跳转到C1标记,C1、C2、C3处理将Y中的内容大写输出。

三、实验步骤1.程序设计流程图Y YNNY NN2.调试与运行编译运行文件test2.asm:(1)将X的值设为正数,运行程序后,Y中“NAME~leizhen$”所有小写字母变为大写;(2)将X的值设为负数,运行程序后,Y中“NAME~leizhen$”所有大写字母变为小写:(3)将X的值设为0,运行程序后,输出BUF“X:0!$”。

四、总结体会通过本次实验,让我更加了解了汇编语言的基本要求和步骤,深入了解指令执行的方式和不同的转移方式对应不同的机器码,提高自己动手能力。

本程序中利用利用X值的不同,从而对字符串BUF中的大小写进行相应的变换。

增加了程序的灵活性,让程序不在显得很死板。

这是程序设计的一个很大改善。

完成分支程序设计后,我对分支程序的结构也有了一定的理解,分支程序的结构很好的体现出了人对于问题的想法和解题思路,结构比较好理解和有条理。

这次实验也让我学到了许多汇编语言代码的意义和用法,为以后更加熟练操作编程提供方便。

指导教师:叶从欢实验三:循环结构一、实验目的1.加深对循环结构的理解;2.掌握循环程序的设计方法;3.掌握程序接受用户从键盘输入数据的方法;4.加深提示用户输入数据的这一习惯。

二、实验内容:由用户从屏幕输入一个字符串,利用循环,将字符串中的大写转化为小写,小写转化为大写,然后逆序并输出。

程序中,INFO1和INFO2分别保存进行输入和输出的提示字符串;BUF保存输入字符串缓冲区的大小;LEN保存输入字符串的长度;STR1保存输入字符串的串首偏移地址;STR2保存装换后的字符串。

程序开始,进行9号调用输出提示信息INFO1,然后10号调用录入用户输入的字符串,然后换行。

将字符串长度保存在CL中,DI指向STR1的字符串尾, SI指向STR2的串首偏移地址,对读写字符进行控制。

CONT标号中利用循环逐一从STR1中取出字符,如果ASCLL码大于或等于‘a’,跳到BIG标号处,进行大写转小写操作,如果比‘a’小,而且大于或等于‘A’,则跳到SMALL标号处进行小写转大写操作,接着跳到FINAL对循环条件进行更改,如果CL不为0,则继续跳到CONT 标号处进行循环。

最后先利用2号调用输出一个回车,然后9号调用输出STR2字符串,进入到EXIT标号,程序结束。

三、实验步骤1.程序设计流程图Y NYYN2.调试与运行编译运行文件test3.asm:(1)编译运行源程序,出现提示用户输入的字符串;(2)用户输入字符串:(3)显示转换后的字符串:四、总结体会通过运行分析源程序,让我更加了解了循环程序的基本要求和步骤。

不仅如此,本程序还增加了输入输出提示功能,这在程序设计中是一个很重要的内容。

在设计的过程中,在换行上出现了不少的问题,比如本来要输出的字符串从本行开始覆盖了提示字符串,没有出现在它该出现的位置。

对此,我的解决方案是先输出一个换行,然后再输出一个回车,从而解决了我的问题。

在程序设计中,就要有这种独自探索的思想,发现问题,解决问题。

这次的实验让我更加了解了汇编,受益匪浅!指导教师:叶从欢实验四:双重循环结构一、实验目的1.加深对循环结构的理解;2.掌握双重循环程序的设计方法;3.掌握程序接受用户从键盘输入数据的方法;4.加深提示用户输入数据的这一习惯;5.加深对编程的独立探索能力。

二、实验内容:由用户从屏幕输入连续的一串正整数,利用冒泡排序法,进行排序并输出。

程序中,INFO1和INFO2分别保存进行输入和输出的提示字符串;BUF保存输入字符串缓冲区的大小,BUF+1保存输入字符串的长度;BUF+2保存输入字符串的串首偏移地址。

程序开始,进行9号调用输出提示信息INFO1,然后10号调用录入用户输入的字符串,然后换行。

将字符串长度保存在CL中。

冒泡排序需要用到两层循环,均用CX对循环进行控制。

进入里层循环时,用BX 保存当前CX的值。

循环开始,SI指向输入字符串的串首,逐一进行内循环将偏移地址SI中的内容与偏移地址 SI+1中的内容进行比较,如果前者大于后者,则将两数进行交换;CX控制循环的次数,当CX减至0时,内层循环完成一次,此时将当前比较的字符中最大的移动到末尾。

退出内循环进入外层循环,将保存在BX中的数赋值给CX,若CX不为1,则继续进入到内循环执行。

否则循环执行完毕,冒泡排序结束。

最后先利用9号调用分别输出提示输出字符串和排好序的字符,程序结束。

三、实验步骤1.程序设计流程图Y NNYYN2.调试与运行编译运行文件test4.asm:(1)编译运行源程序,出现提示用户输入的字符串;(2)用户输入字符串:(3)显示冒泡排序后的字符串:四、总结体会通过运行分析源程序,让我更加了解了双重循环程序的基本要求和步骤。

本程序还增加了输入输出提示功能,这在程序设计中是一个很重要的内容,提高了程序设计的灵活、通用性。

除此之外,本程序实现了对用户输入的任意0~9间的字符进行排序。

因为要将排好序的数存放在原地址上,而且又是用户自己输入,所以,在一开始开辟内存单元时,就全部初始化为’$’符号,方便了最终程序利用9号调用对用冒泡排好序的字符进行输出。

在设计此程序时,不免失败了很多次,但是当最终成功的时候,那种快乐时用言语无所表达的。

这次的实验让我更加了解了汇编,受益良多!指导教师:叶从欢实验五:子程序一、实验目的1. 加深对子程序的理解;2. 掌握子程序的设计方法;3.学会使用while循环结构;4.不同模块间程序的调用和调试;5.学会利用子程序的特点减少程序的冗余度;6. 加深对编程的独立探索、创新能力。

二、实验内容:利用子程序输出6行8列的平行四边形图形。

程序中,INFO保存输出提示字符串。

START标号指示代码段的开始;LOP标号指示调用BLANK子程序,输出空格;TAG标号指示调用GRAPH 子程序,输出‘*’号;EXIT标号指示主程序的退出。

BLANK子程序中LOP1标号指示输出空格循环的开始,GRAPH子程序中LOP2标号指示输出星号循环的开始。

程序开始,进行9号调用输出提示信息INFO,然后换行。

用BX存放总的循环次数,5次。

将BX赋值给CX,CX控制BLANK子程序中输出空格的次数。

进入LOP标记,调用BLANK子程序,输出空格。

然后进入TAG 标记,调用GRAPH子程序,输出星号。

输出一行图形后,对循环条件进行更改,将BX减1,如果BX小于0,则整个外层循环完成,程序退出。

否则将BX赋值给CX,继续跳转到LOP标记进行循环。

BLANK子程序中,利用while循环结构对空格进行输出。

首先将循环条件CX减1,对CX进行判断,如果CX小于0,则程序返回,否则就输出一个空格。

然后就继续跳转到BLANK中的LOP1标号进行循环。

GRAPH子程序中,保存主程序中用到的CX,并将CX赋值为8。

利用do-while循环,输出8个星号,然后输出换行,对进行下次图形输出做准备。

三、实验步骤1.程序设计流程图主函数流程图:NYBLANK函数流程图:NYGRAPH函数流程图:YN2.调试与运行编译运行文件test5.asm:编译运行源程序,屏幕出现平行四边形图案四、总结体会这次实验学习了子程序的编写以及主程序和子程序的调用,不同模块间程序的调用和调试方法,实践的过程中加深了对子程序调用的代码的使用,让我更加了解了子程序设计的基本格式和步骤。

本实验中用到了两个子程序,分别实现了输出空格和输出星号的功能。

在编写输出空格子程序时,由于当CX等于0时,仍然要执行一次循环,如果用do-while循环,则要将CX减1,则CX中存储的内容变成了-1的补码,也就是255,使得程序陷入死循环。

相关文档
最新文档