8086汇编语言程序设计实验指导书.

8086汇编语言程序设计实验指导书.
8086汇编语言程序设计实验指导书.

汇编语言上机实验指导书

一、概述

上机实验总学时为16学时,其中综合性实验为2学时。实验共有6项暂定为8次,每次2学时。

1.实验辅导的主要内容

实验辅导的内容包括每个实验的实验目的;实验内容;对实验的算法及实验方法的必要说明;实验准备;实验步骤;实验报告要求;实验程序及参考框图。开始的实验介绍较细,后面的实验简要介绍。

2.实验的软硬件要求

关于汇编语言程序设计的硬件要求不高,有IBM-PC/XT即可,但应有彩色显示器以便进行图形实验。软件方面应有MASM.EXE5.0版(包括LINK.EXE),与MS-DOS版本配套的DEBUG程序和EDIT.EXE编辑软件(其它编辑软件也可以)。

3.加强实践能力的培养

实验目的不光是为了验证书本理论,更重要的是对实践能力的培养。其中包括:

实际调试程序的能力,例如修改程序参数的能力,查看结果的能力,设置断点调试运行的能力等;

开发汇编语言应用程序的能力,例如应用有关汇编软件的能力,进行系统调用和BIOS功能调用的能力,进行模块程序设计的能力等。

对某一问题用不同的程序实现的能力,例如我们为每个实验提供了参考程序(或程序段),目的是让每个实验者参照样板程序将实验成功地实现,在掌握其方法后,自己改变程序或自己编制程序加以实现。

实验一汇编语言运行环境及方法、简单程序设计(2学时、验证性)

1.实验目的:

(1) 熟悉汇编语言运行环境和方法

(2)了解如何使用汇编语言编制程序

(3) 熟悉DEBUG有关命令的使用方法

(4) 利用DEBUG掌握有关指令的功能

(5) 利用DEBUG运行简单的程序段

2.实验内容

(1)学会输入、编辑汇编语言程序

(2)学会对汇编语言程序进行汇编、连接和运行

(3)进入和退出DEBUG程序

(4)学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。对于U命令、N命令、W命令等,也应试一下。

3.实验准备

(1)仔细阅读有关汇编语言环境的内容,事先准备好使用的例子。

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

(3) 编写一个程序:比较2个字符串所含的字符是否相同。若相同则显示’Match.’,否则显示’No match!’;(1)仔细阅读有关DEBUG 命令的内容,对有关命令,都要事先准备好使用的例子。

4.实验步骤

(1)在DOS提示符下,进入MASM目录。

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

①调用edit输入、编辑源程序并保存在指定的目录中;例:edit abc.asm

②用汇编程序masm对源程序汇编产生目标文件obj。例:masm abc

不断修改错误,直至汇编通过为止。

③用连接程序link产生执行文件exe.例:link abc

④执行程序

可直接从DOS执行程序,即在DOS环境中,输入文件名即可。

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

5.实验报告要求

(1)源程序清单。

(2) 如何启动和退出EDIT程序。

(3) 如何对源程序进行汇编及编辑。

(5)整理每个DEBUG命令使用的方法,实际示例及执行结果。

(6)启动DEBUG后,要装入某一个.EXE文件,应通过什么方法实现?

实验二循环程序、分支程序程序设计实验(4学时、验证性)

1.实验目的:

(1)掌握循环、分支程序的设计方法

(2)进一步熟悉利用DEBUG程序修改参数的方法,并检查和验证结果的正确性。

(3)学会针对不同的问题,选用不同的组织循环的方法。

2.实验内容

(1)编写一个程序S21,将内存中一组有符号的字数组按递增的序列排序,并将其中的二进制数以十六进制的形式显示在屏幕上。

(2)编写一个程序S22,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。

3.实验准备

(1)编写实验内容要求的两个程序。

(2)写出调试以上程序,即修改程序参数,检查结果的操作方法。

(3)熟悉源程序汇编、连接命令的使用方法即要回答的内容。

4.实验步骤

(1)用EDIT或其它编辑软件,编写.ASM源程序,例如S21.ASM及S22.ASM。

(2)对其进行汇编及连接,产生.EXE文件。

(3)对.EXE文件进行调试运行。

a.用DEBUG调试运行,学会修改AL内容的方法。

b.对DSPKEY.EXE键入不同的字符,分别进行调试。

c.在MS-DOS下运行这两个.EXE文件。

5.实验报告要求

(1)画出两个程序的流程图,若要独立编写程序,应列出相应的程序清单。

(2)说明本实验是如何利用DEBUG进行调试的。

实验三子程序设计(4学时、验证性)

实验3.1、本实验的目的在于让同学们掌握同一模块调用的方法。

1.实验目的

(1)掌握主程序与子程序之间的调用关系及调用方法。

(2)掌握子程序调用过程中近程调用与远程调用的区别。

(3)掌握通过堆栈转送参数的方法。

2.实验内容

(1)编写程序S31,将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。要求码型转换通过子程序HEXASC实现,在转换过程中,通过子程序DISP实现显示.

(2)编写一个主程序S32,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符’b’的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符"b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。

3.实验说明

(1)第一个实验程序用子程序的近程调用实现。由于在调用HEXASC子程序时,子程序又调用了DISP子程序,这叫子程序的嵌套调用。实验过程中可以从堆栈的内容看到两个子程序的返回地址值。由于是近调用,地址值只包括返回地址的段内偏移量。在每个子程序的执行中,检查CS值是不变的。

(2)第二个程序是利用远调用的方法调用子程序的。在远调用情况下,主程序与子程序处在不同的逻辑代码段中,可在子程序执行中查看CS值,它与主程序中的CS值是不同的。子程序调用后,堆栈中保留了返回地址的段地址及段内偏移量。

(3)第二个程序中,主程序与子程序之间参数的传送是由堆栈实现的。一段是将参数(此处是串首址TABLE,串的长度N及待统计的字符“b”)顺序压如堆栈,在子程序调用后,通过BP指针对堆栈中的参数访问,并将统计的结果通过堆栈返回。有关该方法的原理此处不再介绍。

4.实验准备

(2)熟悉键盘键入字符串及用堆栈传送参数的程序段编制方法。

5.实验步骤

(1)编辑、汇编两个源程序,生成相应的可执行文件(.EXE)

(2)用DEBUG的R 命令,T 命令或G命令和D命令检查远程调用及近程调用时堆栈的变化。特别是通过堆栈传送的参数和子程序取出的参数是返回参数的详细过程。

(3)检查程序执行的结果是否正确。

6.实验报告要求

(1)分析远程调用与近程调用的区别,在用DEBUG有关命令观察时,执行过程有何不同。

(2)说明用堆栈传送参数的过程及其具体方法。

(3)分析实验结果及所遇到问题,并说明解决的方法。

实验3.2、本程序的目的在于使读者掌握模块间调用子程序的编写方法.

1.实验目的

(1) 了解多模块程序设计方法。

(2) 学会使用PUBLEC和EXTRN 伪指令解决模块间的符号(如变量名,标号等)通信问题。

2. 实验内容

(1)编写一个子程序,将主程序设定的内存中字符串的小写字母转换成大写字母并显示出来.主程序S33用另一个模块编写。

(2)编写一个子程序,将主程序S34指定的字符所在的地址返回给主程序,字符串(字符串以$为结束标志)与主程序在同一个模块。

3.实验准备

(1)仔细阅读教材中有关模块间通信的方法及模块程序设计的方法。

(2)弄清伪指令PUBLIC及EXTRN的功能及用法。

4.实验步骤

(1)分别对实验1和实验2的主、子模块进行汇编,在连接时,将它们装配成一个以.EXE为扩展名的可执行文件.观察汇编及连接过程中有无错误.

(2)对.EXE 文件进行调试及运行.

(3)将实验1中的原字符串改为由键盘输入,然后由子模块将源串中的小写字母转换为大写字母,并将源串与转换后的两个字串分两行显示出来(设键入字串长度小于80个字符).

5.实验报告要求

(1) 画出相应的程序流程图。

(2)扼要总结多模块程序的特点和编写方法。

实验四输入/输出实验(2学时综合性实验)

1.实验目的

(1) 掌握输入输出程序设计的概念和方法。

(2) 了解PC机外围芯片8255、8259的功能。

(3)学习如何在PC机上编写具有输入输出功能的程序,包括8255、8259芯片的使用方法。

2.实验说明

本实验要求自行编写一个键盘输入处理程序,它可以完成键盘字符的读入并进行屏幕显示,本实验要利用IBM—PC系统的硬件结构,分别使用外围芯片8255及8259。

在本例中,利用8255A的A端做数据输入,对应的端口地址为60H;利用B端口作控制端输入,端口地址为61H。8255A的控制端口地址为63H 。本例的8259中断控制器,其IRQ1端用于键盘中断请求线。键盘通过它可以响CPU发出中断请求。8259的I/O 端口地址为21H,可以写入中断屏蔽字,以对8个中断源是否容许中断进行控制。在每次中断结束时,要通过I/O端口地址20H写回一个中断结束命令EOI ,使8259可以清除本次中断。

因此本实验既属于输入输出实验,也属于中断实验。

有关说明将详细地附在参考程序中。

3.实验内容

利用pc机键盘,编写一个读入并显示键盘输入的演示程序。该程序只接受常规字符(包括回车键及退格键),对特殊功能键不进行处理。在程序中设置这些特殊功能键对应0编号即可,凡是检测到键位编号为0值时,均忽略对它们的处理。有键按下时,送出的扫描码的D7位为0时,当键抬起时,扫描的码D7位为1,以判定键是否被按下。

(1) 预习输入输出程序设计的特点和方法。

(2) 仔细阅读参考程序,弄清外围芯片接口初始化的意义和方法。

5.实验步骤

(1) 建立源文件,并通过汇编和连接,产生可执行文件。

(2) 运行程序,观察常规字符键及功能键按下时程序的反应,

6.实验报告要求

(1) 给出程序框图,包括主程序框图、中断处理程序框图。

(2)说明输入输出程序设计的特点。

(3)讨论:将SHIFT键及右SHIFT 键也进行判别处理,它们的扫描码为42及54。为记录SHIFT键的按动状态,可设一个标志单元KBFLAG,右SHIFT按下,KBFLAG的D0位置1,左SHIFT按下,KBFLAG的D1位置1,放下左右的SHIFT键,KBFLAG的相应恢复为0。当程序工作时,应能显示上档键的字符。

实验五字符处理程序实验

1. 实验目的

(1)熟悉串操作指令的功能与应用

(2)掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序。

2.实验内容

(1) 字符串统计。自STRN开始的存储区中,有一个字符串,统计其中含有小写字母的个数,将统计结果以两位十进制数显示在屏幕上。

(2)在给定的字符串中,删除重复的字符,其余的字符向前递补。

3. 实验准备

(1)熟悉字符处理的方法和字符处理程序的设计;

(2)认真预习有关串操作的指令极其寻址方式的特点,能够正确使用串操作指令,并准备好数据。

(3)按正常的方法将删除字符程序编成子程序,规定子程序的入口和出口参数。

4.实验步骤

(1)用1号系统调用从键盘键入一个字符串,然后统计其中小写字母的个数。程序每次执行,都能得到不同的结果。

(2)编写一个在同一个字符串中删除字符,并将其余字符向前递补的程序。

5.实验报告要求

(1)对照参考程序,画出程序流程图。

(2)总结字符串处理的编程方法,提出改进和完善此类程序的设计方案。

实验六BIOS和DOS中断调用应用程序设计

1. 实验目的

(1)了解DOS、BIOS调用的基本功能、调用参数、返回参数。以及数据定义掌握中断通信程序的设计方法。

(2)掌握如何利用扫描码进行功能控制。

2. 实验内容

编写一个可以进行光标左右移动和插入字符的简单字处理程序。

3.实验准备

(1) 复习相关内容

(2)了解键盘的扫描码、ASCII码及其显示字符(如果存在可显示字符形式)之间的对应关系。

4. 实验步骤

(1) 建立源文件,汇编、连接产生可执行文件。

(2) 运行程序,使得可以输入字符和光标左右移动及字符的插入。

5. 实验报告要求

(1) 由参考程序,画出简单字处理程序框图。

(2) 讨论如何实现光标的上下移动和字符的删除。

实验2

(1)编写一个程序S21,将内存中一组有符号的字数组按递增的序列排序,并将其中的二进制数以十六进制的形式显示在屏幕上。;S21.ASM

DSEG SEGMENT

X DW 234H,32FH,90DH,123EH,-78EH,0ACFH,-234H,98H,-23DFH

COUNT DW 9

DSEG ENDS

CSEG SEGMENT

ASSUME CS:CSEG,DS:DSEG

MAIN PROC FAR

START: PUSH DS

XOR AX,AX

PUSH AX

MOV AX,DSEG

MOV DS,AX

MOV CX,COUNT

LAB0: MOV BX,1

DEC CX

JZ LAB3

PUSH CX

LEA DI,X

LAB1: MOV AX,[DI]

CMP AX,[DI+2]

JLE LAB2

XOR BX,BX

XCHG AX,[DI+2]

MOV [DI],AX

LAB2: ADD DI,2

LOOP LAB1

POP CX

CMP BX,0

JZ LAB0

LAB3: LEA DI,X

MOV CX,COUNT

LAB4: PUSH CX

MOV CH,4

MOV BX,[DI]

LAB5: MOV CL,4

ROL BX,CL

MOV DL,BL

AND DL,0FH

CMP DL,9

JBE LAB6

ADD DL,7

LAB6: ADD DL,30H

MOV AH,2

INT 21H

DEC CH

MOV DL,20H

MOV AH,2

INT 21H

ADD DI,2

POP CX

LOOP LAB4

MOV DL,0DH

MOV AH,2

INT 21H

MOV DL,0AH

MOV AH,2

INT 21H

LEA DI,X

MOV CX,COUNT

LAB7: MOV BX,[DI]

PUSH CX

MOV CX,16

LAB8: XOR DL,DL

ROL BX,1

RCL DL,1

ADD DL,30H

MOV AH,2

INT 21H

LOOP LAB8

MOV DL,'B'

MOV AH,2

INT 21H

MOV DL,' '

MOV AH,2

INT 21H

ADD DI,2

POP CX

LOOP LAB7

RET

MAIN ENDP

CSEG ENDS

END START

其中斜体字部分为以二进制输出。

(2)编写一个程序S22,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。

;S22.ASM

CODE SEGMENT

ASSUME CS:CODE

START: MOV AH,1

INT 21H ;等待键入字符,送AL

CMP AL,0DH ;是否是回车符?

JZ DONE ;是则转DONE退出程序

CMP AL,'0'

CMP AL,'9'

JA CHARUP

MOV DL,AL

MOV AH,2

INT 21H

JMP START

CHARUP: CMP AL,41H

JB NEXT

CMP AL,5AH

JA CHRDN

DISPC: MOV DL,'c'

MOV AH,2

INT 21H

NEXT: JMP START

CHRDN: CMP AL,61H

JB NEXT

CMP AL,7AH

JA NEXT

JMP DISPC

DONE: MOV AH,4CH

INT 21H

CODE ENDS

END START

实验3.1

(1)编写程序S31,将BUF开始的10个字节单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。要求码型转换通过子程序HEXASC实现,在转换过程中,通过子程序DISP实现显示。

;S31.ASM

DATA SEGMENT

BUF DB 0ABH,0CDH,0DEH,01H,02H,03H

DB 3AH,4BH,5CH,6FH

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DA TA

MOV DS,AX

MOV CX,10

LEA BX,BUF

AGAIN: MOV AL, [BX]

CALL HEXASC

INC BX

LOOP AGAIN

MOV AH,4CH

INT 21H

HEXASC PROC NEAR

PUSH AX

MOV DL,AL

PUSH CX

MOV CL,4

POP CX

CALL DISP ;显示高位HEX数

POP AX

MOV DL,AL

AND DL,0FH

CALL DISP

RET

HEXASC ENDP

DISP PROC

CMP DL,9

JBE NEXT

ADD DL,7

NEXT: ADD DL,30H

MOV AH,2

INT 21H ;显示

RET

DISP ENDP

CODE ENDS

END START

(2)编写一个主程序S32,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符’b’的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符"b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。

DATA SEGMENT

CHAR DB 'b'

BUF DB 50H, ?,50H DUP(?)

CRLF DB 0DH,0AH,'$'

DATA ENDS

MCODE SEGMENT

ASSUME CS:MCODE, DS:DA TA

START: MOV AX,DATA

MOV DS,AX

LEA DX,BUF

MOV AH,0AH

INT 21H

LEA DX,CRLF

MOV AH,9

INT 21H

LEA SI,BUF

MOV CL, [SI+1]

MOV CH, 0 ;CX中为字符串长度

INC SI

INC SI ;SI指向串首址TABLE

MOV AL,CHAR

MOV AH,0 ;AX中为待查字符

PUSH SI

PUSH CX

PUSH AX ; 参数送堆栈

CALL FAR PTR CHECK

MOV AH,2

INT 21H

POP AX ;统计个数在AL中,个数不能超过一位16进制数

MOV DL,AL

AND DL, 0FH

CMP DL,9

JBE NEXT

ADD DL,7

NEXT: ADD DL,30H

MOV AH,2

INT 21H ;显示统计个数

MOV AH,4CH

INT 21H

MCODE ENDS

SCODE SEGMENT

ASSUME CS:SCODE

CHECK PROC FAR

PUSH BP

MOV BP,SP

MOV SI,[BP+10]

MOV CX, [BP+8]

MOV AX, [BP+6]

XOR AH, AH

AGAIN: CMP AL,[SI]

JNE NEXT1

INC AH

NEXT1: I NC SI

LOOP AGAIN

MOV AL, AH

MOV [BP+10],AX

POP BP

RET 4

CHECK ENDP

SCODE ENDS

END START

实验3.2

(1)编写一个子程序,将主程序设定的内存中字符串的小写字母转换成大写字母并显示出来.主程序S33用另一个模块编写。EXTRN DNTOUP:FAR

PUBLIC STRING1,STRING2

DA TA SEGMENT

STRING1 DB 'thIs is A book','$'

STRING2 DB 80 DUP(?)

DA TA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DA TA

START: MOV AX,DATA

MOV DS, AX

CALL FAR PTR DNTOUP

INT 21H

CODE ENDS

