微机原理及应用实验教程参考答案.docx

上传人:b****8 文档编号:12288621 上传时间:2023-06-05 格式:DOCX 页数:42 大小:30.21KB
下载 相关 举报
微机原理及应用实验教程参考答案.docx_第1页
第1页 / 共42页
微机原理及应用实验教程参考答案.docx_第2页
第2页 / 共42页
微机原理及应用实验教程参考答案.docx_第3页
第3页 / 共42页
微机原理及应用实验教程参考答案.docx_第4页
第4页 / 共42页
微机原理及应用实验教程参考答案.docx_第5页
第5页 / 共42页
微机原理及应用实验教程参考答案.docx_第6页
第6页 / 共42页
微机原理及应用实验教程参考答案.docx_第7页
第7页 / 共42页
微机原理及应用实验教程参考答案.docx_第8页
第8页 / 共42页
微机原理及应用实验教程参考答案.docx_第9页
第9页 / 共42页
微机原理及应用实验教程参考答案.docx_第10页
第10页 / 共42页
微机原理及应用实验教程参考答案.docx_第11页
第11页 / 共42页
微机原理及应用实验教程参考答案.docx_第12页
第12页 / 共42页
微机原理及应用实验教程参考答案.docx_第13页
第13页 / 共42页
微机原理及应用实验教程参考答案.docx_第14页
第14页 / 共42页
微机原理及应用实验教程参考答案.docx_第15页
第15页 / 共42页
微机原理及应用实验教程参考答案.docx_第16页
第16页 / 共42页
微机原理及应用实验教程参考答案.docx_第17页
第17页 / 共42页
微机原理及应用实验教程参考答案.docx_第18页
第18页 / 共42页
微机原理及应用实验教程参考答案.docx_第19页
第19页 / 共42页
微机原理及应用实验教程参考答案.docx_第20页
第20页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

微机原理及应用实验教程参考答案.docx

《微机原理及应用实验教程参考答案.docx》由会员分享,可在线阅读,更多相关《微机原理及应用实验教程参考答案.docx(42页珍藏版)》请在冰点文库上搜索。

微机原理及应用实验教程参考答案.docx

微机原理及应用实验教程参考答案

微机原理及应用实验教程参考答案

 

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

实验一DEBUG调试程序

一、实验目的

掌握DEBUG调试软件的基本命令。

为今后编程调试,打下基础。

二、实验内容:

DEBUG.EXE程序是专门为分析、研制和开发汇编语言程序而设计的一种调试工具,具有跟踪程序执行、观察中间运行结果、显示和修改寄存器或存储单元内容等多种功能。

它能使程序设计人员或用户触及到机器内部,因此可以说它是80X86CPU的心灵窗口,也是我们学习汇编语言必须掌握的调试工具。

WINDOWS操作系统安装时自带有DEBUG.EXE程序,不需另外安装。

1、DEBUG程序的使用

在DOS提示符下键入命令:

C:

\>DEBUG [盘符:

][路径][文件名.EXE][参数1][参数2]

这时屏幕上出现DEBUG的提示符“-”,表示系统在DEBUG管理之下,此时可以用DEBUG进行程序调试。

若所有选项省略,仅把DEBUG装入内存,可对当前内存中的内容进行调试,或者再用N和L命令,从指定盘上装入要调试的程序;若命令行中有文件名,则DOS把DEBUG程序调入内存后,再由DEBUG将指定的文件名装入内存。

2、DEBUG的常用命令

(1)汇编命令A

格式:

A[起始地址]或A           ;每输入完一条指令,用回车键来确认。

功能:

将输入源程序的指令汇编成目标代码并从指定地址单元开始存放。

若缺省起始地址,则从当前CS:

100(段地址:

偏移地址)地址开始存放。

A命令是按行进行汇编,主要是用于小段程序的汇编或对目标程序的修改,具有检查错误的功能。

如有错误,用^Error提示。

然后重新输入正确命令即可。

注:

DEBUG的A命令中数字部分输入的默认格式是16进制。

如输入10,对于计算机而言,就是10H。

另外A命令不支持标识符的输入。

只能用准确的段地址:

偏移地址来设置跳转的位置。

