汇编实验报告52352019

合集下载

【实验】汇编实验报告

【实验】汇编实验报告

【关键字】实验实验一汇编程序的汇编及运行1.实验目的和要求(1)熟悉汇编程序的汇编、连接、执行过程(2)生成LST文件,查看LST文件(3)生成OBJ文件,修改语法错误(4)生成EXE文件(5)执行2.实验环境IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS 2.0以上;调试程序:;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。

3.实验内容及实验数据记录(1)将数据段输入,取名1.txt,保存在MASM文件夹下。

生成LST文件,(不必连接、运行)用EDIT查看1.LST文件。

试回答:DA1,DA2的偏移量分别是多少?COUNT的值为多少?DA TA SEGMENTORG 20HNUM1=8NUM2=NUM1+10HDA1 DB ‘IBM PC’DA2 DB 0AH, 0DHCOUNT EQU $-DA1DATA ENDSEND(2)输入有错误的文件,修改错误语句。

(MASM没有出现错误即可。

不必连接、运行。

)DA TA SEGMENTV AR1 DB 0, 25, ODH, 300V AR2 DB 12H, A4H, 6BHV AR3 DB ’ABCDEF’V AR4 DW 1234H, 5678HV AR5 DW 10H DUP(?)DATA ENDSCODE SEGMENTASSUME CS: CODE, DE: DA TABEING MOV AX, DA TAMOV DS, AXLEA SI, V AR5MOV BX, OFFSET V AR2MOV [SI], 0ABHMOV AX, V AR1+2MOV [BX], [SI]MOV V AR5+4, V AR4MOV AH, 4CHINT 21HCODE ENDSEND START(3)输入正确的程序,汇编、连接、运行STACKS SEGMENT STACKDW 128 DUP(?)STACKS ENDSDATAS SEGMENTSTRING DB ‘WELCOME!’, 13, 10, ‘$’DATAS ENDSCODES SEGMENTASSUME CS: CODES, DS: DATAS START:MOV AX, DA TASMOV DS, AXLEA DX, STRINGMOV AH, 9INT 21HMOV AH, 4CHINT 21HCODES ENDSEND START 1.算法描述及实验步骤1.(1)生成1.st文件(2)用EDIT查看文件2.修改后正确算法:DATA SEGMENTV AR1 DB 0, 25, 0DH, 30V AR2 DB 12H, 0A4H, 6BHV AR3 DB 'ABCDEF'V AR4 DW 1234H, 5678HV AR5 DW 10H DUP(?)DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATA BEING: MOV AX, DATAMOV DS, AXLEA SI, V AR5MOV BX, OFFSET V AR2MOV byte ptr[SI], 0ABHMOV AL, V AR1+2MOV AX, [SI]MOV [BX], AXMOV AX, V AR4MOV V AR5+4, AXMOV AH, 4CHINT 21HCODE ENDSEND BEING5.调试过程1.程序没有错误,结果:2.程序运行出现错误:问题及改正:(1). 2.asm(2): error A2009: Symbol not defined: ODH 表示没有定义ODH;出错语句VAR1 DB 0, 25, ODH, 300,这里的 ODH应该为 16进制数的0DH。

汇编实验报告

汇编实验报告

实验一(1)熟悉汇编语言程序调试环境及顺序程序设计一、实验目的及要求:1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。

2.学会使用EDIT、MASM、LINK、DEBUG等软件工具。

3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。

二、熟悉汇编语言程序调试环境1.汇编语言源程序的建立本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。

设定源程序的文件名为ABC。

DATA SEGMENTBUF DB 23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FHCN EQU $-BUFDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: PUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV BX,OFFSET BUFMOV CX,CNDEC CXMOV AL,[BX]INC BXLP: CMP AL,[BX]JBE NEXTMOV AL,[BX]NEXT: INC BXDEC CXJNZ LPMOV AH,4CHINT 21HCODE ENDSEND START键入以下命令:C:\>EDIT ABC.ASM此时屏幕的显示状态如图1所示。

图1 用EDIT编辑ABC.ASM程序窗口程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。

2.将源程序文件汇编成目标程序文件一般情况下,MASM汇编程序的主要功能有以下3点:(1)检查源程序中存在的语法错误,并给出错误信息。