END START

;DNTOUP.SM为子模块的文件名

PUBLIC DNTOUP

EXTRN STRING1:BYTE,STRING2:BYTE

CODE SEGMENT

DNTOUP PROC FAR

ASSUME CS:CODE

MOV BX,0

CYCLE: MOV AL,STRING1[BX]

CMP AL,24H ;是否是STRING1结尾

JZ DONE ;是"$",转DONE

CMP AL,61H ;是小写字母吗?

JB NEXT ;不是转NEXT

CMP AL,7AH

JA NEXT

SUB AL, 20H ;转为大写字母

NEXT: MOV STRING2[BX],AL

INC BX

JMP CYCLE

DONE: MOV AL,'$'

MOV STRING2[BX],AL ;补一个$

MOV DL,0DH

MOV AH, 2

INT 21H

MOV DL,0AH

INT 21H ;显示回车换行

LEA DX, STRING1

MOV AH,9

INT 21H ;显示源串内容

MOV DL,0AH

MOV AH,2

INT 21H ;回车换行

MOV DX,OFFSET STRING2

MOV AH,9

INT 21H ;显示转换后的大写串

RET

DNTOUP ENDP

CODE ENDS

END DNTOUP

(2)编写一个子程序,将主程序S34指定的字符所在的地址返回给主程序,字符串与主程序在同一个模块。;S34.ASM为主模块程序名

EXTRN FINDC:FAR

PUBLIC STRN

DA TA SEGMENT

STRN DB 'LINK DISPLAY SUBROUTING$'

DA TA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DA TA

START: MOV AX,DATA

MOV DS,AX

MOV AH,1

INT 21H

CALL FAR PTR FINDC

MOV ADDR, DI

MOV AH,4CH

INT 21H

CODE ENDS

END START

;FINDC.ASM为子模块程序名

PUBLIC FINDC

EXTRN STRN:BYTE

CODE SEGMENT

ASSUME CS:CODE

FINDC PROC FAR

START: LEA DI,STRN

AGAIN: CMP BYTE PTR[DI],'$'

JZ DONE

CMP AL,[DI]

JNZ NEXT

DONE1: RET

NEXT: INC DI

JMP AGAIN

DONE: MOV DI,0FFFFH ;找不到返回0FFFFH

JMP DONE1

FINDC ENDP

CODE ENDS

END START

实验4

S4利用pc机键盘,编写一个读入并显示键盘输入的演示程序。该程序只接受常规字符(包括回车键及退格键),对特殊功能键不进行处理。在程序中设置这些特殊功能键对应0编号即可,凡是检测到键位编号为0值时,均忽略对它们的处理。有键按下时,送出的扫描码的D7位为0时,当键抬起时,扫描的码D7位为1,以判定键是否被按下。

PUBLIC SCANTAB,BUFFER,BUFPT1,BUFPT2 ,KBFLAG

STACK1 SEGMENT

DB 256 DUP(?)

STACK1 ENDS

DATA SEGMENT

BUFFER DB 16 DUP(0) ;定义10个字节的键盘缓冲区

BUFPT1 DW 0 ;指向键盘缓冲区的起点,头取

BUFPT2 DW 0 ;指向键盘缓冲区的终点,尾存

;注意当BUFPT1=BUFPT2时,表明缓冲区空

KBFLAG DB 0

SCANTAB DB 0,0,'1234567890-=',8,0

DB 'QWERTYUIOP[]',0,0

DB 'ASDFGHJKL',3BH,27H,0DH

DB 'ZXCVBNM,./',0

DB 20H,0,0,0,0,0,0,0,0,0,0,0,0,0;由于不同键盘按键及分布各不相同,因此在调试时可能产生按键和显示有差异

DB '789-456+1230.'

EVEN

OLDIP9 DW ?

OLDCS9 DW ?

DA TA ENDS

EXTRN KBINT: FAR ;外部引用说明

CODE SEGMENT

;主程序段

ASSUME CS:CODE ,DS:DA TA

START: MOV AX,DATA

MOV DS,AX

;建立自行设计的中断服务程序,写自行设计的中断处理程序入口偏移量到矢量表中

CLI ;关中断,以防引起混乱

MOV AX,3509H ;取类型9的中断向量

INT 21H

MOV OLDCS9,ES

MOV OLDIP9,BX

PUSH DS

LEA DX,KBINT

MOV AX,SEG KBINT

MOV DS,AX

MOV AX,2509H ;设置类型9的中断向量

INT 21H

POP DS

IN AL,21H

AND AL,0FDH ;允许定时器和键盘中断的控制字送8259

OUT 21H,AL

LEA DX,PROMPT ;在屏幕上显示---kbd_io program begin ---

MOV AH,9

INT 21H

STI ;开中断

;程序功能:读键盘并显示字符

FOREVER: CALL KBGET ;读缓冲区字符

TEST KBFLAG,80H ;如果输入任意功能键,则使KBFLAG=80,退出

JNZ ENDINT

PUSH AX

CALL DISPCHAR ;显示接收字符

POP AX

CMP AL,'A'

JZ ENDINT ;输入A结束程序

CMP AL,0DH ;是回车符吗?

JNZ FOREVER ;不是再接收

MOV AL,0AH

JMP FOREVER ;接收下一行字符

ENDINT: MOV DX ,OLDIP9

MOV AX ,OLDCS9

MOV DS,AX

MOV AH,25H

MOV AL,9

INT 21H

MOV AH,4CH

INT 21H

;KBGET1取缓冲区字符->(返回)

KBGET PROC NEAR

PUSH BX

CLI

MOV BX,BUFPT1

CMP BX,BUFPT2

JNZ KBGET2 ;缓冲区不空,转KBGET2,取字符

CMP KBFLAG,0

JNZ KBGET3

STI ;开中断

POP BX

JMP KBGET ;当输入缓冲区为空,且没有按键时循环等待

; 取缓冲区字符

KBGET2: MOV AL,[BUFFER+BX] ;取缓冲区字符

INC BX ; 首指针加1

CMP BX,16 ;到缓冲区尾吗?

JC KBGET3 ; 未到,转,KBGET3

MOV BX,0 ;到,指向缓冲区首

KBGET3: MOV BUFPT1,BX ;保护首指针

POP BX ;恢复BX寄存器

RET

KBGET ENDP

;CHAR字符显示子程序

DISPCHAR PROC NEAR

PUSH BX

MOV BX,0

MOV AH,0EH

INT 10H

POP BX

RET

DISPCHAR ENDP

CODE ENDS

END START

;S41

;KBINT键盘中断处理程序

EXTRN SCANTAB:BYTE,BUFFER:BYTE,KBFLAG:BYTE,BUFPT1:WORD,BUFPT2:WORD CSEG SEGMENT PARA PUBLIC 'CODE'

ASSUME CS:CSEG

KBINT PROC FAR

PUSH BX

PUSH AX

;读键盘数据,并发确认信号

IN AL,60H ;读8255A 口,即键盘扫描码

PUSH AX

IN AL,61H ;为置确认信号

OR AL,80H ;置键盘确认信号

OUT 61H,AL ;置PB7位并送键盘

AND AL,7FH ;恢复键盘确认信号,亦即选通信号

OUT 61H,AL

;将接收的扫描码译为ASCII码

POP AX

TEST AL ,80H ;检查是否按下?最高位为0或为1,分别表示键是按下还是放开

JNZ KBINT2 ;键抬起放弃本次输入

MOV BX ,OFFSET SCANTAB

XLA T ;查表找对应ASCII码

CMP AL,0 ;是有效字符键吗?

JNZ KBINT4

MOV KBFLAG,80H ;不是有效字符则使得KBFLAG=80

JMP KBINT2

KBINT4:

;存ASCII码字符到缓冲区

MOV BX,BUFPT2 ;取缓冲区尾指针

MOV [BUFFER+BX],AL ;存字符

INC BX ;尾指针加1

CMP BX,16 ;是否到区尾?

JC KBINT3 ;不到,转,尾指针小于16时转KBINT3

MOV BX,0 ;到,置新尾址,缓冲区从0~15

KBINT3: CMP BX,BUFPT1 ;缓冲区满?

JZ KBINT2 ;此时首尾指针相等说明缓冲区已满,则不保留尾指针,从而忽略刚才输入的字符

MOV BUFPT2,BX ;不满,存尾指针

;结束中断处理

KBINT2: CLI

MOV AL,20H ;发EOI ,结束8259中断

OUT 20H,AL

POP AX

POP BX

IRET ;中断返回

KBINT ENDP

CSEG ENDS

END KBINT

实验5

(1)S51字符串统计。自STRN开始的存储区中,有一个字符串,统计其中含有小写字母的个数,将统计结果以两位十进制数显示在

屏幕上。

DATA SEGMENT

STRN DB 80 DUP(?)

DATA ENDS

ASSUME CS:CODE, DS:DATA

START: MOV AX, DATA

MOV DS, AX

LEA DI, STRN

MOV CL, 0

AGAIN: MOV AH, 1

INT 21H

CMP AL,0DH

JZ DONE

MOV [DI],AL

INC DI

INC CL

JMP AGAIN

DONE: LEA SI,STRN

MOV CH,0

MOV BL,0

CLD

CYCLE: LODSB

CMP AL,61H

JB NEXT

CMP AL,7AH

JA NEXT

INC BL

NEXT: LOOP CYCLE

MOV DL,0AH

MOV AH,2

INT 21H

MOV DL,0DH

MOV AH,2

INT 21H

MOV AL,BL

MOV AH,0

MOV CL,10

DIV CL ;十位数在AL中,个位数在AH中

XCHG AH,AL ;以下显示两位十进制数

MOV DL,AH

OR DL,30H

PUSH AX

MOV AH,2

INT 21H

POP AX

MOV DL,AL

OR DL,30H

MOV AH,2

INT 21H

MOV AH,4CH

INT 21H

CODE ENDS

(2)S51在给定的字符串中,删除重复的字符,其余的字符向前递补。

;DELD.ASM

DA TA SEGMENT

STRN DB 80 DUP(?)

LEN DB ?

DA TA ENDS

CODE SEGMENT

ASSUME CS: CODE,DS: DA TA,ES: DA TA

START: MOV AX, DATA

MOV DS,AX

MOV ES,AX

LEA SI,STRN

MOV CL,0

AGAIN: MOV AH,1

INT 21H

CMP AL,0DH

JZ DONE

MOV [SI],AL

INC SI

INC CL

JMP AGAIN

DONE: MOV CH,0

MOV LEN,CL

LEA SI,STRN

REPEA T:

PUSH SI

PUSH CX

CMP CX,1

JZ GOON ;最后一个字符,不找重复字符

MOV AL,[SI]

CMP AL,0

JE NEXT1

COMP: INC SI

CMP AL,[SI]

JNE GOON ;为非重复字符

MOV BYTE PTR[SI],0 ;查出与该字符重复的所有字符,并用0替换GOON: LOOP COMP

NEXT1: POP CX

POP SI

INC SI

LOOP REPEA T ;对所有重复字符都进行查找

LEA SI,STRN ;删除重复字符

MOV DI,SI

MOV CL,LEN

MOV CH,0

CYCLE: MOV AL,[SI]

CMP AL,0 ;是重复字符吗?

JZ NEXT ;不是,查找下一个字符

INC DI

NEXT: INC SI

LOOP CYCLE

MOV CL,LEN

MOV CH,0

SUB CX,DI

CYCLE1: MOV BYTE PTR[DI],0 ;剩余字符前移,原字符位置清0 INC DI

LOOP CYCLE1

MOV DL,0DH

MOV AH,2

INT 21H

MOV DL,0AH

MOV AH,2

INT 21H

LEA SI ,STRN

CYCLE2: MOV DL,[SI]

INC SI

CMP DL,0

JZ DONE1

MOV AH,2

INT 21H

JMP CYCLE2

DONE1: MOV AH,4CH

INT 21H

CODE ENDS

END START

实验6

编写一个可以进行光标左右移动和插入字符的简单字处理程序。

;字处理演示参考程序,插入、左右移动

DSEG SEGMENT

KBD_BUF DB 96 DUP(' ') ;input buffer

CNTL DB 16 DUP(0) ;char number of row

BUFPT DW 0 ;buffer head point

BUFTL DW 0 ;buffer tail point

COLPT DB 0

ROWPT DB 0

ROWMX DW 0 ;maxum row number

DSEG ENDS

CURS MACRO ROW,COL

MOV DH,ROW

MOV DL,COL

MOV BH,0

MOV AH,2

INT 10H

ENDM

CSEG SEGMENT

MAIN PROC FAR

MOV AX,DSEG

MOV DS,AX

MOV ES,AX

MOV BUFTL,0

MOV COLPT,0

MOV ROWPT,0

MOV BUFPT,0

MOV ROWMX,0

MOV CX,LENGTH CNTL

XOR AL,AL

LEA DI,CNTL

CLD

REP STOSB

MOV AH,6 ;clear screen

MOV AL,0

MOV CX,0

MOV DH,24 ;在文本方式下,每个屏幕是由25行,80列组成,屏幕左上角是其初始位置0,0 MOV DL,79 ;行数由上至下从0递增到24,列数由左至右依次从0递增到79

MOV BH,07

INT 10H ;设置显示方式

CURS 0,0 ;初始化光标

READ_K:

MOV AH,0

INT 16H ;键入字符送AL

CMP AL,1BH ;is escape? 按esc键退出

JNZ ARROW

MOV AH ,4CH

INT 21H

ARROW:

CMP AH,4BH ;is left arrow

JZ LEFT

CMP AH,4DH ;is right arrow

JZ RIGHT

INST: JMP INS_K

LEFT: JMP LEFT_K

RIGHT: JMP RIGHT_K

INS_K: ;insert a character

MOV BX,BUFPT

MOV CX,BUFTL

CMP BX,CX

JE KM ;yes,char into buffer

LEA DI,KBD_BUF ;no,buffer move

ADD DI,CX ;a byte backward

MOV SI,DI

DEC SI

SUB CX,BX

STD

MOV KBD_BUF[BX],AL

INC BUFPT ;inc head pointer

INC BUFTL ;inc tail pointer

CMP AL,0DH ;insert a CR

JNZ KN

LEA SI,CNTL ;yes,move the count

ADD SI,ROWMX ;of each row

INC SI ;backword

MOV DI,SI

INC DI

MOV CX,ROWMX

SUB CL,ROWPT

STD

REP MOVSB

MOV BL,ROWPT ;adjust the counts

XOR BH,BH ;of current row

MOV CL,COLPT ;and next row

MOV CH,CNTL[BX]

SUB CH,COLPT

MOV CNTL[BX],CL

MOV [CNTL+1],CH

MOV AX,ROWMX ;clear displaying row

MOV BH,7

MOV CH,ROWPT

MOV DH,24

MOV CL,0

MOV DL,79

MOV AH,6

INT 10H

INC ROWPT ;point to next

INC ROWMX ;inc max row count

MOV COLPT,0 ;point to 0 column

JMP SHORT KP

KN:

MOV BL,ROWPT

XOR BH,BH

INC CNTL[BX] ;inc current row count

INC COLPT ;point to next column KP: CALL DISPBF ;display input buffer CURS ROWPT,COLPT ;position the cursor

JMP READ_K

LEFT_K:

CMP COLPT,0 ;is at 0 column

JNZ K2 ;no

CMP ROWPT,0 ;is at 0 row

JZ LRET ;yes,cursor is unmove

DEC ROWPT

LEA BX,CNTL

XLAT CNTL

MOV COLPT,AL

JMP K3

K2: DEC COLPT

K3: DEC BUFPT

CURS ROWPT,COLPT

LRET: JMP READ_K

RIGHT_K:

MOV BX,BUFPT ;is at tail of file?

CMP BX,BUFTL

JE RRET ;yes,cursor unmoved

INC COLPT ;point to next column

CMP KBD_BUF[BX],0DH ;is CR?

JNZ K4 ;no

INC ROWPT ;yes,point to next row

MOV COLPT,0 ;and 0 column

K4: INC BUFPT ;adjust buffer pointer CURS ROWPT,COLPT ;position cursor RRET: JMP READ_K

DISPBF PROC NEAR

MOV BX,0

MOV CX, 96

CURS 0,0

DISP: MOV AL,KBD_BUF[BX]

PUSH BX

MOV BX,0700

MOV AH,0EH

INT 10H

POP BX

CMP AL,0DH

JNZ KK

MOV AL,0AH

MOV AH,0EH

INT 10H

KK: INC BX

LOOP DISP

RET

DISPBF ENDP

MAIN ENDP

CSEG ENDS

END START

8086接口实验

接口实验部分 实验1 简单I/O口扩展实验 一、实验目的 1、熟悉74LS273,74LS244的应用接口方法。 2、掌握用锁存器、三态门扩展简单并行输入、输出口的方法。 二、实验设备 CPU挂箱、8086CPU模块。 三、实验内容 逻辑电平开关的状态输入74LS244,然后通过74LS273锁存输出,利用LED显示电路作为输出的状态显示。 四、实验原理介绍 本实验用到两部分电路:开关量输入输出电路,简单I/O口扩展电路。 五、实验步骤 1、实验接线:(?表示相互连接) CS0 ?CS244; CS1?CS273;平推开关的输出K1~K8 ? IN0~IN7(对应连接); O0~O7?LED1~LED8。 2、编辑程序,单步运行,调试程序 3、调试通过后,全速运行程序,观看实验结果。 4、编写实验报告。 六、实验提示 74LS244或74LS273的片选信号可以改变,例如连接CS2,此时应同时修改程序中相应的地址。 七、实验结果 程序全速运行后,逻辑电平开关的状态改变应能在LED上显示出来。例如: K2置于L位置,则对应的LED2应该点亮。 八、程序框图(实验程序名: T244273.ASM)

九、程序源代码清单 assume cs:code code segment public org 100h start: mov dx,04a0h ;74LS244地址 in al,dx ;读输入开关量 mov dx,04b0h ;74LS273地址 out dx,al ;输出至LED jmp start code ends end start

实验2 存储器读写实验 一、实验目的 1.掌握PC机外存扩展的方法。 2.熟悉6264芯片的接口方法。 3.掌握8086十六位数据存储的方法。 二、实验设备 CPU挂箱、8086CPU模块。 三、实验内容 向02000~020FFH单元的偶地址送入AAH,奇地址送入55H。 四、实验原理介绍 本实验用到存储器电路 五、实验步骤 1、实验接线:本实验无需接线。 2、编写调试程序 3、运行实验程序,可采取单步、设置断点方式,打开内存窗口可看到内存区的变化。 六、实验提示 1、RAM区的地址为02000H,编程时可将地址设为01000H,则偏移地址为1000H。 2、如果按字节进行存储,则AL为55H或AAH;如果按字进行存储,则AX应为55AAH。 3、626 4、62256等是计算机系统扩展中经常用到的随机存储器芯片(RAM),主要用作数据存储器扩展。本实验所进行的内存置数在程序中经常用到。计算机系统运行中会频繁地进行内存与外设或者内存与内存之间的数据传输,所以本实验虽然简单但对理解系统程序的运行很关键,望学习和实验时认真对待。 七、实验结果 在断点1处内存区02000H~020FFH单元为00H;在断点2处偶地址为AAH,奇地址为55H 八、程序框图(实验程序名:RAM.ASM)

数据结构实验指导书(2016.03.11)

《数据结构》实验指导书 郑州轻工业学院 2016.02.20

目录 前言 (3) 实验01 顺序表的基本操作 (7) 实验02 单链表的基本操作 (19) 实验03 栈的基本操作 (32) 实验04 队列的基本操作 (35) 实验05 二叉树的基本操作 (38) 实验06 哈夫曼编码 (40) 实验07 图的两种存储和遍历 (42) 实验08 最小生成树、拓扑排序和最短路径 (46) 实验09 二叉排序树的基本操作 (48) 实验10 哈希表的生成 (50) 实验11 常用的内部排序算法 (52) 附:实验报告模板 .......... 错误!未定义书签。

前言 《数据结构》是计算机相关专业的一门核心基础课程,是编译原理、操作系统、数据库系统及其它系统程序和大型应用程序开发的重要基础,也是很多高校考研专业课之一。它主要介绍线性结构、树型结构、图状结构三种逻辑结构的特点和在计算机内的存储方法,并在此基础上介绍一些典型算法及其时、空效率分析。这门课程的主要任务是研究数据的逻辑关系以及这种逻辑关系在计算机中的表示、存储和运算,培养学生能够设计有效表达和简化算法的数据结构,从而提高其程序设计能力。通过学习,要求学生能够掌握各种数据结构的特点、存储表示和典型算法的设计思想及程序实现,能够根据实际问题选取合适的数据表达和存储方案,设计出简洁、高效、实用的算法,为后续课程的学习及软件开发打下良好的基础。另外本课程的学习过程也是进行复杂程序设计的训练过程,通过算法设计和上机实践的训练,能够培养学生的数据抽象能力和程序设计能力。学习这门课程,习题和实验是两个关键环节。学生理解算法,上机实验是最佳的途径之一。因此,实验环节的好坏是学生能否学好《数据结构》的关键。为了更好地配合学生实验,特编写实验指导书。 一、实验目的 本课程实验主要是为了原理和应用的结合,通过实验一方面使学生更好的理解数据结构的概念

微机原理实验指导书

微型计算机原理与应用实验指导书 上海大学通信学院

2010 年4 月 PC微机原理实验一 一、目的:掌握PC机DEBUG调试程序有关命令的操作及8086各类指令的 功能。 要求:在PC机上完成下列程序的调试运行,并写出运行结果。二、1.DEBUG的基本操作:(详细内容请参阅教材“程序的调试,P173”和“附录F 调试程序DEUBG的使用,P499”) (1)从WINDOWS进入DOS之后,输入命令启动DEBUG: C:>DEBUG 回车 (2)输入R命令,查看和记录CPU各个寄存器的内容: -R回车 看到什么 (3)输入A命令,汇编下面的字符“WINDOWS”显示程序: -A100 ;从偏移地址是0100H处开始写指令 MOV AH,2 MOV DL, 57 ;57H 是“W ”的ASCII码 INT 21 ;INT 21是DOS 功能调用,AH=2代表2号功能 ;这3句合起来的功能是:显示DL中的字符 MOV DL, 49 INT 2 1 MOV DL, 4E INT 21 MOV DL, 44 INT 2 1 MOV DL, 4F INT 2 1 MOV DL, 57 INT 2 1 MOV DL, 53 INT 2 1 INT 3 ;功能是产生一个断点,不要省略 (4)输入U 命令反汇编上面的程序: -U 100 问:这里100代表什么 (5)输入G命令连续运行上面的程序,记录运行结果:

-G=100 ,57,53依次分别改为574F4E57 (6)输入E命令把上面程序中的数据,49,,44,,45:,,45,4C43,4F4D,-E 103 回车(以下同) -E 107 10B-E -E 10F 113-E 117-E 11B-E (7)输入D命令查看程序机器码的存放情况: -D 100 11E ;看从100开始到11E的机器码 (8)输入G命令再连续运行程序,并记录运行结果: -G=100 (9)依次输入下面的T命令(单步执行)和G命令(设置断点并启动运行),记录各 命令的运行结果: -T=100 回车 -G=100 106 回车 -G=100 10A 回车 -G=100 10E 回车 -G=100 11E 回车 注意: 下面第2—第8段程序是7个实用的小程序,若不小心打错指令,可以这样修改: 例如:CS:0100 B300 MOV BL,0 0102 53 PUSH BX 0103 B220 LP1: MOV DL,20 要修改“PUSH BX”,因为这条指令的IP是0102,所以按以下操作: -A 0102 回车,然后把正确的指令打入,“-A ”是汇编指令。 如果要查看0100以后的指令及相应的机器代码,可以 -U 0100 回车,能够看到CS:0100开始的指令及相应的机器代码。“-U ”是反汇编 若发现有误用,用“-A XXXX 回车”,重打这条指令即可 2.编制一个能在CRT上连续显示A,B,C,D······Z大写英文字符的源程序,并在源程序下汇编调试机运行。

汇编语言程序设计实验篇emu

1.汇编语言程序设计实验篇 1.1.汇编系统软件简介 Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug 的模拟器。它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容。 1.1.1创建程序 https://www.360docs.net/doc/5e478454.html, TEMPLATE程序 本章与指令相关的实验都是用COM TEMPLATE类型的程序完成的。打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。 在“choose code template”对话框中,选择“COM template-simple and tiny executable file format, pure machine code.”后,单击按钮。

在如所示的编辑界面中,在“;add your code here”部分输入相应的指令,第一条指令默认的偏移地址为100h。 输入全部指令后,单击按钮,保存相应的程序段。 2.EXE TEMPLATE程序 本章与DOS功能调用和汇编源程序相关的实验都是用EXE TEMPLATE程序完成的。打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。

在“choose code template”对话框中,选择“EXE template-advanced executable file.header: relocation, checksum.”后,单击按钮。 在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码段的定义以及必要的功能调用等,在“add your data here”和“;add your code here”部分可以分别输入相应的变量定义和指令。

数据结构实验指导书

《数据结构》实验指导书 实验一顺序表 实验目的: 熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作。 实验要求: 了解并熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作的实现和应用。 实验内容: 1、编写程序实现在线性表中找出最大的和最小的数据元素,并符合下列要求: (1)设数据元素为整数,实现线性表的顺序存储表示。 (2)从键盘输入10个数据元素,利用顺序表的基本操作建立该表。 (3)利用顺序表的基本操作,找出表中最大的和最小的数据元素(用于比较的字段为整数)。 2、编写一个程序实现在学生成绩中找出最高分和最低分,并符合下列要求: (1)数据元素为学生成绩(含姓名、成绩等字段)。 (2)要求尽可能少地修改第一题的程序来得到此题的新程序,即要符合第一题的所有要求。(这里用于比较的字段为分数) 实验二链表 实验目的: 熟悉链表的逻辑特性、存储表示方法的特点和链式表的基本操作。 实验要求: 了解并熟悉链式表的逻辑特性、存储表示方法和链式表的基本操作的实现和应用。

实验内容: 1、编写一个程序建立存放学生成绩的有序链表并实现相关操作,要求如下: (1)设学生成绩表中的数据元素由学生姓名和学生成绩字段组成,实现这样的线性表的链式存储表示。 (2)键盘输入10个(或若干个,特殊数据来标记输入数据的结束)数据元素,利用链表的基本操作建立学生成绩单链表,要求该表为有序表 并带有头结点。(用于比较的字段为分数)。 (3)输入关键字值x,打印出表中所有关键字值<=x的结点。(用于比较的关键字字段为分数)。 (4)输入关键字值x,删除表中所有关键字值<=x的结点。(用于比较的关键字字段为分数)。 (5)输入关键字值x,并插入到表中,使所在的链表仍为有序表。(用于比较的字段为分数)。 实验三栈的应用 实验目的: 熟悉栈的逻辑特性、存储表示方法和栈的基本操作。 实验要求: 了解并熟悉栈的逻辑特性、顺序和链式存储表示方法和栈的基本操作的实现和应用。 实验内容: (1)判断一个表达式中的括号(仅有一种括号,小、中或大括号) 是否配对。编写并实现它的算法。 (2)用不同的存储方法,求解上面的问题。 (3)* 若表达式中既有小括号,又有大括号(或中括号),且允许 互相嵌套,但不能交叉,写出判断这样的表达式是否合法的算 法。如 2+3*(4-{5+2}*3)为合法;2+3*(4-{5+2 * 3} 、 2+3*(4-[5+2 * 3)为不合法。

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

微机原理实验报告 实验名称汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH, 97H,64H,BBH,7FH,0FH,D8H。编程并显示结果:如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H 的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD 码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再 将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H + 第1页

99223344H = xxxxxxxxH 四、实验代码及结果 实验代码见代码附录 1.1程序运行结果 图1 无符号最大值结果截图 1.1 程序运行结果

图2 有符号最大值截图2.0 程序运行结果

图3 BCD码显示3.0 程序运行结果

图4 ASCII码显示4.0 程序运行结果

图5 移动次数显示5.0 程序运行结果

微机原理实验指导书

微机原理实验指导书汕头大学机电系摘录

实验一P1口实验及延时子程序设计 1.实验目的 利用单片机的P1口作为I/O口进行实验验证,掌握利用P1口作为输入口和输出口的编程方法,理解并掌握延时子程序的设计方法。 2.实验设备及器件 IBM PC机一台 DP-51PRO单片机综合仿真实验仪一台 3.实验内容 (1)编写一段程序,用P1口作为控制端口,使D1区的LED轮流点亮。 (2)编写一段程序,用P1.0~P1.6口控制LED,P1.7控制LED的亮和灭(P1.7接按键,按下时LED 亮,不按时LED灭)。 图 1 4.实验要求 学会使用单片机的P1口作I/O口。如果时间充裕,也可以考虑利用P3口作I/O口来做该实验。 5.实验步骤 ①用导线把A2区的J61接口与D1区的J52接口相连。原理如图1所示。 ②先编写一个延时程序。 ③将LED轮流点亮的程序编写完整并调试运行。 ④使用导线把A2区J61接口的P1.0~P1.6与D1区J52接口的LED1~LED7相连,另外A2区J61接口的P1.7与D1区J53的KEY1相连。原理如图3.2(b)所示。 ⑤编写P1.7控制LED的程序,并调试运行(按下K1看是否全亮)。 ⑥A2区J61接口P1.7与D1区J54的SW1相连,然后再运行程序,拨动开关SW1查看结果。

6.实验预习要求 阅读附录内容,理解实验的硬件结构。可以先把程序编好,然后在Keil C51环境下进行软件仿真。 7.实验参考程序 程序1: ORG 8000H ;此为硬件仿真调试程序,使用软件仿真或直接运行,应改为0000H LJMP M ain ORG 8100H ;此为硬件仿真调试程序,使用软件仿真或直接运行,应改为0100H Main: MOV A,#0FFH CLR C MainLoop: CALL Delay RLC A MOV P1,A ;把A的值输出到P1口 SJMP MainLoop Delay: MOV R7, #0 ;延时 Loop: MOV R6, #0 DJNZ R6, $ DJNZ R6, $ DJNZ R6, $ DJNZ R7, Loop RET ; END 程序2: ORG 8000H ;此为硬件仿真调试程序,使用软件仿真或直接运行,应改为0000H LJMP Main ORG 8100H ;此为硬件仿真调试程序,使用软件仿真或直接运行,应改为0100H Main:JB P1.7,SETLED ;按键没有按下时,跳转到SETLED CLRLED: CLR P1.0 CLR P1.1 CLR P1.2 CLR P1.3 CLR P1.4 CLR P1.5 CLR P1.6 SJMP Main SETLED: SETB P1.0 SETB P1.1

8086实验报告

在EMU8086下环境单步调试程序实验报告 1.实验时间:2013年4月23日 2.实验地点:图书馆 3.实验名称:在EMU8086下环境单步调试程序 4. 实验目的:(1)熟悉EMU8086仿真环境 (2)在EMU8086环境下单步调试给出的程序,加深对重要指令的理解5.实验所用设备与软件:硬件:PC机一台;软件:EMU8086 6.实验方法、过程与实验结果的分析 完整代码如下(已补充,已修改) org 100h ; set location counter to 100h ;mov指令 mov CL,23H mov CH,45H ;(cx)=4523H mov AX,1234H ;(AX)=1234H mov WORD ptr[300H],0180H ;( 300H)=0180H mov bx,[300H] ;(bx)=0180H mov [300H],cx ;(300H)=4523H mov ax,ds ;(ax)=0700H mov ds,bx ;(ds)=0180H mov es,[300H] ;(es)=0000H mov [300H],ss ;(ss)=0700 mov bx,cs ;(bx)=0700 mov [300H],cs ;(300H)=0700 目的操作数不允许为CS段寄存器;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;XCHG指令 MOV AX,1234H ;(AX)=1234H MOV BX,3456H ;(BX)=3456H XCHG AX,BX ;(AX)=3456H,(BX)=1234H MOV AX,1234H ;(AX)=1234H MOV WORD ptr[300H],0100H;( 300H)=0100H XCHG AX,[300H] ;(AX)=0100H,( 300H)=1234H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MOV BX,OFFSET TABLE MOV AL,15 XLAT ;(AL)=225H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;堆栈指令 MOV AX,1234H ;(AX)=1234H PUSH AX

2017数据结构实验指导书

《数据结构》实验指导书 贵州大学 电子信息学院 通信工程

目录 实验一顺序表的操作 (3) 实验二链表操作 (8) 实验三集合、稀疏矩阵和广义表 (19) 实验四栈和队列 (42) 实验五二叉树操作、图形或网状结构 (55) 实验六查找、排序 (88) 贵州大学实验报告 (109)

实验一顺序表的操作 实验学时:2学时 实验类型:验证 实验要求:必修 一、实验目的和要求 1、熟练掌握线性表的基本操作在顺序存储和链式存储上的实现。 2、以线性表的各种操作(建立、插入、删除等)的实现为重点。 3、掌握线性表的动态分配顺序存储结构的定义和基本操作的实现。 二、实验内容及步骤要求 1、定义顺序表类型,输入一组整型数据,建立顺序表。 typedef int ElemType; //定义顺序表 struct List{ ElemType *list; int Size; int MaxSize; }; 2、实现该线性表的删除。 3、实现该线性表的插入。 4、实现线性表中数据的显示。 5、实现线性表数据的定位和查找。 6、编写一个主函数,调试上述算法。 7、完成实验报告。 三、实验原理、方法和手段 1、根据实验内容编程,上机调试、得出正确的运行程序。 2、编译运行程序,观察运行情况和输出结果。 四、实验条件 运行Visual c++的微机一台 五、实验结果与分析 对程序进行调试,并将运行结果进行截图、对所得到的的结果分析。 六、实验总结 记录实验感受、上机过程中遇到的困难及解决办法、遗留的问题、意见和建议等,并将其写入实验报告中。

【附录----源程序】 #include #include using namespace std; typedef int ElemType; struct List { ElemType *list; int Size; int MaxSize; }; //初始化线性表 bool InitList(List &L) { L.MaxSize=20; L.list=new ElemType[L.MaxSize]; for(int i=0;i<20&&L.list==NULL;i++) { L.list=new ElemType[L.MaxSize]; } if(L.list==NULL) { cout<<"无法分配内存空间,退出程序"<L.Size+1||pos<1) { cout<<"位置无效"<

8086汇编语言程序设计

实验1 简单汇编语言程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握简单汇编语言程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG 工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG 工具调试程序,验证程序的正确性。 1. 若X、Y、R、W 是存放8 位带符号数字节单元的地址,Z 是16 位字单元的 地址。试编写汇编程序,完成Z←((W-X) ÷5-Y)?(R+ 2) 。 2.试编写一个程序,测试某数是否是奇数。如该数是奇数,则把DL 的第0 位置1,否则将该位置0。 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验2 分支及循环程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握分支程序和循环程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编写汇编程序,统计某存储区若干个数据中英文字母的个数,并将结果在屏幕上显示。 2.从键盘任意输入一组字符数据,请编写汇编程序将该组数据加密后在屏幕上显示。参考加密方法是:每个数乘以2。(说明:本题的加密方法,同学们可以自己拟定) 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验3 子程序程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握子程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编程以十进制形式和十六进制形式显示AX的内容,并把两个显示功能分别封装成子程序dispDEC和dispHEX。 2.设在以EXAMSCORE为首地址的数据缓冲区依次存放某班10名同学5门功课的成绩,现要统计各位同学的总分,并将总分放在该学生单科成绩后的单元,并调用第1个程序封装好的子程序,以十进制方式显示统计情况,显示格式自行设计。请编程完成此功能。数据缓冲区参考数据定义如下: EXAMSCORE DB 01 ;学号 DB 89,76,54,77,99 ;单科成绩 DW ? ;该学生的总分 DB 02 ;学号 DB 79,88,64,97,92 ;单科成绩 DW ? ;该学生的总分 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

微机接口(8086)基本实验指导书

目录 实验须知 (2) 实验一系统介绍 (3) 一.系统特点 (3) 二、8086系统概述 (3) 三、系统电源 (5) 四、硬件介绍 (5) 实验二简单I/O口扩展实验 (9) 实验三存储器读写实验 (11) 实验四I/O口扩展和存储器扩展设计实验 (14) 实验五8255并行口实验 (17) 实验六8253定时器/计数器接口实验 (19) 实验七LCD显示实验 (22)

实验须知 一、预习要求 1.实验前认真阅读实验教程中有关内容,明确实验目的和实验任务。 2.每次实验前应有预习报告,未预习者不允许参加实验。 预习报告中:对软件实验,要求画出程序流程图,编好上机程序;对硬件实验,要求画出实验线路图,拟定实验步骤,画出程序流程图,编好上机程序。 二、实验要求 1.实验是学习“汇编语言程序设计”和“微机原理与接口技术”这两门课程的重要环节,实验课请勿迟到,缺席。 2.爱护设备,保持清洁,不随意更换设备。 3.认真完成实验任务,实验结果经教师检查,教师对实验内容提问,对完成者做记录。 4.做硬件实验时,注意断电操作,即所有的接线、改线及拆线操作均应在不带电的状态下进行,严禁带电操作,并注意防止导线堵塞插孔。 5.发生事故,应立即切断电源,并马上向教师报告,检查原因,吸取教训。 6.实验完毕,请整理实验设备,再离开实验室。 三、报告要求 每次实验后,应递交一份实验报告,报告中应包括下列内容: 1.实验名称、实验人姓名、学号、班级、所用的设备号。 2.实验目的、任务。 3.各任务程序流程图、程序清单(应加适量注释)。 4.硬件实验应画出各任务的完整电路图,包括PC总线与实验用到芯片间全部电路。 5.记录和分析实验结果。 6.据实验目的认真做小结。

8086实验讲义

实验一微机实验系统上机过程 一、实验目的 ⑴熟悉微机汇编语言。 ⑵熟悉微机实验系统的上机过程。 二、实验内容 选一个Intel 8086汇编语言程序fuli1.asm(教材P97页例题4.14),在实验环境中进行调试,观察运行结果。 了解汇编语言的工作环境和上机步骤和过程。 三、实验原理与方法 硬件环境:本实验对硬件环境没有要求 软件环境:1、操作系统:DOS 2、编辑程序:EDIT 3、汇编程序:MASM 4、连接程序:LINK 5、调试程序:DEBUG 先使用EDIT编写一个汇编语言源程序:fuli1.asm 然后用MASM汇编成目标程序fuli1.obj 最后使用LINK连接成目标程序fuli1.exe 四、实验设备 1、EL型微机教学实验系统 2、PC机1台 五、实验步骤 1、实验接线 本实验无需接线。 2、编写调试程序 (1)打开微机系统,进入WINDOWS界面,点击任务栏“开始”、“程序”、“附件”、“命令提示符”。进入DOS实验操作环境。 (2)输入命令CD\ 回车。 (3)用EDIT编辑源程序文件fuli1.asm。命令格式:eidt fuli1.asm (4)用MASM对源程序fuli1.asm进行汇编成机器语言程序,直到无错误为止。命令格式:masm fuli1;。 (5)用LINK 对机器语言目标程序进行连接成可执行文件。 命令格式:link fuli1;。

3、运行实验程序。命令格式:fuli1 让程序中运行,观察结果。改变X的值,观察不同结果。 六、实验记录与结论 程序源代码清单(fuli1.asm) DATA SEGMENT TABLE DW 0,1,4,9,16,25,36,49 X DB 6 RESU DW ? DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START:MOV AX,DATA MOV DS,AX MOV BX,OFFSET TABLE MOV AL,X MOV AH,0 SHL AX,1 ADD BX,AX MOV DL,[BX] MOV DH,[BX+1] MOV RESU,DX MOV CL,4 SHR DL,CL ADD DL,30H MOV AH,2 INT 21H MOV DX,RESU AND DL,0FH ADD DL,30H MOV AH,2 INT 21H MOV DL,48H MOV AH,2 INT 21H MOV AH,4CH INT 21H CODE ENDS END START 小结:谈谈对汇编语言及C语言上机过程的认识(相同之处和不同之处)。

《数据结构》实验指导书

《数据结构》实验指导书 实验类别:课内实验实验课程名称:数据结构 实验室名称:软件工程实验室实验课程编号:N02070601 总学时:64 学分: 4 适用专业:计算机科学与技术、网络工程、物联网工程、数字媒体专业 先修课程:计算机科学导论、离散数学 实验在教学培养计划中地位、作用: 数据结构是计算机软件相关专业的主干课程,也是计算机软硬件专业的重要基础课程。数据结构课程实验的目的是通过实验掌握数据结构的基本理论和算法,并运用它们来解决实际问题。数据结构课程实验是提高学生动手能力的重要的实践教学环节,对于培养学生的基本素质以及掌握程序设计的基本技能并养成良好的程序设计习惯方面发挥重要的作用。 实验一线性表的应用(2学时) 1、实验目的 通过本实验,掌握线性表链式存储结构的基本原理和基本运算以及在实际问题中的应用。 2、实验内容 建立某班学生的通讯录,要求用链表存储。 具体功能包括: (1)可以实现插入一个同学的通讯录记录; (2)能够删除某位同学的通讯录; (3)对通讯录打印输出。 3、实验要求 (1)定义通讯录内容的结构体; (2)建立存储通讯录的链表结构并初始化; (3)建立主函数: 1)建立录入函数(返回主界面) 2)建立插入函数(返回主界面) 3)建立删除函数(返回主界面) 4)建立输出和打印函数(返回主界面) I)通过循环对所有成员记录输出 II)输出指定姓名的某个同学的通讯录记录 5)退出 实验二树的应用(2学时) 1、实验目的 通过本实验掌握二叉排序树的建立和排序算法,了解二叉排序树在实际中的应用并熟练运用二叉排序树解决实际问题。 2、实验内容 建立一个由多种化妆品品牌价格组成的二叉排序树,并按照价格从低到高的顺序 打印输出。 3、实验要求 (1)创建化妆品信息的结构体; (2)定义二叉排序树链表的结点结构; (3)依次输入各类化妆品品牌的价格并按二叉排序树的要求创建一个二叉排序树链表;(4)对二叉排序树进行中序遍历输出,打印按价格从低到高顺序排列的化妆品品牌信息。 实验三图的应用(2学时)

微机原理与接口技术实验指导书1_[1]...

微机原理与接口技术实验指导书 编者:王亭岭 华北水利水电学院 电气学院自动化教研室 二零一二年三月

目录 实验一标志寄存器应用 (1) 实验二指令寻址方式练习 (4) 实验三分支结构程序设计 (6) 实验四循环结构程序设计 (7) 实验五子程序结构程序设计 (8) 实验六DOS系统功能调用程序设计 (10) 实验七BIOS中断调用程序设计 (12) 实验八定时器中断程序设计 (14)

实验一标志寄存器应用 一、实验目的与要求 1.掌握汇编程序的编译过程; 2.掌握8086的标志寄存器的特点。 二、实验内容 微型计算机(80x86系列)。 四、实验参考程序 DATA SEGMENT A DW 123 B DW 456 SUM DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE , DS:DATA START: MOV AX , DATA MOV DS , AX MOV AX , A SUB AX , B MOV SUM , AX MOV AH,4CH INT 21H CODE ENDS END START 五、实验步骤 步骤一、用鼠标单击开始菜单,单击运行。如下图所示:

步骤二、在运行窗口中键入cmd,回车进入命令提示符。如下图所示: 步骤三、在命令提示符中编译汇编源程序并连接*.obj文件。如下图所示:1.C:\>D: 回车 2.D:\ >CD MASM 回车 3.D:\MASM>MASM SY1.ASM 回车 4.D:\MASM>LINK SY1.OBJ 回车

步骤四、在命令提示行中运行并调试汇编程序。如下图所示:1.D:\MASM>SY1.EXE 回车 2.D:\MASM>DEBUG SY1.EXE 回车 六、实验结论 1.程序运行后变量SUM的值是多少? 2.程序运行前后标志寄存器的各标志位有何变化? 3.分析实验结果及所遇到的问题,并说明解决的方法。

8086软硬件实验报告(微机原理与接口技术上机实验)

实验一实验环境熟悉与简单程序设计 实验目的 (1)掌握DEBUG调试程序的使用方法。 (2)掌握简单程序的设计方法。 实验内容 编程将BH中的数分成高半字节和低半字节两部分,把其中的高半字节放到DH中的低4位(高4位补零),把其中的低半字节放到DL中的低4位(高4位补零)。如: BH=10110010B 则运行程序后 DH=00001011B DL=00000010B 实验准备 (1)熟练掌握所学过的指令。 (2)根据实验内容,要求预先编好程序。 实验步骤 (1)利用DEBUG程序输入、调试程序。 (2)按下表要求不断地修改BH的内容,然后记录下DX的内容。 实验报告 (1)给出程序清单。 (2)详细说明程序调试过程。

程序: CODE SEGMENT START : MOV BH,00111111B MOV AL,BH MOV CL,4 SHR AL,CL MOV DH,AL MOV AL,BH AND AL,00001111B MOV DL,AL MOV CL,0 CODE ENDS END START

实验二简单程序设计 实验目的 (3)掌握DEBUG调试程序的使用方法。 (4)掌握简单程序的设计方法。 实验内容 试编写一个汇编语言程序,要求实现功能:在屏幕上显示:Hello world My name is Li Jianguo 参考程序如下:(有错) data segment out1 db 'Hello world' ax db 'My name is Li Jianguo' data ens code segment assume cs:code;ds:data lea dx,out1 mov ah,2 int 21h mov dl,0ah mov ah,2

数据结构实验指导书(C版)

数据结构实验指导书(C语言版) 2017年9月

目录 1、顺序表的实现 (1) 2、链栈的实现 (3) 3、前序遍历二叉树 (5) 4、图的深度优先遍历算法 (7) 5、散列查找 (9)

1、顺序表的实现 1. 实验目的 ⑴掌握线性表的顺序存储结构; ⑵验证顺序表及其基本操作的实现; ⑶理解算法与程序的关系,能够将顺序表算法转换为对应的程序。 2. 实验内容 ⑴建立含有若干个元素的顺序表; ⑵对已建立的顺序表实现插入、删除、查找等基本操作。 3. 实现提示 定义顺序表的数据类型——顺序表结构体SeqList,在SeqList基础上实现题目要求的插入、删除、查找等基本操作,为便于查看操作结果,设计一个输出函数依次输出顺序表的元素。简单起见,本实验假定线性表的数据元素为int型,要求学生: (1)将实验程序调试通过后,用模板类改写; (2)加入求线性表的长度等基本操作; (3)重新给定测试数据,验证抛出异常机制。 4. 实验程序 在编程环境下新建一个工程“顺序表验证实验”,并新建相应文件,文件包括顺序表结构体SeqList的定义,范例程序如下: #define MaxSize 100 /*假设顺序表最多存放100个元素*/ typedef int DataType; /*定义线性表的数据类型,假设为int型*/ typedef struct { DataType data[MaxSize]; /*存放数据元素的数组*/ int length; /*线性表的长度*/ } SeqList; 文件包括建立顺序表、遍历顺序表、按值查找、插入操作、删除操作成员函数的定义,范例程序如下: int CreatList(SeqList *L, DataType a[ ], int n) { if (n > MaxSize) {printf("顺序表的空间不够,无法建立顺序表\n"); return 0;} for (int i = 0; i < n; i++) L->data[i] = a[i]; L->length = n; return 1; }

8086 汇编语言中断程序设计

汇编语言程序设计实验报告 学院:计算机科学与技术专业:计算机科学与技术班级:计科131

LEA DX,FNAME MOV CX,0 ;语句1 INT 21H JC EXIT MOV FNUM,AX MOV BX,AX ;语句2 MOV CX,100 MOV AH,40H LEA DX ,BUF INT 21H MOV BX,FNUM MOV AH,3EH INT 21H EXIT: MOV AH,4CH INT 21H CODE ENDS END START 使用相应的文本编辑器建立文件LAB7.asm,内容如上所示。 2.汇编并运行此程序后,在当前目录建立的文件名是什么?其内容是什么? 1>汇编: C:\masm> masm lab7; 2>连接: C:\masm> link lab7; 3>运行: C:\masm> lab7 3.若将语句1 改为mov cx,1,则运行情况与前面会有什么区别? 4.若将语句1 改为mov cx,2,则运行结果同上会有什么不同?并简要说明此语句的作用. 5.若将语句2 改为mov bx,1,则运行结果会有什么不同?简要说明则语句的作用. 实验二:编写0 号中断的处理程序,使得在除法溢出发生时,在屏幕中间显示字符串“divide error!”,然后返回到DOS。源程序下: assume cs:code code segment start: mov ax,cs mov ds,ax

mov si,offset do mov ax,0 mov es,ax mov di,200h mov cx,offset doend-offset do ;安装中断例程cld rep movsb mov word ptr es:[0],200h mov word ptr es:[2],0 ;设置中断向量表 mov dx,0ffffh mov bx,1 ;测试一下 div bx mov ax,4c00h int 21h do:jmp short dostart db 'divide error!' dostart: mov ax,0 mov ds,ax mov si,202h mov ax,0b800h mov es,ax mov di,160*12+60 mov cx,13 s: mov al,ds:[si] mov ah,15 mov es:[di],ax inc si inc di inc di loop s mov ax,4c00h int 21h doend:nop code ends end start

数据结构实验指导书

目录 实验规则 (2) 实验环境 (2) 实验报告要求 (3) 实验一单链表(一) (4) 实验二单链表(二) (5) 实验三栈 (6) 实验四二叉树 (7) 实验五最短路径 (8) 实验六内部排序 (9)

实验规则 为了顺利完成实验教学任务,确保人身、设备的安全,培养严谨、踏实、实事求是的科学作风和爱护国家财产的优良品质,特制定以下实验规则: 1、实验前必须充分预习,完成指定的预习任务。预习要求如下: (1)认真阅读指导书,进行必要的设计与计算。 (2)熟悉实验内容。 (3)预先复习,并按要求编写程序。 (4)未完成预习任务者不得进入实验室。 2、遵守以下纪律: (1)在实验室不得做和实验无关的事情。 (2)进行任课老师指定内容以外的实验,必须经指导教师同意。 (3)遵守纪律,不迟到。 (4)保持实验室内安静、整洁,爱护公物,不许乱写乱画。 实验环境 本实验在386以上的微机上进行,运行环境为VC6.0。

实验报告要求 1、实验题目 2.实验目的 3.实验环境 4.实验内容与完成情况(可以附上自主设计的源程序)5.出现的问题及对问题的解决方案 6.实验思考:(学生对本次实验的收获的总结)

一、实验目的 掌握线性表的链式存储结构及其基本操作。 二、预习要求 1、看懂书上的算法,深入理解链表的物理存储模式和逻辑模式。 2、根据要求,编写程序准备上机调试。 三、实验内容 实现一个简单的学生信息管理系统,该系统的功能有: 1、利用单链表建立学生基本信息表 2、浏览每个学生的信息 3、根据学号查询某个学生的基本信息 4、添加学生信息到单链表中 5、删除一个学生的信息 四、实现提示 设计结点的结构体类型,包括学生的学号、姓名、年龄、性别;要求设计一个简单的菜单界面,根据需要选择所要进行的操作;构造函数,每一个函数实现上述的一个功能。

8086汇编语言程序设计实验指导书

汇编语言上机实验指导书 一、概述 上机实验总学时为16学时,其中综合性实验为2学时。实验共有6项暂定为8次,每次2学时。 1.实验辅导的主要内容 实验辅导的内容包括每个实验的实验目的;实验内容;对实验的算法及实验方法的必要说明;实验准备;实验步骤;实验报告要求;实验程序及参考框图。开始的实验介绍较细,后面的实验简要介绍。 2.实验的软硬件要求 关于汇编语言程序设计的硬件要求不高,有IBM-PC/XT即可,但应有彩色显示器以便进行图形实验。软件方面应有MASM.EXE5.0版(包括LINK.EXE),与MS-DOS版本配套的DEBUG程序和EDIT.EXE编辑软件(其它编辑软件也可以)。 3.加强实践能力的培养 实验目的不光是为了验证书本理论,更重要的是对实践能力的培养。其中包括: 实际调试程序的能力,例如修改程序参数的能力,查看结果的能力,设置断点调试运行的能力等; 开发汇编语言应用程序的能力,例如应用有关汇编软件的能力,进行系统调用和BIOS功能调用的能力,进行模块程序设计的能力等。 对某一问题用不同的程序实现的能力,例如我们为每个实验提供了参考程序(或程序段),目的是让每个实验者参照样板程序将实验成功地实现,在掌握其方法后,自己改变程序或自己编制程序加以实现。 实验一汇编语言运行环境及方法、简单程序设计(2学时、验证性) 1.实验目的: (1) 熟悉汇编语言运行环境和方法 (2)了解如何使用汇编语言编制程序 (3) 熟悉DEBUG有关命令的使用方法 (4) 利用DEBUG掌握有关指令的功能 (5) 利用DEBUG运行简单的程序段 2.实验内容 (1)学会输入、编辑汇编语言程序 (2)学会对汇编语言程序进行汇编、连接和运行 (3)进入和退出DEBUG程序 (4)学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。对于U命令、N命令、W命令等,也应试一下。 3.实验准备 (1)仔细阅读有关汇编语言环境的内容,事先准备好使用的例子。 (2)准备好源程序清单、设计好调试步骤、测试方法、对运行结果的分析。 (3) 编写一个程序:比较2个字符串所含的字符是否相同。若相同则显示’Match.’,否则显示’No match!’;(1)仔细阅读有关DEBUG 命令的内容,对有关命令,都要事先准备好使用的例子。 4.实验步骤 (1)在DOS提示符下,进入MASM目录。 (2)在MASM目录下启动EDIT编辑程序,输入源程序,并对其进行汇编、连接和运行。 ①调用edit输入、编辑源程序并保存在指定的目录中;例:edit abc.asm ②用汇编程序masm对源程序汇编产生目标文件obj。例:masm abc 不断修改错误,直至汇编通过为止。 ③用连接程序link产生执行文件exe.例:link abc ④执行程序 可直接从DOS执行程序,即在DOS环境中,输入文件名即可。 (3)详细记录每一步所用的命令,以及查看结果的方法和具体结果。 5.实验报告要求 (1)源程序清单。 (2) 如何启动和退出EDIT程序。 (3) 如何对源程序进行汇编及编辑。 (4)如何启动和退出DEBUG程序。

相关文档
最新文档