汇编实验报告七

合集下载

所有实验电子版报告

所有实验电子版报告

实验报告课程:汇编语言上机实验专业:电子信息科学与技术班级:11电子1班学号:119050244098姓名:徐睿昀物理与电子信息学院目录实验一 DEBUG常用命令及8086指令使用 (1)实验二内存操作数及寻址方法 (5)实验三汇编语言程序上机过程 (10)实验四数据串传送和查表程序 (13)实验五屏幕字符显示程序 (19)实验六屏幕字符显示程序 (23)实验七分枝程序 (27)实验八多重循环程序 (33)实验九子程序 (37)汇编语言程序设计实验报告1学号:119050244098 姓名:徐睿昀实验日期:2013 10 20 实验名称:实验一 DEBUG常用命令及8086指令使用实验目的:1、8086指令: MOV,ADD,ADC,SUB,SBB,DAA,XCHG2、DEBUG命令: A,D,E,F,H,R,T,U。

3、ASCII码及用16进制数表示二进制码的方法。

4、8086寄存器: AX,BX,CX,DX,F,IP。

实验内容:一、DEBUG 命令使用:1、打 DEBUG 进入 DEBUG 控制,显示提示符 '_ '。

2、用命令 F100 10F 'A' 将'A'的ASCII码填入内存。

3、用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。

4、用命令 F110 11F 41 重复上二项实验,观察结果并比较。

5、用命令 E100 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的内容。

汇编代码.386将十进制按位转换成为二进制互相转化实验报告

汇编代码.386将十进制按位转换成为二进制互相转化实验报告

汇编代码.386将十进制按位转换成为二进制互相转化实验报告全文共四篇示例,供您参考第一篇示例:引言汇编语言是一种底层的计算机语言,它直接面向计算机的硬件和指令集架构。

在计算机科学领域中,对汇编语言的理解和掌握是非常重要的,因为它可以帮助程序员更深入地理解计算机系统的工作原理。

本文将围绕着汇编语言中的十进制到二进制的转换,展开一项实验报告,通过编写汇编代码.386实现十进制和二进制的相互转换,并对实验结果进行分析和总结。

实验目的1. 了解汇编语言中的数据处理、位操作等基本概念和指令;2. 掌握利用汇编语言将十进制数字转换为二进制数,并将二进制数转换为十进制数的方法;3. 加深对计算机底层原理的理解,提高汇编语言编程能力。

实验过程1. 十进制转为二进制我们使用汇编语言编写代码,将给定的十进制数字转换为二进制数。

我们可以选择一个整数N作为输入,然后使用位操作指令将其转换为对应的二进制数。

在汇编语言中,可以使用移位操作来实现这一转换。

我们可以将整数N的每一位通过移位操作得到对应的二进制位,直到整个数转换完成。

2. 二进制转为十进制接下来,我们利用汇编语言编写代码,实现将给定的二进制数转换为十进制数的功能。

对于一个二进制数,我们可以通过相应的位操作和乘法操作将其转换为对应的十进制数。

具体来说,我们可以取得二进制数的每一位,并将其乘以相应位数的权值,然后求和得到十进制数。

实验结果在实验过程中,我们成功地编写了汇编代码.386来实现十进制和二进制的相互转换。

通过实际的测试和验证,我们得到了正确的转换结果。

这证明了我们的汇编代码在功能上是正确的,能够准确地进行十进制和二进制之间的转换。

实验总结通过这次实验,我们深入探讨了汇编语言中的数据处理和位操作等基本概念。

我们不仅了解了如何使用汇编语言进行十进制和二进制的转换,还加深了对计算机底层原理的理解。

我们也发现了汇编语言在实现这种功能上的高效性和灵活性。

结论本次实验通过汇编代码.386将十进制按位转换成为二进制,并实现了二进制到十进制的互相转化。

川师汇编实验报告

川师汇编实验报告