(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。

(3)若程序中使用了宏指令,则汇编程序将展开宏指令。

源程序建立以后,在DOS状态下,采用宏汇编程序MASM对源程序文件进行汇编,其操作过程如图2所示。

汇编综合性实验报告

汇编综合性实验报告

实验报告一、实验目的《汇编语言程序设计》是计算机专业的重要的专业基础课,通过本综合性、设计性实验使学生进一步巩固课堂所学,全面熟悉、掌握8088宏汇编语言程序设计的基本方法和技巧,进一步提高编写程序、阅读分析程序及上机操作、调试程序的能力。

二、实验要求用键盘选择计算机演奏乐曲,程序运行时首先在屏幕上显示出乐曲名单,当从键盘上输入乐曲的序号时,计算机则演奏所选择的乐曲,当键盘上按下Q键时,演奏结束。

三、实验原理分析(一)发音原理计算机有两种产生声音的方法,一种方法是通过I/O指令向设备寄存器(端口地址为61H)的第1位交替送1和0,使与第1位相连的扬声器脉冲门产生连续的脉冲电流,驱动扬声器发出声音。

另一种方法是利用8254(系统定时器)中的2号定时器向扬声器发送不同频率的脉冲,使之产生音调高低不同的声音,这种产生声音的方法可使计算机演奏出各种乐曲。

本程序选用定时器产生声音。

ROM BIOS中的BEEP子程序能根据BL中给出的时间计数值控制8254定时器,产生持续时间为1个或几个0.5秒、频率为896HZ的声音。

通过对BEEP的修改,可以使其产生任一频率的声音。

用汇编语言编写的程序GENSOUND,能使PC机发出指定频率和指定延迟时间的声音,它是一个很好的通用发声程序。

组成乐曲的每个音符的频率值和持续时间是乐曲发声程序所必须的两组数据,知道了音调及频率的关系后,就可以按照乐曲的乐谱将每个音符的频率和持续时间定义成两个数据表,然后编程依次取出表中的频率值和时间值,调用GENSOUND程序发出各种声音。

但GENSOUND程序产生的声音不仅与输入频率有关,而且与CPU有关。

如果80X86的工作频率为8MHZ(如IBM PS/ 2-25型),则T=125ns(1 /8MHz=125ns),那么上面程序产生的时间延迟就要短的多。

在80286中,LOOP指令只需8个执行周期,而不是17个执行周期,这也会使延迟时间缩短很多。

汇编语言实验报告

汇编语言实验报告

汇编语言实验报告实验一汇编语言的源程序的输入一、实验目的1.通过实验了解和熟悉微机系统的配置2.学习在DEBUG状态下输入汇编源程序的方法3.初步掌握调试(在DEBUG状态下)的过程二、实验原理1.本实验在DEBUG状态下输入汇编源程序,并且用DEBUG命令进行调试,用单步跟踪的方法试验指令的功能;2.以下是给定的参考程序,并在实验时每条指令的“;”等号右边按要求填写指令的分析结果。

三、实验步骤1.开机后进入DOS系统2.用DEBUG的REGISTER命令检查所有寄存器内容,并作记录R[寄存器名]3.用DEBUG的ASSEMBLE命令输入汇编源程序A[内存地址]4.用DEBUG的UNASSEMBLE命令反汇编U[起始地址][终止地址]5.用DEBUG的TRACE命令单步跟踪程序T[起始地址][终止地址]6.用DEBUG的DUMP命令显示存贮器单元的内容四、参考程序及结果MOV AX,2000 ;AL=00MOV DS,AX ;DS=2000NOT AX ;AX=DFFFXOR AX,AX ;AX=0000DEC AX ;AX=FFFFINC AX ;AX=0000MOV BX,2030 ;BH=20MOV SI,BX ;SI=2030MOV [SI],BL ;[2030H]=30MOV WORD PTR[SI],10F ;[2030H]=0F [2030H]=01 MOV DI,SI ;DI=2030MOV [DI+50],BH ;[DI+50]=20MOV BH,[SI] ;BH=0FMOV BL,[DI+50] ;BL=20MOV SP,5000PUSH AX ;AX=0 [SS:4FFEH]=00H [SS:4FFFH]=00H PUSH BX ;BX=0F20 [SS:4FFCH]=20H [SS:4FFDH]=0FH POP AX ;AX=0F20POPF ;F=00000000NEG BX ;BX=F0E0XCHG BX,AX ;BX=0F20STD ;F=01010001STI ;F=01110001CLD ;F=00110001CLI ;F=00010001ADC DI,2050 ;DI=4081 F=00000010ADC SP,DI ;SP=9081 F=10010010ADC AX,1500 ;AX=05E0 F=00000001SUB AX,BX ;AX=F6C0 BX=0F20SHL AH,1 ;AH=ECRCL AX,1 ;AX=D981SHR BX,1 ;BH=07RCR BL,1 ;BL=90MOV CL,4MOV DX,80F0ROL DX,CL ;DX=0F08 CL=04INT 20 ;CS=00A7 IP=1072实验二数据的建立与传送程序一、实验目的1.学习DEBUG命令2.验证指令的功能二、实验原理在DEBUG状态下,输入程序,用G命令进行连续方式执行程序,用DUMP命令查看建立的数据块内容三、参考程序及结果1.在内存1000单元开始,建立00H~0FH~00H 31个数,要求00H~0FH数据逐渐增大,0FH~00H逐渐减小,程序从内存CS:0100H地址开始输入MOV AX ,100HMOV DS ,AXMOV SI,0MOV CL ,0FHXOR AX,AXPPE1: MOV [SI] ;ALINC SI ;INC ALDEC CLJNZ PPE1MOV CX,10HPPE2:MOV[SI],ALINC SIDEC ALLOOP PPE2INT 20H数据块的内容1000:0000:00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 1000:0100:0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 002.把上一程序的执行结果分几种方式传送到以下指定区域(a)该程序从内存CS:0150H开始输入,把数据块传送到15050H 开始的存储区域中MOV AX,1000HMOV DS,AXMOV SI,0MOV DI,5050HMOV CX,1FHPPEA: MOV AL,[SI]MOV [DI],ALINC SIINC DILOOP PPEAINT 20H结果:1000:5050 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 1000:5060 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00(b)用串传送指令MOVSB,把数据块传送到15150H开始的区域,该程序从内存CS:0200H开始输入MOV AX,100HMOV DS,AXMOV ES,AXMOV SI,0MOV DI,5150HMOV CS,1FHCLDPPEB: MOVSBLOOP PPEBINT 20H结果:1000:5150 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 1000:5160 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00(C)用重复串操作指令”REP MOVSB”把数据传送到15250H开始的区域,该程序从CS:250H地址开始输入MOV AX,1000HMOV DS,AXMOV ES,AXMOV SI,0MOV DI,5250HMOV CX,1FHCLDREPZMOVSBINT 20H结果:1000:5250 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 1000:5260 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00(c)用串操作的减量工作方式,把数据传送到25050H开始的区域,该程序从CS:0300H开始输入MOV AX,1000HMOV DS,AXADD AX,AXMOV ES,AXMOV SI,1EHMOV DI,506EHMOV CX,1FHSTDREP MOVSBINT 20H结果:2000:5050 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 2000:5060 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00实验四统计学生成绩程序一、实验目的进一步掌握分支程序和循环程序的编写方法二、实验原理设有10个学生的成绩分别为56,69,84,82,73,88,99,63,100和80分。

汇编实验报告

汇编实验报告

汇编语言实验报告学院:计算机学院专业:网络工程指导老师:纪平实验一汇编语言程序调试方法一、实验目的,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,编写一个程序:比较2个字符串所含的字符是否相同。

若相同则显示’Match.’,否则显示’No match!’。

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

四、实验步骤1,在DOS提示符下,进入masm目录。

2,在MASM目录下启动edit编辑程序,输入源程序,并对其进行汇编、连接和运行。

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

例:edit abc.asm(2)用汇编程序masm对源程序汇编产生目标文件obj。

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

例:link abc(4)执行程序3,详细记录每一步所用的命令,以及查看结果的方法和具体结果。

五、实验结果1,输入sample.asm的源码;PROGRAM TITLE GOES HERE--Compare string;************************************************************************** **datarea segment ;define data segmentstring1 db 'Move the cursor backward.'string2 db 'Move the cursor backward.';mess1 db 'Match',13,10,'$'mess2 db 'No match!',13,10,'$'datarea ends;************************************************************************** **program segment ;define code segment;----------------------------------------------------------------------------main proc farassume cs:program,ds:datarea,es:datareastart: ;starting execution address;set up stack for returnpush ds ;save old data segmentsub ax,ax ;put zero in AXpush ax ;save it on stack;set DS register to current data segmentmov ax,datarea ;datarea segment addrmov ds,ax ;into DS registermov es,ax ;into ES register;MAIN PART OF PROGRAM GOES HERElea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx,mess1disp:mov ah,09int 21hret ;return to DOSmain endp ;end of main part of program;--------------------------------------------------------------------program ends ;end of code segment;****************************************************************** **end start ;end assembly2,汇编生成目标文件3,连接生成exe文件4,执行程序5,调试程序-g命令在debug环境下运行该文件-d0(-d ds:ea)命令显示指定数据段地址中的内容-u命令显示汇编源程序-e ds:ea更改指定位置的内容实验二用DEBUG编程使用堆栈段AX和BX的内容进行交换等一、实验目的:1、熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。

汇编语言实验报告

汇编语言实验报告

汇编语言实验报告一、实验目的(1)熟悉汇编程序的汇编、连接、执行过程;(2)生成LST文件,查看LST文件;(3)生成OBJ文件,修改语法错误;(4)生成EXE文件;(5)执行程序。

二、实验涉及知识汇编程序从编写到执行的过程编程?.ASM?编译?.OBJ?连接?.EXE?加载?内存中的程序?执行1)编写源程序用EDIT或记事本输入各段,并存储成源程序(保存在MASM目录下),扩展名为ASM。

2)对源程序进行汇编、连接操作如下:(1)在DOS状态下,进入MASM目录;(2)输入命令:MASM 文件名(连同扩展名);(3)在系统出现的提示中输入:object filename[.obj]:按回车键。

Source listling[nul.lst]:输入:文件主名,生成lst文件,也可以不生成,直接按回车键。

Lst文件用于查看编译为目标文件的过程中产生的中间结果。

Cross-reference [nul.crf]:按回车键。

(4)如果系统没有提示出错,那么编译过程就完成了。

如果提示错误则应用edit打开源文件进行修改,然后再重复2和3步骤。

(5)输入:link 文件主名(不要输扩展名,也可以输入扩展名.obj)run file [.exe]:按回车键。

List file [nul.map]:按回车键。

Libraries [.lib]:按回车键。

(6)没有提示错误,汇编过程就结束了,产生了exe可执行文件。

如果出现‘no strack segment’的错误警告,不用理会。

3)执行程序(由DOS中的COMMAND命令将文件加载入内存)在DOS提示符下直接输入文件主名就可以执行文件了。

程序执行后,有的会显示结果,有的可能执行后什么结果都没有,是因为程序中没有显示命令。

三、实验内容1)将下面的数据段输入,取名1.ASM,保存在MASM文件夹下。

