当前位置:
文档之家› 微机原理及应用实验教程参考答案
微机原理及应用实验教程参考答案
参考程序:
DATA SEGMENT
DW 6666H, 7777H, 8888H, 9999H, 0AAAAH, 0BBBBH, 0CCCCH, 0DDDDH, 0EEEEH, 0FFFFH
MOV BL, 02H
A1: MOV AL, BL
INC BL
MUL BL
ADD DX, AX
CMP AX, 00C8H
JNA A1
INT 03H
CODE ENDS
END START
参考程序二、(数据段内的数据可根据需要改变)
STACK SEGMENT STACK
DW 64 DUP(?)
STACK ENDS
在数据区中存放着一组数,数据的个数就是数据缓冲区的长度,要求用大数沉底法(或冒泡法)对该数据区中数据按递增关系排序。
设计思想:
A、从最后一个数(或者第一个数)开始,依次把相邻的两个数进行比较,即第N个数与第N-1个 数比较,第N-1个数与第N-2个数比较等等;若第N-1个数大于第N个数,则两者交换,否则不交换,直到N个数的相邻两个数都比较完为止。此时,N个数 中的最小数将被排在N个数的最前列。
MOV CX, 0064 ;循环次数
MOVAL,00
xxxx:010C MOV [BX],AL
INC AL
DAA ;加法的十进制调整
INC BX
LOOP 010C ;跳转到010c处
INT 03
所对应的宏汇编格式的程序:
DATA SEGMENT
32 DB DUP(?)
DATA ENDS
CODE SEGMENT
(2)用MASM.EXE编译源程序,编译无错后,生成相应的OBJ目标文件。
(3)用LINK. EXE 连接OBJ文件,生成可执行的EXE文件。
(4)运行程序:根据需要,可选择直接通过文件名的方式运行程序,或者是用DEBUG将可执行的EXE文件跳入内存后,用G命令运行。
例:C:\> DEBUG 文件名. EXE
DI=0000 DS=3000 ES=23A0 CS=138E IP=0000
NV UP DI PL NZ NAPONC
138E:0000 MOV AX,1234
-R AX ;输入命令
AX 0014 ;显示AX的内容
: ;供修改,不修改按回车。
若对标志寄存器进行修改,输入:-RF
屏幕显示如下信息,分别表示OF、DF、IF、SF、ZF、AF、PF、CF的状态。
3) 用W命令将程序写入到一个指定的地方或由计算机选择转载地址。
例:-W xxxx:xxxx 或-W
(3)用Q命令退出DEBUG。
(4)用DEBUG 路径\文件名.COM 的方式,将刚才保存的文件重新装入到内存。
(5)用U命令,查看程序转载的地址。
(6)用G命令运行程序。
例:-G=xxxx:xxxx 从程序转载处的地址开始运行
微机原理及应用实验教程参考答案
实验一 DEBUG调试程序
一、实验目的
掌握DEBUG调试软件的基本命令。为今后编程调试,打下基础。
二、实验内容:
DEBUG.EXE程序是专门为分析、研制和开发汇编语言程序而设计的一种调试工具,具有跟踪 程序执行、观察中间运行结果、显示和修改寄存器或存储单元内容等多种功能。它能使程序设计人员或用户触及到机器内部,因此可以说它是80X86CPU的心 灵窗口,也是我们学习汇编语言必须掌握的调试工具。WINDOWS操作系统安装时自带有DEBUG.EXE程序,不需另外安装。
格式1:E[起始地址] [内容表]
格式2:E[地址]
功能:格式1按内容表的内容修改从起始地址开始的多个存储单元内容,即用内容表指定的内容来代替存储单元当前内容。
例如:—E DS:0100 'VAR' 12 34
表示从DS:0100 为起始单元的连续五个字节单元内容依次被修改为
'V'、'A'、'R'、12H、34H。
格式2是逐个修改指定地址单元的当前内容。
如:—E DS:0010
156F:0010 41.5F
其中156F:0010单元原来的值是41H,5FH为输入的修改值。若只修改一个单元的内 容,这时按回车键即可;若还想继续修改下一个单元内容,此时应按空格键,就显示下一个单元的内容,需修改就键入新的内容,不修改再按空格跳过,如此重复直 到修改完毕,按回车键返回DEBUG“-”提示符。如果在修改过程中,将空格键换成按“-”键,则表示可以修改前一个单元的内容。
NV UP DI PL NZ NAPONC
不修改按回车键。要修改需个别输入一个或多个此标志的相反值,再按回车键。R命令只能显示、修改16位寄存器。
(4)显示存储单元命令 D
格式1:D[起始地址]
格式2:D[起始地址][结束地址|字节数]
功能:格式1从起始地址开始按十六进制显示80H(128)个单元的内容,每行16个单元,共 8行,每行右边显示16个单元的ASCII码,不可显示的ASCII码则显示“·”。格式2显示指定范围内存储单元的内容,其他显示方式与格式1一样。如 果缺省起始地址或地址范围,则从当前的地址开始按格式1显示。
(8)指定文件命令 N
格式:N<文件名或扩展名>
功能:指定即将调入内存或从内存写入磁盘的文件名。该命令应该用在L命令和W命令之前。
(9)装入命令 L
格式1:L[起始地址][盘符号][扇区号][扇区数]
格式2:L[起始地址]
功能:格式1根据盘符号,将指定扇区的内容装入到指定起始地址的存储区中。
格式2将N命令指出的文件装入到指定起始地址的存储区中,若省略起始地址,则装入到CS:100处或按原来文件定位约定装入到相应位置。
(10)写磁盘命令 W
格式1:W<起始地址>[驱动器号]<起始扇区><扇区数>
格式2:W[起始地址]
功能:格式1把指定地址开始的内容数据写到磁盘上指定的扇区中。
格式2将起始地址的BX×10000H+CX个字节内容存放到由N命令指定的文件中。BX中存 放程序段地址的末地址与首地址的差(通常程序存放在一个段中,即BX=0),CX中存放偏移地址的末地址与首地址的差。在格式2的W命令之前,除用N命令 指定存盘的文件名外,还必须将要写的字节数用R命令送入BX和CX中。
-U ;先用反汇编来查看源程序装入的地址和数据段的地址
:
-G=xxxx:xxxx ;从程序装入的地址处,开始运行程序
(5)查看实验结果。
(6)也可使用EMU8086软件进行调试和运行。
实验三 排序程序设计
一、实验目的
1、掌握分支、循环、子程序调用等基本的程序结构。
2、学习综合程序的设计、编制及调试
二、实验内容
2、DEBUG的常用命令
(1)汇编命令 A
格式:A [起始地址] 或 A ;每输入完一条指令,用回车键来确认。
功能:将输入源程序的指令汇编成目标代码并从指定地址单元开始存放。若缺省起始地址,则从当前 CS:100 (段地址:偏移地址)地址开始存放。A命令是按行进行汇编,主要是用于小段程序的汇编或对目标程序的修改,具有检查错误的功能。如有错误,用^Error 提示。然后重新输入正确命令即可。
B、对剩下的N-1个数重复上步,找到N-1个数中的最小数。
C、重复第二步,直到N个数全部排序好为止。
编程:将DATA数据区内的10个16位有符号二进制数,由小到大排序,结果放在原数据区。
这16个数是:6666H, 7777H, 8888H, 9999H, 0AAAAH, 0BBBBH, 0CCCCH, 0DDDDH, 0EEEEH, 0FFFFH
(11)退出命令 Q
格式:Q
功能:退出DEBUG,返回到操作系统。
以上介绍的是DEBUG常用命令,其他命令请参考有关书籍。
练习程序:1。 将0-99等100个数依次存放到1000:0000为首地址的存储单元中。
xxxx:0100 MOV AX,1000 ;数据段地址
MV DS, AX
XOR BX, BX ;清零
ASSUME CS:CODE,DS:DATA
START: MOV AX,1000H
MOV DS, AX
XOR BX, BX
MOV CX, 0064H
MOV AL, 00H
A1: MOV [BX], AL
INC AL
DAA
INC BX
LOOPA1
MOV AX, 4C00H
INT 21H
CODE ENDS
2、求某数据区内负数的个数。
设数据区的第一个单元存放数据的个数,从第二个单元开始存放数据,在最后一个单元存放结果。
参考程序一如下:
STACK SEGMENT STACK
DB 32 DUP (?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX, 0001H
(7)查看结果。如果结果在寄存器中,用R命令查看。如果结果在存储单元中,用D命令查看。
实验二 循环程序设计
一、实验目的
1、加深对循环结构的理解。
2、掌握循环结构程序设计的方法。
3、熟练掌握调试循环程序的方法。
二、实验内容
编制程序
1、使 S=1+2*3+3*4+…+N*(N+1),直到N*(N+1)项大于200为止
DATA SEGMENT
DB 06H,12H,88H,82H,90H,22H,33H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK,DS:DATA
START:MOV AX,DATA