(2)反汇编命令U

格式1:

U[起始地址]

格式2:

U[起始地址][结束地址|字节数]

功能:

格式1从指定起始地址处开始固定将32个字节的目标代码转换成汇编指令形式,缺省起始地址,则从当前地址CS:

IP开始。

格式2将指定范围的内存单元中的目标代码转换成汇编指令。

(3)显示、修改寄存器命令R

格式:

R[寄存器名]或R

功能:

若给出寄存器名,则显示该寄存器的内容并可进行修改。

缺省寄存器名,则按以下格式显示所有寄存器的内容及当前值(不能修改)。

AX=0000  BX=0004 CX=0020 DX=0000 SP=0080 BP=0000 SI=0000

DI=0000  DS=3000 ES=23A0 CS=138E IP=0000

NVUPDIPLNZNAPONC

138E:

0000MOVAX,1234

   -RAX      ;输入命令

   AX0014    ;显示AX的内容

   :

         ;供修改,不修改按回车。

若对标志寄存器进行修改,输入:

-RF

屏幕显示如下信息,分别表示OF、DF、IF、SF、ZF、AF、PF、CF的状态。

   NVUPDIPLNZNAPONC

不修改按回车键。

要修改需个别输入一个或多个此标志的相反值,再按回车键。

R命令只能显示、修改16位寄存器。

(4)显示存储单元命令D

格式1:

D[起始地址]

格式2:

D[起始地址][结束地址|字节数]

功能:

格式1从起始地址开始按十六进制显示80H(128)个单元的内容,每行16个单元,共8行,每行右边显示16个单元的ASCII码,不可显示的ASCII码则显示“·”。

格式2显示指定范围内存储单元的内容,其他显示方式与格式1一样。

如果缺省起始地址或地址范围,则从当前的地址开始按格式1显示。

例如:

 -D200     ;表示从DS:

0200H开始显示128个单元内容

      -D100120 ;表示显示DS:

0100-DS:

0120单元的内容

说明:

在DEBUG中,地址表示方式有如下形式:

段寄存器名:

相对地址,如:

DS:

100

段基值:

偏移地址(相对地址),如:

23A0:

1500

(5)修改存储单元命令E

格式1:

E[起始地址][内容表]

格式2:

E[地址]

功能:

格式1按内容表的内容修改从起始地址开始的多个存储单元内容,即用内容表指定的内容来代替存储单元当前内容。

例如:

—E  DS:

0100 'VAR' 12 34

表示从DS:

0100为起始单元的连续五个字节单元内容依次被修改为

'V'、'A'、'R'、12H、34H。

格式2是逐个修改指定地址单元的当前内容。

如:

—EDS:

0010

156F:

001041.5F

其中156F:

0010单元原来的值是41H,5FH为输入的修改值。

若只修改一个单元的内容,这时按回车键即可;若还想继续修改下一个单元内容,此时应按空格键,就显示下一个单元的内容,需修改就键入新的内容,不修改再按空格跳过,如此重复直到修改完毕,按回车键返回DEBUG“-”提示符。

如果在修改过程中,将空格键换成按“-”键,则表示可以修改前一个单元的内容。

(6)运行命令G

格式:

G[=起始地址][第一断点地址[第二断点地址……]

功能:

CPU从指定起始地址开始执行,依次在第一、第二等断点处中断。

若缺省起始地址,则从当前CS:

IP指示地址开始执行一条指令。

最多可设置10个断点。

(7)跟踪命令T

格式:

T[=起始地址][正整数];缺省时执行一条指令

功能:

从指定地址开始执行‘正整数’条指令。

若缺省‘正整数’,表示执行一条指令,若两项都缺省,表示从当前CS:

IP指示地址开始执行一条指令。

(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中。

(11)退出命令Q

格式:

Q

功能:

退出DEBUG,返回到操作系统。

以上介绍的是DEBUG常用命令,其他命令请参考有关书籍。

练习程序:

1。

将0-99等100个数依次存放到1000:

0000为首地址的存储单元中。

 xxxx:

0100  MOVAX,1000          ;数据段地址

MVDS,AX

XORBX,BX           ;清零

MOVCX,0064         ;循环次数

MOVAL,00

xxxx:

010C  MOV[BX],AL

INCAL

DAA                  ;加法的十进制调整

INCBX

LOOP 010C           ;跳转到010c处

INT03                

所对应的宏汇编格式的程序:

DATASEGMENT

  32DBDUP(?

DATAENDS

CODESEGMENT

       ASSUMECS:

CODE,DS:

DATA

START:

 MOVAX,1000H

MOVDS,AX

XORBX,BX

MOVCX,0064H

MOVAL,00H

A1:

     MOV[BX],AL

 INCAL

 DAA

 INCBX

 LOOPA1

 MOVAX,4C00H

 INT21H

CODE ENDS

         ENDSTART

三、实验步骤:

通过练习程序,熟悉相关DEBUG的命令。

(1)用A命令输入相关程序。

(2)保存该程序到硬盘中。

1)先要计算该程序的大小。

分别在BX和CX送入相应的数值。

2)用N命令给程序起文件名。

例:

-NC:

\STU\文件名.COM。

此时保存的文件后缀名只能是.COM的(或缺省不要后缀名)。

3)用W命令将程序写入到一个指定的地方或由计算机选择转载地址。

例:

-Wxxxx:

xxxx  或-W  

(3)用Q命令退出DEBUG。

(4)用DEBUG路径\文件名.COM的方式,将刚才保存的文件重新装入到内存。

(5)用U命令,查看程序转载的地址。

(6)用G命令运行程序。

例:

-G=xxxx:

xxxx 从程序转载处的地址开始运行

(7)查看结果。

如果结果在寄存器中,用R命令查看。

如果结果在存储单元中,用D命令查看。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

实验二循环程序设计

一、实验目的

1、加深对循环结构的理解。

2、掌握循环结构程序设计的方法。

3、熟练掌握调试循环程序的方法。

二、实验内容

编制程序

1、使S=1+2*3+3*4+…+N*(N+1),直到N*(N+1)项大于200为止

2、求某数据区内负数的个数。

设数据区的第一个单元存放数据的个数,从第二个单元开始存放数据,在最后一个单元存放结果。

参考程序一如下:

STACKSEGMENTSTACK

DB32DUP(?

STACKENDS

CODESEGMENT 

      ASSUMECS:

CODE

START:

MOVDX,0001H

              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    

参考程序二、(数据段内的数据可根据需要改变)

STACKSEGMENTSTACK

       DW64DUP(?

STACKENDS

DATASEGMENT

   DB06H,12H,88H,82H,90H,22H,33H

DATAENDS

CODESEGMENT

   ASSUMECS:

CODE,SS:

STACK,DS:

DATA

START:

MOVAX,DATA

     MOVDS,AX

     MOVDI,0000H

     MOVCL,[DI]

     XORCH,CH

     MOVBL,CH

     INCDI

 A0:

MOVAL,[DI]

     TESTAL,80H

     JEA2

     INCBL

 A2:

INCDI

     LOOPA0

     MOV[DI],BL

     MOVAX,4C00H

     INT21H

CODEENDS

   ENDSTART

三、实验步骤:

(1)用编辑软件如:

EDIT,输入源程序,并保存,后缀名为.ASM。

(2)用MASM.EXE编译源程序,编译无错后,生成相应的OBJ目标文件。

(3)用LINK.EXE连接OBJ文件,生成可执行的EXE文件。

(4)运行程序:

根据需要,可选择直接通过文件名的方式运行程序,或者是用DEBUG将可执行的EXE文件跳入内存后,用G命令运行。

例:

C:

\>DEBUG文件名.EXE

   -U  ;先用反汇编来查看源程序装入的地址和数据段的地址

   :

   -G=xxxx:

xxxx ;从程序装入的地址处,开始运行程序

(5)查看实验结果。

(6)也可使用EMU8086软件进行调试和运行。

 

 

 

 

 

 

 

 

 

 

 

 

实验三排序程序设计

一、实验目的

1、掌握分支、循环、子程序调用等基本的程序结构。

2、学习综合程序的设计、编制及调试

二、实验内容

在数据区中存放着一组数,数据的个数就是数据缓冲区的长度,要求用大数沉底法(或冒泡法)对该数据区中数据按递增关系排序。

设计思想:

A、从最后一个数(或者第一个数)开始,依次把相邻的两个数进行比较,即第N个数与第N-1个数比较,第N-1个数与第N-2个数比较等等;若第N-1个数大于第N个数,则两者交换,否则不交换,直到N个数的相邻两个数都比较完为止。

此时,N个数中的最小数将被排在N个数的最前列。

B、对剩下的N-1个数重复上步,找到N-1个数中的最小数。

C、重复第二步,直到N个数全部排序好为止。

编程:

将DATA数据区内的10个16位有符号二进制数,由小到大排序,结果放在原数据区。

这16个数是:

6666H,7777H,8888H,9999H,0AAAAH,0BBBBH,0CCCCH,0DDDDH,0EEEEH,0FFFFH

参考程序:

DATA SEGMENT

DW6666H,7777H,8888H,9999H,0AAAAH,0BBBBH,0CCCCH,0DDDDH,0EEEEH,0FFFFH

DATA ENDS

CODE SEGMENT

      ASSUME CS:

CODE,DS:

DATA

 

START:

MOVAX,DATA

MOVDS,AX

MOVCX,9

L1:

    MOVDX,CX

MOVBX,0

L2:

    MOVAX,[BX]

INCBX

INCBX

CMPAX,[BX]

JLE DONE      ;小于或等于转移

XCHG[BX],AX

DECBX

DECBX

MOV[BX],AX

INCBX

INCBX

DONE:

 DECDX

JNE   L2  

LOOP  L1

MOVAX,4C00H

INT 21H

CODE ENDS

END START

三、实验步骤:

(1)用编辑软件如:

EDIT,输入源程序,并保存,后缀名为.ASM。

(2)用MASM.EXE编译源程序,编译无错后,生成相应的OBJ目标文件。

(3)用LINK.EXE连接OBJ文件,生成可执行的EXE文件。

(4)运行程序:

根据需要,可选择直接通过文件名的方式运行程序,或者是用DEBUG将可执行的EXE文件跳入内存后,用G命令运行。

例:

C:

\>DEBUG文件名.EXE

   -U  ;先用反汇编来查看源程序装入的地址

   :

   -G=xxxx:

xxxx ;从程序装入的地址处,开始运行程序

(5)查看实验结果。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

实验四系统功能调用

一、实验目的:

1、了解INT21H及INT10H中断系统中各功能块的作用及用法。

2、掌握字符方式下PC机显示器的显示控制。

二、实验内容及步骤:

1、在屏幕上输出HELLOWORLD的字符串。

2、等待键盘输入,无论是小写还是大写字母,均以大写字母显示在屏幕上,数字和其他键无效,回车返回系统。

(做完后,考虑如果要改成数字键有效,字符键无效,应如何编写)

3、在显示器上显示A-Z,26个英文字母。

4、从键盘输入0-F,显示对应不同的背景色。

参考程序一:

DATA SEGMENT

TEXTDB‘HELLOWORLD!

’,0DH,0AH,’$’

DATA ENDS

CODE SEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

 MOVAX,DATA

MOVDS,AX

MOVAH,9

LEADX,TEXT  ;或者用MOVDX,OFFSETTEXT

INT21H

MOVAH,4CH

INT21H

CODE ENDS

ENDSTART

 

参考程序二:

 CODESEGMENT

       ASSUMECS:

CODE

START:

 MOVAH,07H     ;等待键盘输入,无回显

INT21H

CMPAL,0DH      ;回车键

JZRT

CMPAL, ’z’      ;小写z

JASTART

CMPAL, ’a’      ;小写a

JBL1

SUBAL,20H          

JMPL2

L1:

  MPAL, ’Z’      ;大写Z

JASTART

CMPAL,’A’     ;大写A

JBSTART

L2:

  MOVAH,0EH    ;显示字符,也可用21H当中的2号功能代替,显示字符在DL

INT10H

JMPSTART

RT:

    MOVAH,4CH   ;结束返回系统

INT21H

CODEENDS

ENDSTART     

 

参考程序三:

CODE SEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAL,'A'

A2:

MOVAH,0EH

INT10H

INCAL

CMPAL,'Z'

JBA2

MOVAH,4CH

INT21H

CODE ENDS

ENDSTART

 

参考程序四:

DATASEGMENT

TBLDB48DUP(0FFH)

      DB0,1,2,3,4,5,6,7,8,9

      DB39DUP(0FFH)

      DB0AH,0BH,0CH,0DH,0EH,0FH

      DB57DUP(0FFH)

DATAENDS

CODESEGMENT

      ASSUMECS:

CODE,DS:

DATA

START:

 MOVAX,DATA

             MOVDS,AX

STD:

   MOVAL,04

MOVAH,00H ;320*200的彩色图形模式

INT10H

ST1:

             MOVAH,00H ;读取键盘状态 AL=字符码

INT16H

CMPAL,0DH

JZRTN

MOVBX,OFFSETTBL

XLAT        ;(AL+BL)->AL

CMPAL,0FFH

JZST1

MOVBL,AL

MOVBH,00H   ;置彩色调色板,BH=彩色调色板ID,BL和ID配套使用的颜色

MOVAH,0BH

INT10H

JMPST1

RTN:

   MOVAL,03H   ;80*25彩色模式

MOVAH,00H

INT10H

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

实验五 8253定时/计数器应用实验

5.0基础知识

可编程计数器/定时器接口芯片8253的基本功能是对脉冲信号进行计数。

当它用于对外部事件计数时,它的作用是计数器;当它用于对内部基准时钟计数时,它的作用是定时器。

8253内部有3个独立的计数器,又称为3个通道,具有完全相同的功能,其芯片结构和引脚如图2.3.1所示。

8253有2位地址线A0和A1用于内部寻址,内部地址分配如下:

A1A0

读操作

写操作

00

读通道0当前计数值

写通道0计数初值

01

读通道1当前计数值

写通道1计数初值

10

读通道2当前计数值

写通道2计数初值

11

非法操作

写通道0、1、2控制字

8253每个通道的内部结构主要由三部分组成:

初值寄存器、减1计数器和输出锁存器,其结构如图2.3.2所示。

8253每个通道有6种不同的工作方式,这些工作方式的区别主要体现在GATE信号控制作用以及OUT信号输出波形的不同。

归纳起来,各种工作方式有以下特点:

其中方式0和1输出波形相同,前者为编程触发,后者为GATE升沿触发;方式2和3输出连续波形,常用作分频器,其触发方式既可以采用GATE升沿触发,也可以采用编程触发(当GATE=1时);方式4和5输出波形相同,前者编程触发,后者GATE升沿触发。

所谓编程触发(即软触发)是指对8253某一通道进行编程(写控制字和计数初值或只写计数初值)后,即能触发通道工作;所谓GATE升沿触发(即硬触发)是指对通道编程后,还需要硬件信号GATE升沿才能触发通道工作。

软触发时,一次编程只能触发一次;硬触发时,一次编程后可用GATE升沿多次触发。

需要说明的是,无论是软触发还是硬触发,对于CLK信号都可能是异步的(即触发时序与CLK无关),所以在8253各通道内部,都要采用各种的CLK信号对触发进行同步,具体地说,无论何种触发,都要在其后CLK信号完成一次↑和↓后才能真正实现,其后计数器的减1计数,也是在CLK↓进行的。

这些细节,在后面的实验中请注意观察。

在通道工作过程中,随时可以读取其当前计数值。

如果是静态读取(即在停止计数的情况下),可以直接从通道读取;如果是动态读取(即边计数边读取),则必须先把减1计数器的内容锁存到输出锁存器中,然后才能进行读取。

对8253某个通道进行编程包括写方式控制字和计数初值。

方式控制字只须一个字节,随后的计数初值则可以只写一个字节(8位),也可以写两个字节(16位),要由前面的方式控制字决定。

如果只写一个字节,则另一个字节自动清零。

三个通道的方式控制字都写入同一个控制口(A1A0=11),而计数初值则分别写入各自的通道口(A1A0=00、01、10)。

8253方式控制字的格式是:

其中:

SC=00、01、10为通道选择:

RL=00为输出锁存器锁存当前计数值,

  01为只读、写低8位,

  

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2