生成LST文件,(不必连接、运行)用EDIT查看1.LST文件。

汇编实验报告

汇编实验报告

汇编实验报告概述:本次实验主要通过汇编语言的学习和实践,加深对汇编语言的理解并掌握其基本操作和使用方法。

我们使用了x86汇编语言,以及相关的工具和环境。

一、实验背景汇编语言是计算机底层的一种编程语言,通过对计算机底层指令的直接操作,可以实现对硬件的控制。

汇编语言是学习高级编程语言的基础,也是了解计算机运行机理的关键。

二、实验目的1. 理解汇编语言的基本原理和特点;2. 掌握汇编语言的基本指令和语法;3. 学会使用汇编语言进行简单的程序设计和调试。

三、实验环境和工具1. 操作系统:Windows 10;2. 开发工具:MASM(Microsoft Macro Assembler);3. 测试工具:DOSBox。

四、实验过程1. 安装和配置实验环境首先,我们需要安装和配置MASM和DOSBox。

MASM是一款由微软开发的汇编语言开发工具,通过它可以将汇编语言代码转化为可执行文件。

DOSBox是一个模拟DOS环境的工具,能够在现代操作系统上运行旧版的DOS程序。

2. 学习和练习基本指令接下来,我们通过学习和练习基本指令,来掌握汇编语言的基本用法。

我们开始学习如何在汇编语言中定义和初始化变量,以及如何进行算术运算和逻辑运算。

同时,我们还学习了如何使用循环和条件语句。

3. 编写和运行简单程序在掌握了基本指令之后,我们开始编写一些简单的程序,并通过MASM将其转化为可执行文件。

我们编写了一个通过计算两个数的和来演示算术运算的程序,并使用DOSBox来运行这个程序,观察其运行结果。

4. 调试和优化程序在运行程序的过程中,我们发现了一些问题和bug。

我们使用调试工具对程序进行调试,通过逐步执行代码并观察变量的值来发现问题所在。

我们找到了一个变量定义错误的bug,并进行了修复。

此外,我们还通过代码优化来提高程序的性能和效率。

五、实验结果和分析经过一系列的实验和练习,我们成功地掌握了汇编语言的基本操作和使用方法。

我们能够编写简单的汇编程序,并通过MASM将其转化为可执行文件。

汇编实验报告

汇编实验报告

汇编实验报告一、实验目的本次汇编实验的主要目的是深入了解汇编语言的基本语法和编程结构,掌握汇编程序的编写、调试和运行过程,提高对计算机底层硬件的理解和操作能力。

二、实验环境1、操作系统:Windows 102、编程工具:MASM(Microsoft Macro Assembler)三、实验内容1、数据传送与运算编写程序实现不同寄存器之间的数据传送。

进行简单的算术运算,如加法、减法、乘法和除法,并将结果存储在指定的寄存器或内存单元中。

2、逻辑运算与移位操作进行逻辑运算,包括与、或、非和异或操作。

实现移位操作,如左移和右移,并观察数据的变化。

3、分支与循环结构使用条件跳转指令实现分支结构,根据不同的条件执行不同的代码段。

运用循环指令实现循环操作,如计数循环和条件循环。

4、子程序调用编写子程序来完成特定的功能,如计算阶乘、查找最大值等。

在主程序中调用子程序,并传递参数和获取返回值。

四、实验步骤1、数据传送与运算打开 MASM 编程工具,新建一个汇编源文件。

使用 MOV 指令将数据从一个寄存器传送到另一个寄存器,例如:MOV AX, BX 。

进行加法运算,使用 ADD 指令,如:ADD AX, CX 。

进行减法运算,使用 SUB 指令,如:SUB DX, BX 。

乘法运算使用 MUL 指令,除法运算使用 DIV 指令,并将结果存储在合适的位置。

2、逻辑运算与移位操作在源文件中使用 AND 、OR 、NOT 和 XOR 指令进行逻辑运算,例如:AND AX, BX 。

对于移位操作,使用 SHL (左移)和 SHR (右移)指令,如:SHL AX, 2 表示将 AX 的值左移 2 位。

3、分支与循环结构使用 CMP 指令比较两个值,然后根据比较结果使用 JZ (等于零跳转)、JL (小于跳转)、JG (大于跳转)等条件跳转指令实现分支结构。

对于循环结构,使用 LOOP 指令实现计数循环,例如:MOV CX, 10 ;LABEL: ;LOOP LABEL 。

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

(此文档为word格式,下载后您可任意编辑修改!)实验三循环程序设计一、预习内容1.多重循环程序和排序程序设计方法。

2.带符号数的比较转移指令:JL,JLE,JG,JGE二、目的要求1.掌握多重循环程序和排序程序设计方法。

2.掌握带符号数的比较转移指令:JL,JLE,JG,JGE三、实验内容建立学生名次表,以grade为首地址的数组中保存了学生的成绩,其中grade+i 保存学号为i+1的学生的成绩。

要求建立一个10个字的rank数组,并根据grade中的学生成绩将学生名次填入rank数组中,其中rank+i的内容是学号为i+1学生的名次(提示:一个学生的名次等于成绩高于该学生的人数加1).四、程序流程图五、程序DSEG SEGMENTgrade dw 90,60rank dw 10 dup(?) DSEG ENDSCSEG SEGMENTassume cs:CSEG, ds:DSEG start: mov ax, dsegmov ds, axmov di,10mov bx,0lea bp,rankl: lea si,grademov dx,1mov cx,10mov ax,[si+bx] next: cmp ax,[si]jge no_countinc dxno_count: add si,2loop nextmov [bp],dxadd bp,2add bx,2dec disub di,0jne lmov ax, 4c00hint 21hCSEG ENDSend start六、实验结果JGE情况下的排序结果转移指令为JG 时的排序结果:转移指令为JL时的排序结果:转移指令为JLE 时的排序结果:实验四分支程序设计一、预习内容1.分支程序设计方法。

2.利用转移指令jl、jmp实现多岔分支的方法。

二、目的要求1.掌握分支程序设计方法。

2.掌握利用转移指令jl、jmp实现多岔分支的方法。

三、实验内容统计学生成绩result。

设有10个学生的成绩分别为56、69、84、82、73、88、99、63、100和80分。

试编制程序分别统计低于60分、60~69分、70~79分、80~89分、90~99分及100分的人数,并分别存放到s5、s6、s7、s8、s9及s10单元中四、实验程序DSEG SEGMENTgrade dw 100,80s5 dw 0s6 dw 0s7 dw 0s8 dw 0s9 dw 0s10 dw 0DSEG ENDSCSEG SEGMENTassume cs:CSEG, ds:DSEGstart: mov ax, dsegmov ds, axmov cx,10mov bx,offset gradecompare:mov ax, [bx]cmp ax,60jl fivecmp ax,70jl sixcmp ax,80jl sevencmp ax,90jl eightcmp ax,100jne nineinc s10jmp short change_addrnine:inc s9jmp short change_addreight:inc s8jmp short change_addrseven:inc s7jmp short change_addrsix:inc s6jmp short change_addrfive:inc s5change_addr:add bx,2loop comparemov ax, 4c00hint 21hCSEG ENDSend start每次执行转移指令时寄存器cs ip的值最终运行结果五、程序流程图实验五子程序设计一、预习内容1.子程序调用方法和参数传递方式。

2.过程调用伪指令: PROC,ENDP和NEAR。

3.子程序调用中堆栈的用法。

4.简化格式程序设计方法。

二、目的要求1.掌握子程序调用方法和参数传递方式。

2.掌握过程调用伪指令: PROC,ENDP和NEAR。

3.理解子程序调用中堆栈的用法。

4.熟悉简化格式程序设计方法。

三、实验内容显示学生名次表rank。

要求接收从键盘输入的一个班的学生成绩,并存放于10字的grade数组中,其中grade+i保存学号为i+1的学生的成绩。

然后根据grade中的学生成绩,把学生名次填入10字的rank数组中,其中rank+i的内容是学号为i+1学生的名次。

再按学号把名次从终端显示出来。

四、流程图1、Input2、output3、rankp五、实验程序.model small.stack.datagrade dw 10 dup(?)rank dw 10 dup(?)count dw ?mess1 db 'Grade?','$'mess2 db 13,10,'Iput Error!''$' mess3 db 'Rank:','$'.codemain proc farstart : mov ax, @datamov ds, axcall inputcall rankpcall outputmov ah,1int 21hmov ax, 4c00hint 21hmain endpinput proc nearmov dx,offset mess1mov ah,09int 21hmov si,0mov count,0enter:call decibininc countcmp dl,','je storecmp dl,13 ;is it 'return'?je exit2jne errorstore:mov grade[si],bxadd si,2jmp entererror:lea dx,mess2mov ah,09int 21hmov grade[si],bxcall crlfretinput endprankp proc nearmov di,countmov bx,0loop1:mov ax,grade[bx]mov word ptr rank[bx],0mov cx,countlea si,gradenext:cmp ax,[si]jg no_countinc word ptr rank[bx] no_count:add si,2loop nextadd bx,2dec dijne loop1retrankp endpoutput proc nearlea dx,mess3mov ah,09int 21hmov si,0mov di,countnext1:mov bx,rank[si]call binidecmov dl,','mov ah,02int 21hadd si,2jnz next1call crlfretoutput endp decibin proc near s:mov ah,1int 21hcmp al,30hja ba1mov al,8hmov dl,almov ah,2int 21hjmp sba1:cmp al,39hjb ba2mov al,8hmov dl,almov ah,2int 21hjmp sba2:sub al,30hmov bl,10mul blmov bl,als1:mov ah,1int 21hcmp al,30hja ba11mov al,8hmov dl,almov ah,2int 21hjmp s1ba11:cmp al,39hjb ba21mov al,8hmov ah,2int 21hjmp s1ba21:sub al,30h add bl,almov ah,1int 21hmov dl,alretdecibin endp binidec proc near push bxpush cxpush sipush dimov cx,100d call dec_div mov cx,10dcall dec_div mov cx,1call dec_divpop dipop sipop cxpop bxretbinidec endpdec_div proc nearmov ax,bxmov dx,0div cxmov bx,dxmov dl,aladd dl,30hmov ah,02hretdec_div endpcrlf proc nearmov dl,0dhmov ah,02hint 21hmov al,10mov dl,almov ah,2int 21hretcrlf endpend main实验结果观察call input,call rankp,call output三条指令后sp,bp以及[sp]的值InputRankOutput实验六综合程序设计一、预习内容1. DOS中断,字符输入输出的方法.2.综合程序设计方法二、目的要求1.熟悉DOS中断,掌握字符输入输出的方法.2.继续熟悉基本程序设计方法,包括循环程序设计,分支程序设计和子程序设计等.3.练习综合程序设计方法三、实验内容数据区存放有10个正数,要求自己编写一个完整的程序实现这10个数的排序,具体要求如下:1.显示未排序的10个数据;2.提示输入排序方法,是按从大到小还是从小到大;3.从键盘输入‘H’或者‘L’决定数据是按从大到小还是从小到大的顺序排列,如果从键盘输入‘H’,则按从大到小顺序排列,如果输入‘L’,则按从小到大顺序排列,否则提示输入错误,请重新输入;4.显示最后的排序结果。

四、实验步骤1.认真阅读实验要求,编写源程序;2.编译,链接,生成可执行文件,记录编译过程中的错误,并分析原因;3.编译通过后,调式程序,直至得到正确的结果。

五、程序流程图六、实验程序DSEG SEGMENTstring1 db 'small to large press L,large to small press H','$'string2 db 'input error,try it again','$'mess1 dw 90,80co dw 10mess2 dw 10 dup(?)DSEG ENDSCSEG SEGMENTassume cs:CSEG, ds:DSEG, es:DSEG start: mov ax, dsegmov ds, axmov es, axmov cx,10call shlea bx,mess1lea bp,mess1lea dx,string1jmp inputlop:lea dx,string2input:mov ah,9int 21hmov al,13mov dl,almov ah,2int 21hMOV AL,10mov dl,almov ah,2int 21hmov ah,1int 21hcmp al,48hje pahcmp al,4chjne loplea bx,mess1lea si,mess1pal:mov cx,comov ax,[bx]mov si,bxll:cmp ax,[si] jb nextlxchg ax,[si]nextl:add si,2loop llmov [bx],ax add bx,2 ADD SI,2dec comov cx,coadd cx,1loop palJMP KKmov ax,10mov co,axpah:mov cx,comov ax,[bx] mov si,bxhh:cmp ax,[si] ja nexthxchg ax,[si] nexth:add si,2loop hhmov [bx],ax add bx,2dec comov cx,coadd cx,1loop pahKK:mov al,10mov dl,almov ah,2int 21hmov al,13mov dl,almov ah,2int 21hmov al,10mov dl,almov ah,2int 21hMOV AH,1INT 21Hmov ax,4c00h int 21hsh proc nearlea bx,mess1 mov cx,10 show:mov ax,[bx] mov dl,10div dladd al,30hmov dl,almov al,ahpush cxpush axmov ah,2int 21hpop axadd al,30hmov dl,almov ah,2int 21hmov dl,','mov ah,2int 21hadd bx,2loop showretsh endpCSEG ENDSend start实验结果。

相关文档
最新文档