文档视界 最新最全的文档下载
当前位置:文档视界 › 8086(汇编)语言程序设计实验指导书

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,DATA

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

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:DATA

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

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: INC 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

DATA SEGMENT

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

STRING2 DB 80 DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

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

DATA SEGMENT

STRN DB 'LINK DISPLAY SUBROUTING$'

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

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 ?

DATA ENDS

EXTRN KBINT: FAR ;外部引用说明

CODE SEGMENT

;主程序段

ASSUME CS:CODE ,DS:DATA

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 ;不是再接收

CALL DISPCHAR ;是,换行

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'

PUBLIC KBINT

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

XLAT ;查表找对应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(?)

CODE SEGMENT

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

END START

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

;DELD.ASM

DATA SEGMENT

STRN DB 80 DUP(?)

LEN DB ?

DATA ENDS

CODE SEGMENT

ASSUME CS: CODE,DS: DATA,ES: DATA

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

REPEAT:

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 REPEAT ;对所有重复字符都进行查找

LEA SI,STRN ;删除重复字符

MOV DI,SI

MOV CL,LEN

MOV CH,0

CYCLE: MOV AL,[SI]

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

MOV [DI],AL

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

ASSUME CS:CSEG,DS:DSEG,ES:DSEG

START:

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

KM:

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

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

汇编实验指导书

汇编语言实验指导书 授课教师李娜 授课对象 05计科、网络、06计科 授课时间 07-08学年第一学期 授课地点一、二、四机房 课程简介 一.实验课程的性质和目的 汇编语言程序设计是计算机专业的一门专业基础课,是学好计算机底层系统构成的课程。汇编语言程序设计是一门实用性很强的课程。汇编语言程序程序设计实验教案是教案的重要环节,是理论教案的重要补充,只有通过实验,学生才能熟练掌握汇编语言程序设计的基本方法,并对其有更深刻的认识。本门实验课是单独设课。 二.实验教案的方法和手段 为了提高实验教案效果,实验严把预习、实验、实验报告3个环节。实验在软件实验室机房完成,单独设组,个人完成实验,每项实验以小班为单位,实验考勤采用电子签到制度。 预习:安排学生学习实验内容,了解实验的过程和操作规程,并布置思考题和预习报告,让学生有目的地去查阅与实验相关的资料。 实验:实验开始前由指导教师讲解实验要点,提出注意事项。实验过程中,主题是学生,教师是辅助作用,要求学生独立完成实验。 实验报告:实验结束后,强调学生及时填写实验记录表,对实验过程进行详细记录,对实验结果细致地分析、讨论,完成相关思考题作业。 三.课程学时 本实验课实验总学时为32学时。 四.实验成绩的考核方法 汇编语言实验成绩按百分制核定。实验过程占50%,实验报告占50%。五.大纲的适用范围 本大纲适用计算机科学与技术专业和计算机应用与维护专业学生。 六.主要设备与器材配备

七.实验项目汇总表 实验一熟悉汇编语言编程环境 一.实验目的 <1)熟悉汇编语言编程环境; <2)掌握基本汇编程序。。 二.实验仪器设备 计算机 三.实验重点、难点 熟悉汇编语言编程环境; DEBUG常用命令的正确使用。-T/-U/-Q/-G 四.实验题目 比较两个字符串string1和string2所含的字符是否相同,若相同则显示‘metch’,否则,显示’no match’。 五.实验内容、步骤 1.调用EDIT建立ASM源文件。 2.用汇编程序MASM对源文件汇编产生目标文件OBJ。 <如有问题,可用DEBUG调试。) 3.用LINK联接程序产生执行文件EXE。 4.执行程序。 附:源程序 ;PROGRAM TITLE GOES HERE—COMPARE STRING ;******************************************************** data segment string1 db 'move the cursor backward.' String2 db 'move the cursor backward.'

实验四-循环结构汇编语言程序的设计实验报告

循环结构汇编语言程序设计实验报告

实验四循环结构汇编语言程序设计 一、实验目的 1、学习循环结构的汇编语言程序的设计和调试。 2、学习通过直接对8086计算机的寄存器和存的直接访问,编写更高效简洁的汇编程序。 3、加深掌握计算机整体的工作过程。 3、加深对排序算法的理解。 二、实验任务 编写程序求出数组A中(20个元素)的最大值和最小值(数组没有排序)。 要求至少采用二种不同的排序算法来实现。( 快速排序,归并排序、堆排序、Shell排序、插入排序、冒泡排序、交换排序、选择排序、基数排序……) 三、实验容 为了更好地实现老师所布置的实验任务,我们根据情况选取以下两种方式实

验。 1、利用冒泡排序的方式求解数组A中元素的最大值最小值。设计流程图如 下所示: 2、利用选择排序的方式求得数组A中元素的序列。设计流程图如下所示:

四、实验环境 PC机: winXP/win7(32位)/win7(64位)+winxp 虚拟机 汇编工具:Masm.exe+Link.exe。 五、实验步骤 1)建立和生成的文件 (1)编写的源程序,源程序名为abc、扩展名为.asm (2)源程序经汇编程序Masm.exe汇编(翻译)后生成二进制目标程序,文件名为abc.obj (3)目标程序需要经Link.exe连接生成可执行程序,文件名为abc.exe 2)汇编环境 最基本的汇编环境只需要两个文件:Masm.exe和Link.exe。将这两个文件拷入到已经建好的文件夹(例如 huibian)中,并将文件夹huibian放在硬盘根

目录C :\>下 3)上机步骤 进入DOS窗口中执行。 4)调试程序 进入DEBUG后,调试程序 5)调试成功后重新汇编、连接并生成可执行代码 6)执行程序,并对运行结果截图。 利用冒泡排序求得数组A中元素的最大值最小值的实验结果如下图所示:(说明:输入数据为:13,0,59,900,587,1,657,234,34,48) 利用选择排序对数组A中元素排序得到的序列得实验结果如下图所示:(说明:输入数据为13,0,59,900,587,1,657,234,34,48)

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

汇编语言实验报告题目:子程序设计 班级:rbw111 姓名:吴德鹏 学号:201107092416 完成日期:2013.12.22

概述: 《汇编语言程序设计》实验指导书是非计算机、非电类的其他专业:包括纺织、机械、热能等专业的《汇编语言程序设计》课程配套使用的实验指导。在理论课的教学中着重介绍微机系统的组成及工作原理,针对INTEL 8088/8086系列介绍相应的指令系统和汇编语言程序设计,介绍了接口的一般概念和CPU与外设交换信息的常用方式的软硬件设计思想。实验课测重培养学生的汇编语言设计能力及一些简单接口程序设计的方法,训练学生汇编语言程序调试的能力。通过实验,使学生加深对课堂教学内容的理解,培养学生综合使用微型机的初步能力。其中实验一、实验二是后续实验的基础,通过该实验,学生应能了解汇编语言源程序的一般格式,熟悉汇编语言程序的上机过程和调试程序的基本方法,重点放在DEBUG调试程序的命令使用方法上。也可以将实验一、实验二合并为一个实验,按照*实验一的要求进行;实验三、四、五进一步培养学生的各种结构的程序设计能力;实验六主要是简单接口的综合应用,为学生建立一个微机应用系统的概念,使学生通过具体的实例对相关的接口有感性认识,提高学生的实际动手能力和独立解决问题的能力。教师可以根据专业学时的多少和学生的具体情况来开设实验。 一、实验目的: 1.进一步熟悉分支、循环程序设计的方法及用DEBUG调式程序的方法。 2.熟练掌握子程序的参数传递的方式、子程序的嵌套、递归调用及其设计方法和技巧。 3、培养学生创新精神和独立运用所学基本知识和技能分析问题和解决问题的能力。 二、实验属性: 显示学生名次表:编制一程序,要求接收从键盘输入的一个班的学生成绩,并存放于50字的grade数组中,其中grade+i保存学号为i+1的学生的成绩。然后根据grade中的学生成绩,把学生名次填入50字的rank数组中,其中rank+i的内容是学号为i+1学生的名次。再按学号顺序把名次从终端上显示出来。 说明:程序设计中应体现出模块化程序设计思想和方法。 三、实验仪器设备: 提供实验条件。 Pc机并在debug的环境下进行调试

汇编语言学习知识程序设计实验

目录 目录 (1) 实验一利用DEBUG熟悉常用指令的使用 (2) 一、实验目的 (2) 二、示例 (2) 三、实验题 (2) 实验二汇编程序和连接程序的使用 (6) 一、实验目的。 (6) 二、示例。 (6) 三、实验题。 (8) 实验三顺序结构程序设计 (11) 一、实验目的 (11) 二、示例 (11) 三、实验题 (12) 四、实验报告 (15) 实验四循环结构程序设计 (16) 一、实验目的 (16) 二、示例 (16) 三、实验题 (18) 实验五分支结构程序设计 (21) 一、实验目的 (21) 二、示例 (21) 三、实验题 (22) 实验六子程序设计 (29) 一、实验目的 (29) 二、实验题 (29)

实验一利用DEBUG熟悉常用指令的使用 一、实验目的 熟悉指令系统,掌握常用指令的用法;通过实验加深对各种寻址方式的理解;能熟练使用DEBUG中的命令对指令进行反汇编,观察并了解机器代码。 二、示例 请分别用一条汇编语言指令完成如下功能:(过程略)。 1.用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。 ADD AL,[BX][SI] 2.用位移量为0520H的直接寻址方式把存储器中的一个字与3412H相加,并把结果送回该存储单元。 ADD WORF PTR [0520H],3412H 三、实验题 1.调试、验证下列指令的结果,已知(DS)=2000H,(BX)=0100H,(SI)=0002H,(BP)=0200H,(SS)=2300H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(21202)=B7H,(21203)=65H,(23204)=88H,说明各指令执行完后AX寄存器的内容。要求输入指令,相应存储单元的内容要事先设置,单步 P执行,观察执行结果。 (设置存储器的值)

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

微机原理实验报告 实验名称汇编语言程序设计 一、实验目的 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 程序运行结果

汇编语言程序设计课后习题解答宋人杰2版

第1章汇编语言基础知识 1.简述汇编语言源程序、汇编程序、和目标程序的关系。 答:用汇编语言编写的程序称为汇编源程序;汇编源程序在汇编程序的翻译下转换成计算机语言变成目标程序。 2. 简述汇编语言的优缺点。 答:(1) 汇编语言的优点: ①可有效地访问、控制计算机各种硬件设备,如磁盘、存储器、CPU、I/O端口等。. ②目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。 ③可与高级语言配合使用,应用十分广泛。 (2) 汇编语言的缺点: ①通用性和可移植性较差 ②相对于高级语言来说较繁锁、易出错、不够直观。 3.CPU的寻址能力为8KB,那么它的地址总线的宽度为多少? 答:13 4. 1KB的存储器有多少个存储单元? 答:1024个字节。 5. 指令中的逻辑地址由哪两部分组成? 答:指令中的逻辑地址由段基址和偏移量组成。 6. 以下为用段基址:偏移量形式表示的内存地址,试计算它们的物理地址。 (1) 12F8:0100 (2) 1A2F:0103 (3) 1A3F:0003 (4) 1A3F:A1FF 答: (1) 13080H (2) 1A3F3H (3) 1A3F3H (4) 245EFH 7. 自12FA:0000开始的内存单元中存放以下数据(用十六进制形式表示): 03 06 11 A3 13 01,试分别写出12FA:0002的字节型数据、字型数据及双字型数据 的值。 答:字节型数据:11H 字型数据:0A311H 双字型数据:0113A311H 8. 内存中某单元的物理地址是19318H,段基地址为1916H,则段内偏移地址为 多少?若段内偏移地址为2228H,则段基地址为多少? 答:若段基地址为1916H,则段内偏移地址为01B8H;若段内偏移地址为2228H,则段基地址为170FH 9. 在实模式环境中,一个段最长不能超过多少字节? 答:64KB 10. 实模式可寻址的内存范围是多少? 答:1MB

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

汇编语言程序设计 实验指导书 编写:郑利平 合肥工业大学计算机与信息学院 2008-9-1

汇编语言程序设计实验指导书 《汇编语言程序设计》实验是学习本课程的每个考生必须要通过的一个重要的实践环节,根据“汇编语言程序设计自学考试大纲”规定:上机实验单独作为本课程的实验考核成绩。《汇编语言程序设计》是一门实践性很强的课程,只有多上机操作,对汇编语言源程序进行编辑、汇编、连接、调试和运行全过程的训练,才能加深对本课程基本知识的理解,才能熟练地掌握程序设计的方法与技巧,才能学好本课程。 本实验指导书是完全按照《汇编语言程序设计自学考试大纲》中“实验大纲”的要求编写的,为便于考生较好完成上机操作和实验报告,特此作出如下说明和要求: (1)做好上机实验的准备工作:应考者对每个实验需要进行预习,了解相关内容和具体要求,熟悉上机操作步骤,学会相关系统软件的使用,掌握各种操作调试命令。 (2)编写源程序:按照实验题目的要求,应考者要事先独立完成汇编语言源程序的编写工作,并对源程序进行认真的静态检查,减少错误的发生。 (3)完成实验报告:做完上机实验,应考者要严格按照实验报告的格式要求写出实验报告。实验报告的内容为:实验名称、实验的目的、实验的内容和要求、实验步骤、实验结果并附上源程序清单和程序流程图。

实验一DEBUG的使用 (一)实验目的 1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。 2、掌握8086/8088的寻址方式及多字节数据的处理方法。 (二)实验设备 硬件环境:IBM-PC及其兼容机 软件环境:操作系统DOS3.0版本以上 调试程序https://www.docsj.com/doc/ba10262629.html, (三)实验内容和要求 实验内容: 1、利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。 2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H 单元中。 实验要求: 本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。 (四)预习要求 1、复习DOS启动方式和DOS有关命令的使用; 2、阅读本书后的附录,熟悉掌握DEBUG调试程序中的A、D、E、G、Q、R、T、U命令的书写格式及功能; 3、复习寻址方式和相关的数据传送指令及算术运算指令。 (五)实验步骤 1、启动DOS操作系统 2、运行https://www.docsj.com/doc/ba10262629.html,程序(若当前盘为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↙

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.调试过程中遇到的问题和解决的方法。

余敦辉《汇编语言》实验指导书实验1-实验3

《汇编语言》实验指导书

目录 实验一Debug命令的使用 (3) 实验二基本汇编指令的使用 (9) 实验三汇编语言程序的调试与运行 (13) 实验四系统功能调用程序的调试与运行………………错误!未定义书签。 实验五分支程序设计……………………………………错误!未定义书签。 实验六循环程序设计……………………………………错误!未定义书签。 实验七子程序设计………………………………………错误!未定义书签。 实验八高级汇编语言程序设计…………………………错误!未定义书签。 实验九I/O程序设计……………………………………错误!未定义书签。 实验十中断程序设计……………………………………错误!未定义书签。 实验十一综合程序设计 (38)

实验一Debug命令的使用 一、知识点 1、DEBUG简介 DEBUG.EXE是DOS提供的用于调试可执行程序的一个工具软件。在汇编语言程序调试中很常用。 DEBUG的提示符是“-”,所有DEBUG调试命令军在此提示符下输入。 DEBUG命令都是一个字母,后跟一个或多个参数,也可使用默认参数。 DEBUG命令的使用注意问题: (1)字母不分大小写 (2)只使用十六进制数,但没有带后缀字母“H” (3)命令如果不符合DEBUG的规则,则将以“error”提示,并以“^”指示出错位置。 (4)每个命令只有按下回车键后才有效,可以用Ctrl+Break终止命令的执行。 2、Debug的调入和退出 以WIN7环境为例,点击“开始/运行…”,在“运行”对话框中输入命令:cmd,然后点击“确定”,进入DOS命令行状态: C:\Documents and Settings\lfy> 然后输入命令: >Debug 进入Debug调试状态,出现Debug命令提示府“-”,在此提示符下可运行所需要的Debug 命令了。 退出Debug的命令:Q 3、Debug常用命令 (1)汇编命令A,格式为: - A [地址] 功能:从指定地址开始允许输入汇编指令,并将该指令汇编成机器指令代码从指定地址开始存放。若不指定地址,则系统从默认的地址开始存放。按回车键退出汇编状态 应用:用于调试一条指令或几条指令组成的一个程序段。

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

1.汇编语言程序设计实验篇 1.1.汇编系统软件简介 Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug 的模拟器。它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容。 1.1.1创建程序 https://www.docsj.com/doc/ba10262629.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”部分可以分别输入相应的变量定义和指令。

第四章MCS-51汇编语言程序设计

第四章MCS-51汇编语言程序设计 重点及难点: 单片机汇编语言程序设计的基本概念、伪指令、单片机汇编语言程序的三种基本结构形式、常用汇编语言程序设计。 教学基本要求: 1、掌握汇编语言程序设计的基本概念; 2、掌握伪指令的格式、功能和使用方法; 3、掌握顺序结构、分支结构和循环结构程序设计的步骤和方法; 4、掌握常用汇编语言程序设计步骤和方法。 教学内容 §4.1汇编语言程序设计概述 一、汇编语言的特点 (1)助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序。 (2)使用汇编语言编程比使用高级语言困难,因为汇编语言是面向计算机的,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。 (3)汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能够直接管理和控制硬件设备。 (4)汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用;但是掌握了一种计算机系统的汇编语言后,学习其他的汇编语言就不太困难了。 二、汇编语言的语句格式 [<标号>]:<操作码> [<操作数>];[<注释>] 三、汇编语言程序设计的步骤与特点 (1)建立数学模型 (2)确定算法 (3)制定程序流程图 (4)确定数据结构 (5)写出源程序 (6)上机调试程序 §4.2伪指令 伪指令是程序员发给汇编程序的命令,也称为汇编命令或汇编程序控制指令。 MCS- 51常见汇编语言程序中常用的伪指令:

第四章MCS-51汇编语言程序设计91 1.ORG (ORiGin)汇编起始地址命令 [<标号:>] ORG <地址> 2.END (END of assembly)汇编终止命令 [<标号:>] END [<表达式>] 3.EQU (EQUate)赋值命令 <字符名称> EQU <赋值项> 4.DB (Define Byte)定义字节命令 [<标号:>] DB <8位数表> 5.DW (Define Word)定义数据字命令 [<标号:>] DW <16位数表> 6.DS (Define Stonage )定义存储区命令 [<标号:>] DW <16位数表> 7.BIT位定义命令 <字符名称> BIT <位地址> 8.DA TA数据地址赋值命令 <字符名称> DATA <表达式> §4.3单片机汇编语言程序的基本结构形式 一、顺序程序 [例4-1]三字节无符号数相加,其中被加数在内部RAM的50H、51H和52H单元中;加数在内部RAM的53H、5414和55H单元中;要求把相加之和存放在50H、51H和52H单元中,进位存放在位寻址区的00H位中。 MOV R0 ,# 52H ;被加数的低字节地址 MOV R1 ,# 55H ;加数的低字节地址 MOV A ,@ R0 ADD A ,@ R1 ;低字节相加 MOV @ R0 , A ;存低字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;中间字节带进位相加 MOV @ R0 , A ;存中间字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;高字节带进位相加 MOV @ R0 , A ;存高字节相加结果 CLR A

新版汇编语言程序设计钱晓捷第1章习题答案

第1章汇编语言基础知识(全) 2010-10-18 19:32:40| 分类:答案集锦| 标签:|字号大中小订阅 第1章汇编语言基础知识 〔习题1.1〕简述计算机系统的硬件组成及各部分作用。 〔解答〕 CPU:包括运算器、控制器和寄存器组。运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为 处理单元提供所需要的数据。 存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。 外部设备:实现人机交换和机间的通信。 〔习题1.2〕明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 〔解答〕 主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速 度慢。 RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电 后能保存信息。 存储器由大量存储单元组成。为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常 称做I/O端口。 KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。 〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序? 〔解答〕 用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编 译通过的程序就是目标程序。

实验指导书参考2

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

汇编语言程序设计实验指导书 《汇编语言程序设计》实验是学习本课程的每个考生必须要通过的一个重要的实践环节,根据“汇编语言程序设计自学考试大纲”规定:上机实验单独作为本课程的实验考核成绩。《汇编语言程序设计》是一门实践性很强的课程,只有多上机操作,对汇编语言源程序进行编辑、汇编、连接、调试和运行全过程的训练,才能加深对本课程基本知识的理解,才能熟练地掌握程序设计的方法与技巧,才能学好本课程。 本实验指导书是完全按照《汇编语言程序设计自学考试大纲》中“实验大纲”的要求编写的,为便于考生较好完成上机操作和实验报告,特此作出如下说明和要求: (1)做好上机实验的准备工作:应考者对每个实验需要进行预习,了解相关内容和具体要求,熟悉上机操作步骤,学会相关系统软件的使用,掌握各种操作调试命令。 (2)编写源程序:按照实验题目的要求,应考者要事先独立完成汇编语言源程序的编写工作,并对源程序进行认真的静态检查,减少错误的发生。 (3)完成实验报告:做完上机实验,应考者要严格按照实验报告的格式要求写出实验报告。实验报告的内容为:实验名称、实验的目的、实验的内容和要求、实验步骤、实验结果并附上源程序清单和程序流程图。

实验一DEBUG的使用 (一)实验目的 1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。 2、掌握8086/8088的寻址方式及多字节数据的处理方法。 (二)实验设备 硬件环境:IBM-PC及其兼容机 软件环境:操作系统DOS3.0版本以上 调试程序https://www.docsj.com/doc/ba10262629.html, (三)实验内容和要求 实验内容: 1、利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。 2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H 单元中。 实验要求: 本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。 (四)预习要求 1、复习DOS启动方式和DOS有关命令的使用; 2、阅读本书后的附录,熟悉掌握DEBUG调试程序中的A、D、E、G、Q、R、T、U命令的书写格式及功能; 3、复习寻址方式和相关的数据传送指令及算术运算指令。 (五)实验步骤 1、启动DOS操作系统 2、运行https://www.docsj.com/doc/ba10262629.html,程序(若当前盘为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↙

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

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程序。

汇编语言实验指导书.

汇编语言实验指导书纪平张雷编写 安徽工业大学计算机学院 二00四年三月 目录 实验一DEBUG的启动及其基本命令的使用 (2 实验二内存操作数及寻址方法 (6 实验三汇编语言程序的调试与运行 (8 实验四查表程序设计 (10 实验五系统功能调用 (12 实验六循环程序设计 (13 实验七分支程序设计 (15 实验八子程序设计 (18 实验九综合程序设计 (20 附录实验报告 (21 实验一DEBUG的启动及其基本命令的使用一.实验目的: 掌握DEBUG 的基本命令及其功能 二.实验内容:

DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。 1、DEBUG程序的启动 在DOS提示符下,可键入命令: C>DEBUG[d:][path][文件名][ 参数1][参数2] 其中文件名是被调试文件的名称,它须是执行文件(EXE,两个参数是运行被调试文件时所需要的命令参数,在DEBUG程序调入后,出现提示符“-”,此时,可键入所需 的DEBUG命令。 在启动DEBUG时,如果输入了文件名,则DEBUG程序把指定文件装入内存。用户可以通过DEBUG的命令对指定文件进行修改、显示和执行。如果没有文件名,则是以当前内存的内容工作,或者用命名命令和装入命令把需要的文件装入内存,然后再用DEBUG的命令进行修改、显示和执行。 2、DEBUG的主要命令 (1汇编命令A,格式为: -A[地址] 该命令从指定地址开始允许输入汇编语句,把它们汇编成机 器代码相继存放在从指定地址开始的存储器中。 (2反汇编命令U,有两种格式: 1-U[地址] 该命令从指定地址开始,反汇编32个字节,若地址省略,则从上 一个U命令的最后一条指令的下一个单元开始显示32个字节。

汇编语言实验报告

汇编语言实验报告 专业: 班级: 姓名: 学号: 2011年12月14日

目录 实验1 利用DEBUG调试汇编语言程序段 (3) 实验2 初级程序的编写与调试实验(一) (11) 实验3 初级程序的编写与调试实验(二) (20) 实验4 汇编语言程序上机过程 (28) 实验5 分支程序实验 (33) 实验6 循环程序实验 (40) 实验7 子程序实验 (45)

实验1 利用DEBUG调试汇编语言程序段一.实验目的 1.熟悉DEBUG有关命令的使用方法; 2.利用DEBUG掌握有关指令的功能; 3.利用DEBUG运行简单的程序段。 二.实验内容 1.进入和退出DEBUG程序; 1)开始—运行,输入cmd,点确定进入命令窗口 2)在命令窗口中输入dubug进入debug程序 3)进入debug窗口后,输入q命令退出debug 2.学会DEBUG中的 1)D命令(显示内存数据D 段地址:偏移地址) 例1:-D100 ;显示DS段, 0100开始的128个节内容

说明: 指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。 ① D SEGREG[起始地址] [L 长度] ;显示SEGREG段中(缺省内默认为DS), 以[起始地址] (缺省内为当前的偏移地址),开始的[L 长度] (缺省内默认为128)个字节的内容. ② D SEGREG[段地址:偏移地址] ;显示SEGREG段中(缺省内默认为DS), [段地址:偏移地址] 开始的[L 长度] (缺省内默认为128)个字节内容 -D ;默认段寄存器为DS,当前偏移地址(刚进入debug程序偏移地址为0100H) -D DS:100 ;显示DS段, 0100H开始的128个字节内容 -D CS:200 ;显示CS段, 0200H开始的128个字节内容 -D 200:100 ;显示DS段, 0200:0100H开始的128个字节内容 -D 200 ;显示DS段, 0200H开始的128个字节内容

微机原理实验实验指导书2015

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

实验一8051单片机简单编程与调试 一、实验目的 通过简单小程序的输入和调试,熟悉并掌握Keil 的使用。学会Proteus与Keil的整合调试。 二、实验基本要求 建立三个项目,分别输入存储块清零、二进制BCD码及二进制ASCII码转换的汇编源程序,并进行仿真调试。画出实验程序的流程框图。 三、实验步骤 采用Keil Cx51 开发8051单片机应用程序一般需要经过下面几个步骤: 1、在 Vision2集成开发环境中创建一个新项目(Project),并为该项目选定合适的单片机CPU器件。 在菜单栏中选择“Project” →“New Project”,弹出“Create New Project”对话框,选择目标路径,在“文件名”栏中输入项目名后,单击“保存(S)”按钮,弹出“Selecte Device for Target”对话窗口。在此对话窗口的“Data base”栏中,单击“Atmel”前面的“+”号,或者直接双击“Atmel”,在其子类中选择“AT89C51”,确定CPU类型。如图所示。

点击“确定”按钮后,弹出如下的对话框 如果是进行汇编语言编程选择“否”。 2、利用μVision2的文件编辑器编写C语言(或汇编语言)源程序文件,并将文件添加到项目中去。一个项目可以包含多个文件,除源程序文件外还可以有库文件或文本说明文件。 在μVision2的菜单栏中选择“File”→“New”命令,新建文档,然后在菜单栏中选择“File” →“Save”命令,保存此文档,这时会弹出“Save As”对话窗口,在“文件名(N)”一栏中,为此文本命名,注意要填写扩展名“.asm”。单击“保存(S)”按钮,这样在编写汇编代码时,Keil会自动识别汇编语言的关键字,并以不同的颜色显示,以减少输入代码时出现的语法错误。程序编写完后,再次保存。 在Keil中“Project Workspace”子窗口中,单击“Target 1”前面的“+”号,展开此目录。在“Source Group 1”文件夹上单击鼠标右键,在右键菜单中选择“Add File to ‘Group Source 1’”,弹出“Add File to Group”对话窗口,在此对话窗口的“文件类型”栏中,选择“Asm Source File”,并找到刚才编写的.asm文件,双击此文件,将其添加到Source Group中,此时“Project Workspace”子窗口如图所示。

相关文档
相关文档 最新文档