实验编号: 2 四川师大《汇编语言》实验报告2016 年 9月 21 日计算机科学学院 2015 级3班实验名称寻址方式实验姓名:邓小卫学号:2015110309 指导老师:__吴贞东__ 实验成绩:一.实验目的及要求熟悉8086各种寻址方式熟悉DEBUG各命令的使用方法二.实验内容3.2根据要求写出相应的汇编语言指令1.把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器2.用寄存器BX和SI的基执变址寻址方式把寄存器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。

3.用寄存器BX和位移量0B2H寄存器相对寻址方式把寄存器中的一个字和(CX)相加,并把结果送回寄存器、4.用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送回该存储单元中。

5.把数0B5H与(AL)相加,并把结果送回AL中。

3.3 写出把首地址为BLOCK的字数组的第6个送到DX寄存器的指令。

要求使用以下几种寻址方式:1.寄存器间接寻址2.寄存器相对寻址3.基址变址寻址3.4 现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20101)=34H ,(20102)=56H,(20103)=78H,(21200)=2AH,(21203)=4CH,(21202)=B7H,(212030)=65H,试着说明下列各条指令执行完后AX寄存器的内容。

1.MOV AX,1200H2.MOV AX,BX3.MOV AX,[1200H]4.MOV AX[BX]5.MOV AX,1100[BX]6.MOV AX,[BX][SI]7.MOV AX,1100[BX][SI]三.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)3.2根据要求写出相应的汇编语言指令1.把BX寄存器和DX寄存器的内容相加,结果存入DXMOV DX,5MOV BX,5ADD DX,BX2.用寄存器BX和SI的基执变址寻址方式把寄存器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。

北京理工大学汇编语言实验报告实验三字符串操作实验

北京理工大学汇编语言实验报告实验三字符串操作实验

北京理工大学汇编语言实验报告实验三字符串操作实验实验三字符串操作实验一、实验目的1)熟悉串操作指令的功能与应用;2)掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序;3)了解汇编语言字符串处理基本流程;二、实验软硬件环境1)硬件环境:惠普64位一体化计算机及局域网; 2)软件环境:windows 8,红蜘蛛管理系统,MASM for Win dows三、实验相关知识1)字符串操作流程SI寄存器保存源串首地址;DI寄存器保存目的串首地址;CX寄存器保存字符串长度;CLD或STD指令设置字符串处理方向;2)重复前缀指令重复次数由计数寄存器CX中存放的值决定,指令每重复执行一次,计数器CX中值减1,当CX 中值减至0时,停止重复执行,继续执行下一条指令。

寄存器的E内容条件为复前罡重复与操作直配合工作的字符串处理指令有MOVSSTOS^ LODS当REPE/REP判断计数寄存器的内容CX是否为0或ZF=O(即比较的两个操作数不等)亠只要满足一个则重复执行结束,否则继续执行。

可以与REPE/REP配合工作的串指令有CMP和SCAS0或體茴比较P判个操数数相等的内容要满足一个则重复执行结束,否则继续执行。

可以与REPE/REP配合工作的串指令有CMPS口SCAS3)字符串操作指令lodsb、lodsw :把DS:SI 指向的存储单元中的数据装入AL或AX然后根据DF标志增减SI ;stosb、stosw :把AL 或AX 中的数据装入ES:DI指向的存储单元,然后根据DF标志增减DI ;movsb movsw把DS:SI 指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据DF 标志分别增减SI和DI ;scasb、scasw:把AL或AX中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI ;cmpsb cmpsw把DS:SI指向的存储单元中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI ;rep :重复其后的串操作指令。

汇编外部中断及NE555计数实验实验报告

汇编外部中断及NE555计数实验实验报告

外部中断及NE555计数实验11103070315 李青【实验内容】1、利用外部按键中断计数并用数码管显示计数值2、用51单片机T0、T1定时计数器对NE555产生的脉冲信号进行频率计数,频率送LCD显示(或数码管显示)【需要了解的知识】1、GPIO设定2、LCD显示原理,输入与输出及其原理3、定时计数器工作原理及频率测量4、NE555工作原理【实验预习】预读实验指导电子文档的实验十六、七及其前面的实验流程【实验设备】Keil C51软件、ICE52 仿真驱动、MEFlash编程软件、USB驱动程序【实验过程】实验一外部中断实验任务:利用单片机的外部中断功能进行计数,然后将计数值输出到数码管上显示。

