2009级微机原理与接口技术实验(2)

2019-05-17 14:07

按空格键完成一个字节的显示与修改(不修改可不输入数据),且显示下一个字节的地址和内容的等待修改。若多个单元不修改,则可连续按空格键。 按“-”键

按“-”键完成一个字节的显示与修改(不修改可不输入数据),且显示前一个字节的地址和内容的等待修改。若多个单元不修改,则可连续按“-”键。 若要结束修改,可按回车键终止E命令。

R显示和修改寄存器命令,其格式有两种: R——显示寄存器命令;

R待修改的器存器,如RAX;RBX等; N命名文件,其格式只有两种:

N文件名.后缀——无盘符默认为当前盘符; N盘符:文件名.后缀;

N命令需要和L读文件命令或W写文件命令在一起使用。 L读文件命

当N命名的文件后缀是COM时,只能用L或L100。文件只能从偏移地址100H处开始存放。 当N命名的文件后缀是EXE时,只能用L。文件只能从偏移地址0000H处开始存放。 当N命名的文件是其他方式时,可用L或L偏移地址(任意)。文件可以从任意偏移地址处开始存放。 读文件,其方式有两种,我们只用一种: N盘符:文件名.后缀; L或L偏移地址。 W写文件命令

当N命名的文件后缀是COM时,只能用W或W100。从偏移地址100H处开始的内容写入文件,文件长度由寄存器CX值决定。

当N命名的文件后缀是EXE时,用W则出错。

当N命名的文件是其他方式时,可用W偏移地址(任意)。 写文件,其方式有两种,我们只用一种: N盘符:文件名.后缀;

RCX——将文件长度值送入CX 。 W或W偏移地址; F 填充命令,其方式有两种: F起始地址 终止地址 值表; F起始地址 L字节数 值表。

例如:FD68:100 120 1,2,3,’ABCD’,’C’

FD33:20 L10 1,2,3,’A’,’V’

M移动内存命令,其方式有两种: M起始地址 终止地址 目的地址; M起始地址 L字节数 目的地址。 具有移动数据块的功能。

C比较命令,其方式有两种:

5

C起始地址 终止地址 目的地址; C起始地址 L字节数 目的地址。 具有比较数据块的功能。 S检索或查找命令,其方式有两种:

S起始地址 终止地址 值表(为单个字符或数字,与 F填充值表不同); S起始地址 L字节数 值表。 在数据块中查找值表所在单元。 I输入命令,其方式为: I外部端口地址 O输出命令,其方式为: O外部端口地址 字节数据 H十六进制数加减命令,其方式为: H数1 数2 G连续运行命令,其方式为两种: G=起始地址; G=起始地址 断点地址

通常不用第二种方式,因为用T单步跟踪命令也有同样功能。 T单步跟踪命令,其方式为两种: T=起始地址; T=起始地址 指令条数 P进程命令,与T单步跟踪命令用法一样。其区别在于它遇子程序不追踪。

注意:在DEBUG命令中,逗号可以用空格来代替。但在A命令中写汇编程序时不行。

6

实验二 加法程序的编写与调试实验

实验目的

熟练掌握编写汇编语言程序的基本方法和基本框架。

学会编写顺序结构、分支结构和循环结构的汇编程序,掌握宏定义与宏调用的方法。 掌握程序中数据的产生与输入输出的方法。 掌握源程序的汇编和连接方法。

实验要求

实验前准备

要弄懂所提供的源程序中的每一指令,不懂的可查各种汇编语言书籍。

对程序中结果进行分析,并准备好上机调试与用汇编程序及汇编调试的过程。

本实验要求在PC机上用EDIT平台编写源程序,用MASM和LINK对其进行汇编和连接,然后在DOS下执行所生成的.exe文件,如果源程序不错,应能显示正确结果。

用DEBUG对已生成的可执行文件进行调试,分单步和连续两种方式,并查看各寄存器的变化和数据在内存中的情况。 修改源程序,将其变成一个可以进行5位数加法的程序。编写一个1234+5678的固定4位数加法程序。 (注意:编缉程序时,不能在中文模式下进行。除非注释。当程序编辑完保存时,文件名中不能有中文,而且文件名字符数不能超过8个。) 编程提示

两个数据可用相反的顺序以ASCII码的形式存放在数据段的DATA1和DATA2中,相加时可从DATA1和DATA2的起始字节开始相加,即从数的个位数开始相加。相加结果可存放在DATA2开始的存储单元中。

程序中的加法运算是ASCII码运算,采用带进位的加法运算指令ADC,后面应加一条ASCII码加法调整指令AAA,经AAA调整的加法指令,将ASCII码的数据高4位清“0”,然后将结果每位数高4位拼成3,变成ASCII码存放到DATA2中,则可方便地取出输出。

程序中应有输出程序段,采用MOV AH,02H ,INT 21H,将要输出字符的ASCII码送入 AL中。 思考题

程序中的原始数据是以怎样的形式存放的数据区中?请用DEBUG调试程序进行观察、分析。

实验报告

写出1234+5678的固定4位数加法程序,并注释。画出程序流程框图。

附录1. 汇编程序MASM和连接程序LINK简介:

当在EDIT平台上写好源程序,并以.asm的扩展名存盘后(注意存盘路径),用两个可执行文件masm.exe和link.exe,对源程序进行汇编和连接,生成.exe文件后执行该文件,如程序正确,必能显示正确结果;如不能显示,则要查找出原因改正,直到能正确显示为止。

在汇编过程中,如出现错误,要根据提示返回EDIT查找源程序中的相应行,找出错误并修改好,再进行汇编,直到没有错误为止。

