微机原理-显示实验

一、实验目的:

  1. 掌握在 PC 机上以十六进制形式显示数据的方法。
  2. 掌握部分 DOS 功能调用使用方法。

3.熟悉 Windows 集成操作软件 Tdpit 的操作环境和操作方法。

 

二、实验环境:

PC 微机一台、TD-PITD 实验系统一套。

三、实验内容:

一般来说,有很多程序需要显示输出提示运行的状况和结果,有的还需要将数据区中的内容显示在屏幕上。本实验要求将指定数据区的数据以十六进制数形式显示在屏幕上,并利用 DOS 功能调用完成一些提示信息的显示。通过本实验,初步掌握实验系统配套操作软件的使用。

实验中常使用的 DOS 功能调用(INT 21H)说明如下。

  1. 显示单个字符输出    入口:AH=02H

   调用参数:AL=输出字符    例如:

        MOV  AH ,02H

        INT  21H

 

  1. 显示字符串

   入口:AH=09H

   调用参数:DS:DX=串地址,’$’为结束字符    例如:

        MOV  AH ,09H

        INT  21H

 

  1. 键盘输入并回显    入口:AH=01H

   返回参数:AL=输出字符    例如:

        MOV  AH ,01H

        INT  21H

 

  1. 返回 DOS 系统    入口:AH=4CH    调用参数:AL=返回码    例如:

        MOV  AH ,4CH

        INT  21H

 

汇编语言源程序包含指令和伪指令。如 ADD  AL,BL 和 MOV  AX,1000 都是指令。在汇编过程中伪指令并不形成任何代码,常用的伪指令有:

  1. 确定 CPU 的伪指令.586/.586 P。为了使汇编语言准确运行,要求在汇编语言源程序的开头用伪指令“.586”或者“.586 P”来表示当前的程序是在 Pentium 系统中运行。否则汇编程序采用默认值“.8086”;
  2. 标号赋值伪指令 EQU;
  3. 定义存储单元伪指令 DB、DW、DD、DQ 和 DT。DB 定义字节,DW 定义字,DD 定义双字,DQ 定义四字,DT 定义 10 个字节;
  4. 定义存储单元类型伪指令 BYTE、WORD、DWORD;
  5. 段定义伪指令 SEGMENT、ENDS、ASSUME 和 ORG。伪指令 SEGMENT 和 ENDS 总是成对使用,用这一对伪指令可将汇编语言与程序分成几个段,通常分为数据段、堆栈段和代码段。ASSUME 是告诉汇编程序哪个段为数据段,哪个段为堆栈段,哪个段为代码段;
  6. 简约段定义伪指令.DATA/.STACK/.CODE;
  7. 过程定义伪指令 PROC、ENDP、NEAR、FAR。定义过程的伪指令 PROC 和 ENDP 总是成对出现,这两条伪指令中间的内容作为一个子程序;
  8. 程序结束伪指令 END。

从存储区域读出的数据为十六进制数据,本程序设计的难点在于将十六进制的数字转换成 ASCII 码显示。数值与 ASCII 的关系:0~9 转换成 ASCII 码时直接在数值上加上 30H 即可,A~F 转换成 ASCII 码时直接在数值上加上 37H。程序流程图如图 2-1-1 所示,根据程序流程图编写汇编源程序。

图 2-1-1  显示程序参考流程

根据上述流程图编写实验程序(例程文件名:A1.ASM)

STACK1 SEGMENT STACK            ;堆栈段开始

    DW 256 DUP(?)

STACK1 ENDS

DATA SEGMENT               ;数据段开始

    MES DB 'Press any key to exit!',0AH,0DH,0AH,0DH,'$'

    MES1 DB 'Show a as hex:',0AH,0DH,'$'

    SD DB 'a'

DATA ENDS

CODE SEGMENT               ;代码段开始

    ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA          ;设置 DS 寄存器

     MOV DS,AX

     MOV DX,OFFSET MES     ;取字符串首地址,显示退出提示

     MOV AH,09H              ;在 DOS 界面显示字符串

     INT 21H

     MOV DX,OFFSET MES1    ;取字符串首地址,显示字符串      MOV AH,09H

     INT 21H

     MOV SI,OFFSET SD

     MOV AL,DS:[SI]          ;把’a’送到 AL 中

     AND AL,0F0H            ;取字节的高 4 位

     MOV CL,4

     SHR AL,CL

     CMP AL,0AH             ;判断是否是 A 以上的数

     JB C2

     ADD AL,07H             ;大于等于 A,数值加 7H

C2: ADD AL,30H               ;数值加 30H,转换成 ASCII 码

    MOV DL,AL

    MOV AH,02H              ;将转换的相应 ASCII 码在 DOS 界面下显示

    INT 21H

    MOV AL,DS:[SI] 

    AND AL,0FH              ;取字节的低 4 位

    CMP AL,0AH

    JB C3

    ADD AL,07H

C3: ADD AL,30H

    MOV DL,AL              ;显示字符

    MOV AH,02H

    INT 21H

KEY: MOV AH,1              ;判断是否有按键按下?

    INT 16H                 ;(为观察运行结果,使程序有控制的退出)

    JZ KEY

    MOV AX,4C00H          ;结束程序,退出 

    INT 21H

CODE ENDS END START

实验步骤:

1.使用 MASM5.0 实现

  1. 编辑源代码

源代码的编辑可在.txt 文档中直接编写,程序编写完成后将文件名改成

A1.asm,并保存在 E 盘目录下的 MYCODE 文件夹中,如:E:\MYCODE\A1.asm。

  1. 编译 A1.asm 文件

在 DOS 下打开 MASM5.0 所在目录。方法:开始->运行输入 cmd 可进入 DOS

系统,依次输E:回车,进入E盘根目录,然后输入E:\cd mycode回车,然后输入E:\mycode>d:\MASM5.0\MASM a1.asm,之后连续3次回车。程序无错则输入link a1.obj。然后连续3次回车,然后再输入a1.exe。

本实验的结果就是将 ASCII 码‘a’的十六进制数值在屏幕上显示出来。从屏幕上看显示结果可知实验完成。但是运行 a1.exe 文件的速度非常之快,我们无

法知道程序运行的过程,下面将介绍使用 DEBUG 调试来查看程序的运行步骤。

  1. DEBUG 调试

DEBUG 命令式操作系统的一个外部命令,不是 MASM5.0 的命令。

进入 DEBUG,可以对程序进行一步一步的跟踪执行,可以查看每条指令执行后,CPU 寄存器的变化,内存单元的变化,可以修改寄存器内容和存储单元内容,可以连续执行多条指令或全速执行程序等。

常用的调试命令如下:

-u 反汇编

-r 显示寄存器内容

-g [=address1][address2][address3]  执行到断点行,如:-g 12 为执行到第 12 行

-t [=address][value] 跟踪,配合-g 使用 如:-t 12 1 为从第 12 行开始,每执

行 1 条指令后停下来

-e address [list] 修改地址 address 处的值为 list,list 不写时默认为 0

-d 查看数据

-q 退出返回操作系统下面我们调试

2.使用 Tdpit 集成操作软件实现

  1. 运行 Tdpit 集成操作软件,进入编辑调试集成环境。

根据程序设计使用语言不同,在“语言设置”菜单项中设置所使用的语言。如图 2-1-9 所示。该项一经设置,会再下次启动后仍保持不变。

图 2-1-9  设置语言环境

(3)开始新建文件进行编程。点击“文件”菜单项中的“新建”,可以新建一个空白文档。默认名为 Td-pit1。如图 2-1-10 所示。

(4)编写程序,如图 2-1-11 所示,并保存,此时软件会提示输入新的文件名,输入文件名后点击保存。

  1. 点击编译文件,若程序编译无误,然后再点击 连接程序。

编译连接成功会在输出信息栏显示输出信息,如图 2-1-12 所示。

2-1-12  编译连接输出信息

  1. 编译连接成功后可以点击运行程序,查看运行结果。

(5)可以点击,调试程序,进入调试界面,进行程序的调试。

猜你喜欢

转载自blog.csdn.net/xu_benjamin/article/details/85266901