K5键—计数值加1(外部中断0)K6键—计数值加1(外部中断1)3位数码管显示,最大计数值255实验步骤:1)首先在硬盘上建立一个文件夹;2)启动Keil C51软件;3)执行Keil C51软件的菜单“Project|New Project……”,弹出一个名为“Create New Project”的对话框。

输入工程文件名,选择保存路径uv2后缀,点击“保存”按钮;4)紧接着弹出“Options for Target‘Target 1’”,为刚才的项目选择ATMEL 的AT89S52的CPU。

选择之后,点击“确定”按钮;5)接下来弹出一个对话框提示你是否要把标准8051的启动代码添加项目中去,此时,点击“否”按钮;6)执行菜单“File|New……”,出现一个名为“Text1”的文档。

接着执行菜单“File|Save”弹出一个名为“Save As”的对话框,将文件名改为“.asm”后缀,然后保存;7)添加源程序文件到工程中,一个空的源程序文件建成。

单击Keil C51软件左边项目工作窗口“Target1”上的“+”,将其展开。

然后右击“Source Group1”文件夹弹出下拉菜单,单击其中的“Add Files to Group‘Source Group1’”项;8)在弹出的对话框中先选择文件类型为“Asm Source file (*.s*;*.src;*.a*)”,这时对话框内创建的空的源程序文件已经出现在项目工作窗口的“Source Group1”文件夹中;输入源程序代码;9)点击工具栏“Options for target”按钮,弹出一个对话框,定义“Xtal”为11.0592.下面依序是存储模式、程序空间大小等设置,均用默认值即可。

掌握ADDSUB等汇编指令及其对标志位的影响

掌握ADDSUB等汇编指令及其对标志位的影响

电子信息工程‎学系实验报告‎——适用于计算机‎课程课程名称:汇编语言程序‎设计Array实验项目名称‎:掌握ADD,SUB等汇编‎指令及其对标‎志位的影响实验时间:班级:姓名:学号:实验目的:掌握ADD,SUB,MUL,IMUL,DIV,IDIV汇编‎算术指令以及‎它们对标志位‎的影响。

实验环境:微机一台,操作系统:WINXP2‎,轻松汇编实验内容及过程:输入给出程序‎,通过对程序的‎调试掌握AD‎D,SUB等汇编‎指令的操作及‎其对标志位的‎影响;编程实现Z (W*X)/(Y+6),R 余数(其中X,Y,Z,R和W均为存‎放16为带符‎号数单元的地‎址。

1、上机输入以下‎程序:code segmen‎tmain proc farassume‎cs:codestart:push dsxor ax,axpush axmov ax,0dec axadd ax,7FFFHadd ax,2neg axsub ax,0FFFFH‎retmain endpcode endsend2、写出上面汇编‎程序中字体为‎红色的指令执‎行后,AX寄存器及‎标志位CF,SF,ZF和OF 的‎内容是什么?3、编程实现Z (W*X)/(Y+6),R 余数(其中X,Y,Z,R和W均为存‎放16位带符‎号数单元的地‎址。

实验结果及分析:2、由以上运行结‎果可知执行程‎序1的指令后‎,A X寄存器及‎标志位CF,SF,ZF和OF的‎内容如表格所‎示:neg影响C‎F,SF,ZF和OF;sub影响标‎志位CF,SF,ZF和OF。

3、在本程序中(程序2)AX(商)的值也即Z(商)的值,DX(余数)的值也即R(余数)的值。

附录:。

《微机系统与汇编语言实验指导书》-V2.1

第一章汇编语言实验概述1.1 实验开设目的汇编语言实验是“微型计算机系统”课程内的重要实验环节。

本实验能帮助学生运用课程中所学到的汇编语言指令、语法和程序设计方法,自己编制相应要求的汇编语言程序或段落,通过上机运行调试等操作,培养学生解决问题和分析问题的实践能力。

使学生深入理解和掌握8086微处理器的汇编语言程序设计方法及指令系统中的常用指令,并对微型计算机系统的部分接口和底层设备进行操控实践。

1.2 总体要求独立完成课程必须完成的实验,选做部分有条件完成的实验。

实验中注意养成独立思考、分析问题和解决问题的能力。

按照各实验的具体要求,认真构思实验方案及解题步骤,勤于实验预习和充分准备,及时书写并按时上交相应实验报告。

实验报告内容与要求:一、实验编号(摘自本实验指导书具体实验项目)二、实验目的(摘自本实验指导书具体实验项目)三、实验要求(摘自本实验指导书具体实验项目)四、实验方案及解题程序的流程图(自己绘制相应的程序流程图)五、实验程序清单(填写自编源程序清单,并加注段落说明和重要指令说明)六、实验运行调试过程:1.写出源程序到可执行程序生成过程及相应操作命令2.写出显示原始数据操作的命令及摘抄机内原始数据3.写出运行程序或程序段落的命令及记录相关寄存器和内存单元值并分析执行结果4.写出程序或原始数据修改意图和修改命令5.重新执行修改后的程序并查看结果,并做出结果分析与实验成败判别七、实验心得与体会。

1.3 实验考核方式与要求1. 实验后按时上交实验报告,内容必须符合要求。

2. 评分方法:设计的程序和方法是否正确以及是否达到试验的基本要求。

3. 实验成绩占课程成绩的比例:15%-20%。

1.4 实验设备与环境每人一台P3以上微机系统,能运行WINDOWS-9X操作系统、及实模式DOS系统。

系统内预先装入MASM5及以上的汇编语言编译、连接及调试应用软件、DEBUG、EDIT 等命令文件。

实验附件:RS232通讯连接线缆。

胡克定律实验报告[汇编]

胡克定律实验报告[汇编]背景胡克定律是描述弹性力学的一条定律,描述物体被弹簧等弹性体拉伸或压缩产生的力的大小与伸长或缩短的长度之间的关系。

其数学表达式为F=kx,其中F为弹性力,k为弹性系数,x为物体的伸长或缩短长度。

目的本实验的目的是通过测量弹簧拉伸产生的力和伸长长度之间的关系来验证胡克定律。

原理胡克定律可以用下面的简单实验来验证:将一个弹簧固定在一端,另一端悬挂一个质量m。

当弹簧拉伸时,质量受到弹性力的作用,产生加速度。

根据牛二定律可得:F=ma其中F为弹性力,m为质量,a为加速度。

由于弹性体在悬挂质量下的伸长长度x与加速度a成正比,因此可将F=kx,其中k为弹性系数。

实验装置实验需要用到的装置有:1.弹簧2.质量块3.板秤4.直尺5.计时器实验步骤1.将弹簧挂在一个固定的支架上,确保弹簧完全垂直,并且前方没有阻拦影响振动。

2.在弹簧下方连接质量块,并逐渐增加质量,使弹簧伸长。

3.在每次加质量后,记录板秤上的示数和弹簧下端的伸长长度,并计时10秒钟。

4.重复步骤2和3,增加质量,直至达到一定的值。

6.用数据分析软件绘制示数与伸长长度之间的图像,读取直线斜率得到弹性系数k。

7.根据弹性系数k计算出每个质量块下的弹簧伸长长度,将计算值与实际值比较,验证胡克定律。

结果和分析本实验使用的弹簧的弹性系数为6.5 N/m。

通过实验和数据分析,得到示数与伸长长度之间的线性关系,如图所示。

y=0.007x+0.18由于直线斜率为0.007,因此弹性系数k为0.007 N/m。

对于每个质量块下的伸长长度,根据胡克定律计算得到的值与实际测量值之间的误差小于0.2 cm,符合实验的精度要求,因此可认为胡克定律得到了验证。

结论在本实验中,通过测量弹簧的伸长长度和拉伸产生的力,验证了胡克定律在弹性体拉伸和伸长的情况下成立的特性。

实验的结果表明,弹簧的弹性系数可以通过数据分析和绘图的方式得到,并通过与实际测量值进行比较来验证胡克定律的正确性。

汇编随机点名程序报告

《汇编语言程序设计》综合程序设计实验报告一、项目简介此项目名称是随机点名系统。

再具体点,就是一个上课老师提问时所用的随机点名系统。

随机按一下键盘,出来一个数,所对应的人来回答问问题,并设置结束时间。

到达这个结束时间时,会有闹铃提醒回答时间已经结束。

接着循环这样的过程。

它也可以应用于其他方面,比如限时赛等。

二、小组成员具体分工王洪叶写了一个一按键就随机出现一个十六进制数的程序,解凤娇写了一个设置闹铃时间并出声的程序。

写的差不多的时候,我们把这两个程序联系在一起,把界面整理了一下。

三、需求分析与设计随机数的产生是通过响应键盘按键,随机产生一个数然后将其转换为16进制数并输出。

我们班有32个人,需产生32个数字。

所有数除以32,得到的余数即为0~31之间的自然随机数。

对于时钟程序,需要截取系统时间,并每隔一秒刷新一次时间。

当时间到了的时候调用响铃子程序,就有声音提示。

程序中我们写了很多很多子程序,以及跳转的语句。

此项目的最大亮点是随机数和响铃的结合,很具有实用性。

四、代码及分析(列出代码,关键代码后必须要有注释;并写出自己组代码所用的知识点及特色)STACK SEGMENT STACKDW 256 DUP(?)STACK ENDSDATA SEGMENThour DW ? ;响铃时的小时数minute DW ? ;响铃时的分钟数ten DW 10AA DB 5 dup(?)str0 DB 0ah,0dh,0dh,'$'str24 DB 'The ringing time is: $'str25 DB 'The current time is: $'str26 DB 'Game Over !!!!!!! $'str27 DB 'Set time error!$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKRAND PROCpush dspush axxor ax,axSTIMOV AH,0INT 1AH ;读时钟计数器值到DX MOV AX,DXAND AH,3 ;清高6位MOV DL,32DIV DL ;除32,产生0~31余数MOV BL,AH ;余数存BX,作随机数MOV BH,00HCALL MCATPOP axPOP dsRETRAND ENDPMCAT PROC ;将随机数转换为16进制表示的ASCII码字符子程序PUSH AXPUSH bxPUSH CXPUSH DXCMP BX,9JA ss1 ;两位数跳转vn1:ADD BL,30H ;转换为ASCII码MOV AA,BLMOV AA+1,'$' ;存字符串送AALEA DX,AA ;字符串地址送DXMOV AH,9INT 21H ;输出ASCII码JMP ss3 ;小于9直接输出ss1:MOV CL,4 ;计数器置4MOV AL,0PUSH BX ;十进制BX进栈SHL BX,CL ;BX循环左移4位,高四位进BH,十位数CMP BH,9JBE V1 ;小于或等于9的ASCII码SUB BH,9ADD BH,40H ;A-F的ascii码JMP MM1V1:ADD BH,30HMM1:MOV AA,BH ;将ASCII码送AAPOP BX ;十进制BX出栈AND BL,0FH ;高四位清零,个位数vn2:CMP BL,9JBE TT1 ;0-9的ASCII码SUB BL,9ADD BL,40H ;A-F的ASCII码JMP RR1TT1:ADD BL,30H ;0-9的ASCII码RR1:MOV AA+1,BLMOV AA+2,'$' ;字符串结尾$ LEA DX,AAMOV AH,9INT 21H ;两位数输出ss3:POP DXPOP CXPOP BXPOP AXRETMCAT ENDPchansheng proc;随机数产生START PROC FARMOV BH,0MOV BL,7INT 10Hdisp macro mlea dx,mmov ah,9int 21hendmdisp str1disp str2disp str3disp str4disp str5disp str6disp str7disp str8disp str9disp str10disp str11disp str12disp str13disp str14disp str15disp str16disp str17disp str18disp str19disp str20disp str21disp str22disp str0KEY:SAHFMOV AH,0LAHFMOV AH,0HINT 16HJZ KEY;等于转移CALL RANDdisp str0START endpretchansheng endpcleanLine proc;用于清除一行的字符push axpush bxpush cxpush dxmov cx,85mov ah,2hmov dl,0dhint 21hclean:mov dl,' 'int 21hloop cleanmov dl,0dhint 21hpop dxpop cxpop bxpop axretcleanLine endpchangeline proc;用于显示一个回车换行push axpush cxpush dxmov ah,2hmov dl,0dhint 21hmov dl,0ahint 21hpop dxpop cxpop bxpop axretchangeline endpinputNegativeNumber proc;用于从键盘中接受一个十进制数,存到bx中push axpush cxpush dxmov bx,0mov cl,0mov ah,1int 21hcmp al,'-'je k4;等于转移k0:cmp al,30hjb k3;小于转移cmp al,39hja k3sub al,30hmov ah,0xchg ax,bxpush cxmov cx,10mul cx ;考虑溢出pop cxadd bx,ax ;考虑溢出k1:mov ah,1int 21hk4:mov cl,1jmp k1k3:cmp cl,1jne over;不等于时转移neg bx;求补over:pop dxpop cxpop axretinputNegativeNumber endp outputNumber proc;输出ax中的一个数字push axpush bxpush cxpush dxmov cx,0mov bx,10cmp ax,0jge p0push axmov ah,2hmov dl,'-'int 21hpop axneg axp0:mov dx,0div bxpush dxinc cxcmp ax,0jnz p0mov ah,2cmp cx,2jae p1mov dx,0inc cxp1:pop dxadd dx,30hint 21hloop p1pop dxpop cxpop bxpop axretoutputNumber endpsetRingTime proc;用于设置响铃时间push axpush bxpush cxpush dxmov bx,0h:mov ah,1hint 21hcmp al,30hjb wrongcmp al,32h;2ja wrongsub al,30h;0mov ah,0xchg ax,bxmul ten;乘add bx,axmov ah,1hint 21hcmp al,30hjb wrongcmp al,39h;9ja wrongsub al,30hmov ah,0xchg ax,bxmul tenadd bx,ax mov hour,bx mov ah,1hint 21hcmp al,':'jnz wrong mov bx,0m:mov ah,1hint 21hcmp al,30hjb wrongcmp al,36h jae wrongsub al,30h mov ah,0 xchg ax,bx mul tenadd bx,ax mov ah,1hint 21hcmp al,30hjb wrongcmp al,39hja wrongsub al,30h mov ah,0 xchg ax,bx mul tenadd bx,ax mov minute,bx jmp o wrong:call changeline call changeline mov ah,9hlea dx,str27int 21hmov ah,4chint 21ho:pop dxpop cxpop bxpop axretsetRingTime endpshowRingTime proc;用于显示响铃时间push axpush bxpush cxpush dxlea bx,hourmov ax,[bx]call outputNumbermov ah,2hmov dl,':'int 21hadd bx,2mov ax,[bx]call outputNumberpop dxpop cxpop bxpop axretshowRingTime endpgetTime proc;用于截取系统时间push axmov bx,0mov ah,2chint 21hmov al,chmov ah,0cmp ax,hourje e1g1:call outputNumbermov ah,2hmov dl,':'int 21hmov ah,0mov al,clcbwcmp minute,axje e2g2:call outputNumbermov ah,2hmov dl,':'int 21hmov ah,0mov al,dhcbwcall outputNumberjmp ede1:inc bxjmp g1e2:inc bxjmp g2ed:pop axretgetTime endpdelay proc;用于延时0.5秒push axwaiting:in al,61hand al,10hcmp al,ahje waitingmov ah,alloop waitingpop axretdelay endpaSecond proc;用于延时1秒push axpush bxpush dxmov bl,2back:mov cx,19144call delaydec bljnz backpop dxpop cxpop bxpop axretaSecond endpmain proc farMOV AX,DATAMOV DS,AXloop1:call chanshengpush dssub ax,axpush axmov ah,9hlea dx,str23int 21hcall setRingTimecall cleanLine;清除屏幕上光标所在这一行上的字符串,并把光标移动到行首mov ah,9hlea dx,str24int 21hcall showRingTime ;输出设置好的响铃时间call changelinecall changelinetime: ;用于每过一秒种刷新一次显示的时间mov ah,9hlea dx,str25int 21hcall getTimecmp bx,2 ;如果bx=2则已经到了设定的响铃时间call aSecondmov ah,2hmov dl,0dhint 21hjmp timering: ;响铃call changelinecall changelinecall changelinemov ah,9hlea dx,str26int 21hmov cx,40last:mov ah,2hmov dl,07hint 21hcall aSecondcall aSecondcall aSecondloop lastloop loop1retmain endpcode endsend main五、总结通过本次程序设计,我们都学到了很多东西,真正的将课本上的知识运用到实际生活中,这样更加增强了我们学习汇编语言的兴趣,在编写程序的过程中遇到了很多问题,但是通过运用网络和请教同学,最终将问题解决。

Str函数汇编实验报告

next:inc si
jmp short s
return:pop ax
ret
codesg ends
end begin
(2)代码分析
代码中用到了cmp指令,该指令的功能相当于减法指令,只是不保存结果,但会影响标志位。还用到了3中跳转指令。Jcxz跳转指令,即为有条件转移指令,如果cx中的值为0将会跳到标号出执行。Ja指令,用于无符号数比较,前者大于后者时则转到标号处执行。Jb指令,用于无符号数比较,即前者小于后者时转移到标号处执行。
三、实验代码及分析
1、实验一
(1)代码清单
assume cs:codesg
dataห้องสมุดไป่ตู้g segment
Db"Beginner's all-purpose symbolic Instruction Code",0
datasg ends
codesg segment
begin:mov ax,datasg
mov ds,ax
(3)由于逐个显示相继的ASCII字符时,需要保存并不断修改dl寄存器内容,而显示空白、回车、换行符时也需要dl寄存器,为此可使用堆栈来保存相继的ASCII字符。具体用法:在显示回车或空白、换行符前用指令
Push dx
把dl内容保存到堆栈。在显示回车、空白和换行符后用pop dx恢复dl的原始内容。
(3)实验过程
编译源文件,产生1.obj目标文件
链接目标文件,产生1.exe可执行文件。
-t单步调试程序,将datasg段的首地址存入ds段中,此时看出datasg段的首地址为0BEF,用-d命令查看此时内存中的内容,是datasg段中存入的数据,有大写字符,也有小写字符。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机组成与汇编语言实验报告
姓名 学号 计分
专业 班级 实验日期
实验名称 实验七 汇编语言循环结构程序设计
实验目的
● 加深对循环结构的理解。
● 掌握循环程序的设计方法。
●进一步熟悉汇编语言程序的汇编、连接及调试技术。
实验内容
1.调试程序1:统计字型变量中1的个数,存储于字节变量Y中。
上机运行该程序并检查运行结果是否正确。
2.调试程序2:
上机运行该程序,查看其显示结果,并说明程序实现什么功能。
3.编写程序1:编程计算从1到100的和。

4编写程序2:设内存中以BUFFER为首地址的缓冲区中有若干个非压缩BCD码形
式存放的十进制数,并以符号“﹩”结束。它们的值可能是0~9中的任意一个。编程
将这些十进制数顺序显示在屏幕上。
5编写程序3:画出流程图,并编程S=1+2×3+3×4+4×5+…+N×(N+1),直到N大于
200为止,并将结果由屏幕上显示出来。
实验步骤
1. 调试程序1:统计字型变量中1的个数,存储于字节变量Y中。
源程序如下:
DATA SEGMENT
X DW 63H
Y DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA
MOV DS, AX
MOV AX, X
MOV BL, 0
MOV CX,16
AGAIN: ROL AX,1
JNC NEXT
INC BL
NEXT: LOOP AGAIN
MOV Y, BL
EXIT: MOV AX, 4C00H
INT 21H
CODE ENDS
END START

上机运行该程序并检查运行结果是否正确。
2.调试程序2:
DATA SEGMENT
ARRAY DB 34,56,0,58,79,0,0,28,98H
COUNT EQU $ - ARRAY
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV CX,COUNT
MOV BX,-1
AGAIN: INC BX
CMP ARRAY[BX],0
LOOPNZ AGAIN
JZ OK
MOV DL,'N'
JMP SHOW
OK: MOV DL,BL
OR DL,30H
CMP DL,30H
JBE SHOW
ADD DL,7
SHOW :MOV AH,2
INT 21H
EXIT: MOV AX,4C00H
INT 21H
CODE ENDS
END START
上机运行该程序,查看其显示结果,并说明程序实现什么功能。
3. 编写程序1源程序清单如下。
DATA SEGMENT
X DW 0
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV CX,100
MOV BX,0
BEGIN: INC BX
ADD X,BX
LOOP BEGIN
MOV AH,4CH
INT 21H
CODE ENDS
END START
4.编写程序2源程序清单如下。
DATA SEGMENT
BUFFER DW 48,49,50,51,52,53,54,55,56,57
COUNT EQU $ -BUFFER
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET BUFFER
MOV CX,COUNT
AGAIN: MOV AX,[BX]
CMP CX,0
JZ EXIT
MOV DX,AX
MOV AH,2
INT 21H
MOV AX,DX
ADD BX,2
DEC CX
LOOP AGAIN

EXIT: MOV AH,4CH
INT 21H
CODE ENDS
END START

5.编写程序3源程序清单如下。
DATA SEGMENT
BUF DB 'S=1+2*3+3*4+...+N*(N+1)...=','$'
RES DW 4 DUP(0),'$' ;显示用来存放计算结果
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET BUF;显示S=1+2*3+3*4+...+N*(N+1)...=
MOV AH,09H
INT 21H
MOV DX,1;设置DX的初值为1
MOV BL,2
NEXT: MOV AL,BL;计'算1+2*3+3*4+...+N*(N+1)
INC BL
MUL BL
ADD DX,AX
CMP BL,201
JNA NEXT
MOV CX,0004H
MOV DI,OFFSET RES
ADD DI,03H
NEXT1:MOV AX,DX;对RES变量中的数字位A~F的处理
AND AX,000FH
CMP AL,07
NEXT2:ADD AL,30H;对RES变量中的数字位0~9的处理
MOV [DI],AL
DEC DI
PUSH CX ;保护当前CL值
MOV CL,04
SHR DX,CL
POP CX ;恢复CL值
LOOP NEXT1
MOV DX,OFFSET RES;显示计算结果
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START

四、实验结果与分析
1.调试程序1的运行结果如下。
通过结果说明程序运行结果正确。
2.调试程序2的运行结果如下。
说明程序实现的功能是查找0第一次出现的位置。

通过结果说明程序运行结果正确。
1. 编写程序1运行结果如下。
4.编写程序2运行结果如下。

5.编写程序3运行结果如下。
实验情况与体会:通过本次上机实验,学习了数值转换。实验过程中,遇到很多问题,比
如程序一的编写,基本上都是学习书本以及依靠书本多做题才编出来的,仅有的几次上机实验,
要抓紧时间学习和交流,时间挺少的。在今后的学习和生活中,我们都需要相互学习、相互交
流,共同进步。学习是一个循序渐进的过程。

通过这次实验,使我了解到运行调试程序的不易,今后一定更加努力,把程序做到最好!对
于不足之处,会积极改正。

相关文档
最新文档