附录2. DOS中断功能调用简介: 本实验两个题目的程序中,都要用到DOS软中断系统功能调用。DOS中断功能有很多,这儿用到的只是其中一种,即“INT 21H”,这是最常用的中断功能,包含了几十种子功能。调用这个中断功能,必须预先输入中断功能调用号,即子功能号,调用号都送进AH中。在提供的三段程序中,共用到三种:

1.01H号功能(输入一个字符) 该功能将等待用户从标准输入设备(如键盘)上输入一个字符,把它传送到AL中并在标推输出设备(如屏幕)上输出。同时检查输入的字符是否为“Ctrl+Break”,若是,则终止程序运行。入口参数:AH=01H;

7

出口参数:AL中存放的从键盘输入的ASCII码。

如键盘输入字母A,该字母除了存入AL外,还将它显示在屏幕上。

2.02H号功能(输出一个字符)

该功能将寄存器DL中一个字符的ASCII码输出到标准输出设备(如屏幕)上。同时,系统将检查输出的字符是否为“Ctrl+Break”,若是,则终止程序运行。入口参数:AH=02H;出口参数:无。

3.09H号功能(字符串显示)

这一功能可以在标准输出设备上显示某个字符串。调用前应当先将待显示的字符串首地址送到DS:DX中,即把字符串所在段的段地址送DS,位移量送DX,系统将按地址的先后顺序将待显示字符串依次输出。入口参数:AH=09H,DS:DX指向存放字符串的地址;出口参数:无。

有一点需要注意,用于显示的字符串都是ASCII码,以美元符号“$”为结尾,“$”也称为界定符,在半角输入(英文)状态下为“$”,在全角输入(中文)状态下为“¥”。如果希望在输完一组数后自动换行,要在界定符前加上回车符(0DH)和换行符(0AH)。

附录3:

下面的程序就是可以通过键盘输入任意4位数据的加数和被加数,进行加法运算。

程序中SAV过程为接收键盘键入的数据,并保存到SI所指的数据区的偏移地址的单元中。 宏定义CFD为在通过键盘键入4位数据后回车换行,使执行结果比较清晰。 (2)程序清单如下: DATA SEGMENT DATAl DB 4 DUP(?) DATA2 DB 5 DUP(?) DATA3 DB 0DH,0AH,'$' DATA ENDS STACK SEGMENT PARA STACK 'STACK' DB 64 DUP(?) STACK ENDS CFD MACRO MOV DX,OFFSET DATA3 MOV AH,09H ;显示字符串 INT 21H ENDM ;回车换行宏定义 CODE SEGMENT PARA 'CODE' ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START PROC FAR PUSH DS MOV AX,00H PUSH AX MOV AX,DATA MOV DS,AX MOV ES,AX ;程序初始化 MOV SI,OFFSET DATA1 ;将DATAl的偏移地址送SI CALL SAV ;调用将键盘键入数据保存过程 CFD ;调用回车换行宏定义 MOV SI,OFFSET DATA2 ;将DATA2的偏移地址送SI CALL SAV ;调用将键盘键入数据保存过程 CFD ;调用回车换行宏定义 STD ;方向标志DF为“1”,为反向串 MOV SI,OFFSET DATA1+3 ;将加数最末位地址送SI

8

LOPl:

MOV DI,OFFSET DATA2+3 ;将被加数最末位地址送DI MOV CX,04H ;共4位数相加 MOV AH,00H ;清AH LODS DATA1+3 ;取串:([SI])→AL,(SI一1)→SI SAHF ;将AH中进位标志送标志寄存器 ADC AL,[DI] ;带进位加,结果送AL AAA ;ASCII码十进制加法调整 LAHF ;将标志寄存器内容暂存在AH中 OR AL,30H ;将计算值拼成ASCII码

INC DI ;将计算值的ASCII码存入DATA2中

STOSB ;存串, AL→[DI],(DI-1)→DI DEC DI ;调整被加数地址指针,指向下一位数 LOOP LOP1 ;取下一位数转到LOP1 INC DI ;4位加完,调整结果地址指针 AND AH,01H ;将最高位进位取出送AH OR AH,30H ;拼成ASCII码 MOV [Dl],AH ;存到DATA2的最高位 MOV AH,02H ;调用DOS的显示功能 MOV CX,05H ;共显示5位数

LOP2: MOV DL,[DI] ;将显示结果从最高位开始送入DL中 INT 2lH ;调用21H号中断 INC DI ;使结果地址指针指向下一位 LOOP LOP2 ;显示下一位转LOP2 RET ;5位显示完毕 START ENDP SAV PROC NEAR ;取键盘键入的数据,并存入数据段过程 MOV CX,04 ;取4位数

LEP: MOV AH,0lH ;调用DOS读取键入数据功能 INT 21H ;调用21H中断 MOV [Sl],AL ;将键入数据存入数据段 INC SI ;移动地址指针 LOOP LEP ;共键入4位并存入数据段 RET ;4位键入完毕 SAV ENDP

CODE ENDS END START 执行结果:

c:>DATADD2↓ 1234 5678

6912

可以通过DEBUG调试程序,观察数据段在程序执行前后,DATA1和DATA2中数据存放的情况。 1. 进入DEBUG状态 C:>DEBUG DATADD.EXE↓(如果程序是DATADD.EXE的话) 2. 用U命令得到源程序 注:(1)执行第一次U命令显示17行程序,再执行U命令显示后面余下的程序。 (2)从U命令显示的内容,找到代码段地址(CS),代码段偏移地址(IP),数据段地址(DS,ES),数据段偏移地址(SI) 以及DATA1、DATA2的偏移地址。 (3)执行程序

9


2009级微机原理与接口技术实验(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2013-2018年中国特殊工业用膜产业调研与战略咨询报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: