微机原理与接口技术实验报告

时间:2024.4.1

目录

实验一 汇编语言程序设计开发环境... 2

实验二 BCD数运算与十进制调整... 6

实验三 键盘输入与回显... 10

实验四 字符串匹配... 13

实验五 用递归计算阶乘... 17

实验六 中断服务子程序设计... 20


实验一 汇编语言程序设计开发环境

一、实验目的

1、掌握汇编语言程序设计的基本方法和技能;

2、熟练掌握使用TC编辑环境编辑汇编语言源程序;

3、熟练掌握宏汇编程序MASM的使用;

4、熟练掌握连接程序LINK的使用;

5、debug的使用;

二、实验设备

计算机

三、实验原理

上机过程:手工编写的源程序——> 汇编语言源文件(.asm)——>机器语言目标文件(.obj)——>机器语言执行文件(.exe)

(1)汇编语言

汇编语言源程序的汇编过程是是利用汇编程序(MASM)对已编辑好的源程序文件(.ASM)进行汇编,将源程序文件中以ASCII码表示的助记符指令逐条翻译成机器码指令,并完成源程序中的伪指令所指出的各种操作,最后可以建立3个文件:扩展名为 .OBJ的目标文件、扩展名为 .LST 的列表文件和扩展名为 .CRF 的交叉索引文件。

在对源程序文件(ASM文件)汇编时,汇编程序将对ASM文件进行两遍扫描,若程序文件中有语法错误,则结束汇编,汇编程序将指出源程序中存在的错误,这时应返回编辑环境修改源程序中的错误,再经过汇编,直到最后得到无错误的目标程序,即OBJ文件。因此,汇编程序的主要功能可以概括为以下三点:

(1) 检查源程序中的语法错误,并给出错误信息;

(2) 产生目标程序文件(OBJ文件),并可给出列表文件(.LST文件);

(3) 展开宏指令

(2)DEBUG命令

1显示内存单元内容的命令D

格式(1):-D 地址

D命令中的地址可为段内偏移量,也可为段基址和段内偏移量两部分,中间用冒号隔开,如1680:0110,即指段基址为1680H,段内偏移量为0110H。Debug中所显示的数据均为十六进制数,且省去了后面的H标志。

格式(2):-D 范围

将显示指定地址范围内的内存单元的内容,起始地址可由段基址及段内偏移量两个部分组成,中间用冒号“:”隔开,也可以只指出段内偏移量,而此时的段基址在DS中。这里所说的范围包含起始地址和结束地址。

比如 –D DS:1000  1020

将显示数据段偏移地址为1000H到1020H的内容。

2运行程序命令G

格式:G [=地址][地址[地址…]]

该命令可以在程序运行中设置断点。它是Debug程序进行程序调试的主要命令之一。

示例:-g 001a 则执行从当前cs:ip至001a的指令,注意:地址设置必须从指令的第一字节设起。

<1>第一个参数“=地址”规定了程序执行的起始地址,以CS内容作段地址,等号后面的地址只需给出地址偏移量。此时,命令G与地址之间的等号不能省去。

如果在G命令执行前,已经设置了CS值和IP值,则也可以直接用G命令,从指定地址执行程序。

<2>格式中后面给出的地址是指断点地址,最多可设置10个断点。当程序执行到一个断点时,就停下来,显示CPU各寄存器的内容和标志位的状态,以及下一条待执行的指令,被调试程序的所有断点全部被取消,并返回Debug。

<3>地址参数所指的单元,必须包含有有效的8088指令的第一个字节,否则将产生不可预料的结果。

<4>堆栈必须至少包含有6个可用字节,否则也将产生不可预料的结果。

<5>若断点地址只包括地址偏移量,则认为段地址在CS寄存器中。

四、实验内容

要求:把40个字母a的字符串从源缓冲区传送到目的缓冲区。

实验程序

data     segment                    ;define data segment

source_buffer    db   40 dup ('a')

data     ends

extra    segment                    ;define extra segment

dest_buffer      db   40 dup (?)

extra    ends

code    segment                      ;define code segment

main    proc    far                   ;main part of program

assume  cs:code,ds:data,es:extra

start:                                ;starting execution address

;set up stack for return

push    ds                            ;save old data segment

sub     ax,ax                              ;put zero in AX

push    ax                                  ;save it on stack

;set DS register to current data segment

mov     ax,data                             ;data segment  addr

mov     ds,ax                               ;into DOS register

;set ES register to current extra segment

mov     ax,extra                             ;extra segment addr

mov     es,ax                               ;into ES register

;MAIN PART OF PROGRAM GOES HERE

lea     si,source_buffer                           ;put offset addr of source

;buffer in SI

lea     di,dest_buffer                            ;put offset addr of dest

;buffer in DI

cld                                          ;set DF flag to forward

mov     cx,40                              ;put count in CX

rep     movsb                               ;move entire string

ret                                          ;return to DOS

main    endp                        ;end of main part of program

code    ends                         ;end of code segment

end     start                                 ;end assembly

上机调试及运行结果

1用masm程序产生OBJ文件

2用LINK产生exe文件

3程序的执行

4用反汇编命令U来确定所要设定的断点地址

由上图可知,断点地址为的偏移地址为:001C

5用G命令使程序运行,同时设定断点为001C

6用D命令查看数据段的有关区域,查看程序的运行结果。

五、实验心得

通过这次上机实验,第一次接触了TC环境,对汇编程序的编译、运行有了感性的认识。学会了如何在TC环境下编程,熟悉了根据提示,修改错误,调试程序的过程,并学会了使用几个常用的DEBUG命令。


实验二 BCD数运算与十进制调整

一、实验目的

1、熟悉BCD码的基本知识

2、熟悉汇编语言BCD码多字节加减法基本指令的使用方法;

3、掌握BCD码调整指令的使用方法。

二、实验设备

计算机

三、实验原理

1、BCD码

BCD码是一种用二进制编码的十进制数,又称二—十进制数。它是用4位二进制数表示一个十进制数码的,由于这4位二进制数的权为8421,所以BCD码又称8421码。在IBM PC机中,表示十进制的BCD码可以用压缩的BCD码和非压缩的BCD码两种格式表示。

(1)压缩的BCD码

压缩的BCD码用4位二进制数表示一个十进制数位,整个十进制数形式为一个顺序的以4位为一组的数串。

(2)非压缩的BCD码

非压缩的BCD码则以8位二进制数表示一个十进制数位,8位中的低4位表示8421的BCD码,而高4位则没有意义。

2、BCD码的调整指令

(1)压缩的BCD码调整指令

1)DAA加法的十进制调整指令

该指令把AL中的和调整到压缩的BCD格式,这条指令之前必须执行ADD或ADC指令,加法指令必须把两个压缩的BCD码相加,并把结果存放在AL寄存器中。

功能:如果AL寄存器中低4位大于9或辅助进位(AF)=1,则(AL)=(AL)+6且(AF)=1;如果(AL)>=0A0H或(CF)=1,则(AL)=(AL)+60H且(CF)=1。同时,SF、ZF、PF均有影响。

2) DAS 减法的十进制调整指令

该指令把AL中的差调整到压缩BCD格式,这条指令之前必须执行SUB或SBB指令,减法指令必须把两个BCD码相减,并把结果存放在AL寄存器中。

功能:如果(AF)=1或AL寄存器中低4位大于9,则(AL)=(AL)-6且(AF)=1;如果(AL)>=0A0H或(CF)=1,则(AL)=(AL)-60H且(CF)=1。同时SF、ZF、PF均受影响。

(2)非压缩的BCD码调整指令

1)AAA 加法的ASCII调整指令

执行的操作:(AL)←把AL中的和调整到非压缩的BCD格式

(AH)←(AH)+调整产生的进位值

这条指令之前必须执行ADD或ADC指令,加法指令必须把两个非压缩的BCD码相加,并把结果存放在AL寄存器中。

2)AAS减法的ASCII调整指令

执行的操作:(AL)←把AL中的差调整到非压缩的BCD格式

(AH)←(AH)+调整产生的借位值

这条指令之前必须执行SUB或SBB指令,减法指令必须把两个非压缩的BCD码相减,并把结果存放在AL寄存器中。

四、实验内容

4位BCD码相加

实验程序

STACK  SEGMENT  STACK

       DB  100 DUP(?)

STACK  ENDS

DATA   SEGMENT

       X1  DB  4 DUP(?)

       X2  DB  4 DUP(?)

       X3  DB  5 DUP(?)

DATA   ENDS

CODE   SEGMENT

       ASSUME  CS:CODE,DS:DATA,SS:STACK

MAIN   PROC

       MOV  AX,DATA

       MOV  DS,AX

       MOV  BX,OFFSET X1

       MOV  CX,4

 NEXT1:CALL INPUT

       AND  AL,0FH

       MOV  [BX],AL

       INC  BX

       LOOP NEXT1

       MOV  AH,2

       MOV  DL,'+'

       INT  21H

       MOV  BX,OFFSET X2

       MOV  CX,4

 NEXT2:CALL INPUT

       AND  AL,0FH

       MOV  [BX],AL

       INC  BX

       LOOP NEXT2

       MOV  AH,2

       MOV  DL,'='

       INT  21H

       MOV  SI,OFFSET X1+3

       MOV  DI,OFFSET X2+3

       MOV  BX,OFFSET X3+4

       MOV  CX,4

       OR   CX,CX

 NEXT3:MOV  AL,[SI]

       ADC  AL,[DI]

       AAA

       MOV  [BX],AL

       DEC  SI

       DEC  DI

       DEC  BX

       LOOP NEXT3

       MOV  AL,0

       ADC  AL,AL

       MOV  [BX],AL

       MOV  CX,5

 NEXT4:MOV  DL,[BX]

       ADD  DL,30H

       MOV  AH,2

       INT  21H

       INC  BX

       LOOP NEXT4

       MOV  AH,4CH

       INT  21H

MAIN   ENDP

INPUT  PROC

 AGAIN:MOV  AH,8

       INT  21H

       CMP  AL,'0'

       JB   AGAIN

       CMP  AL,'9'

       JA   AGAIN

       MOV  AH,2

       MOV  DL,AL

       INT  21H

       RET

INPUT  ENDP

CODE   ENDS

       END  MAIN

上机调试及运行结果

1235和5689是从键盘中输入的4位非压缩的BCD码,06294为调整后的相加结果。

五、实验心得

通过本次,对一些BCD码调整的原理及指令有了更深的认识,加深了计算机运算规则的理解。

BCD码本质上是十进制数,应遵循逢十进一的规则。而计算机是按二进制数进行计算的,所以BCD码都会被计算机当做二进制数来运算,其记过也是二进制数,与期望的十进制数的结果不同,所以需要进行调整,才能得到期望的结果。


实验三 键盘输入与回显

一、实验目的

1、熟悉DOS功能的9号功能,从键盘输入并在显示器上显示字符串

2、熟悉DOS功能调用指令INT 21H

二、实验设备

计算机

三、实验原理

1、单字符输入

功能号1、7和8都可以接收键盘输入的单字符串,输入字符以ASCII码形式存放在累加器AL中。其中7号和8号功能无回显。

2、字符串输入

输入字符串可以通过调用DOS功能的0AH号功能实现。

3、单字符显示

在显示器上显示的内容都是字符形式,如果是数字,则一定是其对应的ASCII码。要将一个字符串送到显示器显示,可调用DOS功能的2、6、9号功能实现。其中2、6用于显示单个字符,功能9显示一个字符串。

4、字符串显示

要在显示器上显示字符串,可调用DOS功能的9号功能,该功能要求被显示的字符串必须以“$”字符作为结束符,否则会引起屏幕混乱。

5、返回DOS

用4CH号功能返回DOS的程序段:

MOV AH,4CH

INT 21H

四、实验内容

(1)单字符串输入与回显

从键盘读入一串字符,在字符串尾插入一个“$”,并显示该字符。

实验程序:

DATA SEGMENT

JICUN DB ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA

      MOV DS,AX

      MOV AH,1

      INT 21H

      MOV JICUN,AL

      MOV AH,4CH

      INT 21H

CODE  ENDS

END   START

上机调试及运行结果

上图中,h是从键盘输入的字符。

(2)字符串显示

实验程序

DATA SEGMENT

BUFSIZE   DB   50

ACTLEN    DB   ?

CHARS     DB   50  DUP(20H)

DATA      ENDS

CODE SEGMENT

     ASSUME  CS:CODE,DS:DATA

START:MOV AX,DATA

      MOV DS,AX

      MOV DX,OFFSET BUFSIZE

      MOV AH,0AH

      INT 21H

      XOR CX,CX

      MOV CL,ACTLEN

      MOV DX,OFFSET CHARS

      MOV BX,DX

      ADD BX,CX

      MOV BYTE PTR[BX],'$'

      MOV AH,09H

      INT 21H

      MOV AH,4CH

      INT 21H

CODE ENDS

      END START

上机调试及运行结果

上图中,“nanchangdaxue”是从键盘输入的字符串。

五、实验心得

通过本次实验,熟悉了DOS功能调用的用于键盘输入的1、7、8号功能,巩固了我对理论知识的认识,增强了汇编语言的编程语感。

本实验中还用到了4CH功能号返回DOS。


实验四 字符串匹配

一、实验目的

通过逐个比较两字符串,判断字符串是否匹配。

二、实验设备

计算机

三、实验原理

将两个字符串想比较。若出项不相同的字符,则将“NO MATCH!”在屏幕上显示出来。

四、实验内容

实验程序:

DATA    SEGMENT

STR1     DB 0DH,0AH,'**This is find-keyword from a sentence program.**',0DH,0AH,'$'

STR2     DB 'Enter keyword:','$'

STR3     DB 0DH,0AH,'Enter sentence:','$'

INF1     DB 0DH,0AH,'Match!',0DH,0AH,'Match at location $'

INF2     DB ' of the sentence.',0DH,0AH,'$'

ERR      DB 0DH,0AH,'No match!',0DH,0AH,'$'

DAT1    DB 20H,?,20H DUP(?)

DAT2    DB 80H,?,80H DUP(?)

COUNT       DB ?

DATA    ENDS

CODE   SEGMENT

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

DISP     MACRO      DAT

              LEA             DX,DAT

              MOV     AH,9

              INT       21H

ENDM 

START: MOV     AX,DATA

              MOV     DS,AX

              MOV     ES,AX

              DISP     STR1

AGAIN:       DISP     STR2

              LEA             DX,DAT1

              MOV     AH,0AH             ;输入关键字

              INT       21H

              LEA             SI,DAT1

              INC              SI

              MOV     AL,0

              CMP      AL,[SI]

              JZ          DONE

              MOV     AL,[SI]

              MOV     COUNT,AL

              INC              SI                 ;指向关键字开始单元

SENT:   LEA             SI,DAT1

              INC              SI

              INC              SI

              DISP     STR3

              LEA             DX,DAT2

              MOV     AH,0AH             ;输入被查句子

              INT       21H

              LEA             DI,DAT2

              INC              DI

              MOV     AL,0

              CMP      AL,[DI]

              JZ          DONE

              MOV     AL,[DI]

              CMP      AL,[SI-1]

              JB          ERRO          ;比较关键字和句子长短

              INC              DI                 ;指向句子的开始单元

              MOV     BX,DI

              CLD

COMP:  MOV     CL,COUNT

COMP1:       CMPSB

              JNZ              COMP2

              DEC      CL

              JNZ              COMP1

              JMP              FIND1

COMP2:       INC       BX

              MOV     DI,BX

              LEA             SI,DAT1

              INC              SI

              INC              SI

              DEC      AL

              JNZ              COMP

ERRO:  LEA             DX,ERR

              MOV     AH,9

              INT       21H

              JMP              AGAIN

FIND1: CALL   FIND

              JMP              SENT

DONE:  MOV     AH,4CH

              INT       21H

FIND    PROC

              DISP     INF1

              MOV     DX,0

              LEA             DX,DAT2

              INC              DX

              INC              DX

              SUB             BX,DX

              MOV     DX,BX

              INC              DX

              PUSH    DX

              MOV    CL,4

              SHR             DL,CL

              CMP      DL,9

              JBE       NEXT1

              ADD     DL,7

NEXT1: ADD     DL,30H

              MOV     AH,2

              INT       21H              ;显示高位ASCII码

              POP              DX

              AND     DL,0FH

              CMP      DL,9

              JBE       NEXT2

              ADD     DL,7

NEXT2: ADD     DL,30H

              MOV     AH,2

              INT       21H              ;显示低位ASCII码

              DISP     INF2

              RET

CODE   ENDS

              END      START

上机调试及运行结果

五、实验心得

本实验中在进行字符串比较时从字符串长度和个对应的字符两方面来比较。先判断字符串的长度,长度不相同,则字符串不匹配;若长度相同,再逐个比较相对应的字符,只有两字符串完全相等时,才输出字符串信息,否则显示“NO MATCH!”

在程序中,由于涉及到不同的情况,所以运用了程序条件专一指令等程序控制指令。


实验五 用递归计算阶乘

一、实验目的

了解子程序的设计及递归算法。

二、实验设备

    计算机

三、实验原理

堆栈保护及递归算法,用递归算法计算3!

四、实验内容

实验程序:

DATA SEGMENT

N DW 3

RESULT DW ?

DATA ENDS

STACKSEG SEGMENT

DW 128 DUP(0)

TOS LABEL WORD

STACKSEG ENDS

CODE SEGMENT

MAIN PROC FAR

ASSUME CS:CODE,DS:DATA,SS:STACKSEG

START:MOV AX,STACKSEG

      MOV SS,AX

      MOV SP,OFFSET TOS

      PUSH DS

      SUB AX,AX

      PUSH AX

      MOV AX,DATA

      MOV DS,AX

      MOV BX,N

      PUSH BX

      CALL FACT

      POP RESULT

      RET

MAIN ENDP

FACT PROC NEAR

     PUSH AX

     PUSH BP

     MOV AX,[BP+6]

     CMP AX,0

     JNZ FACT1

     INC AX

     JMP EXIT

FACT1:DEC AX

      PUSH AX

      CALL FACT

      POP AX

      MOV DX,[BP+6]

      MUL DX

EXIT:MOV [BP+6],AX

     POP BP

     POP AX

     RET

FACT ENDP

CODE ENDS

END START

上机调试及实验结果

程序中要计算的是3!,在数据段查看的结果如上图;

查看堆栈段:

五、实验心得

通过这次实验,巩固了我对子程序的应用以及堆栈原理的认识。

本实验是一个子程序设计实验,运用递归来计算阶乘。实验程序中涉及到堆栈保护等知识点。数据的进栈出栈,以及数据存放的位置等都要在程序中考虑。


实验六 中断服务子程序设计

一、实验目的

1、熟悉中断的相关知识;

2、熟悉中断向量的功能调用;

3、掌握中断处理程序的设计方法。

二、实验设备

计算机

三、实验内容

;1CH:定时器控制的软中断,时钟中断每发生一次(约1/12.8秒),就要调用

;一次中断类型1CH的处理程序。

DSEG SEGMENT

COUNT DW 1

MESS DB ‘THE BELL IS RINGING!’, 0DH,0AH,’$’

DSEG ENDS

CSEG SEGMENT

MAIN PROC FAR

   ASSUME CS: CSEG, DS: DSEG

START:

   PUSH DS

   SUB AX, AX

   PUSH AX

   MOV AX, DSEG

   MOV DS, AX

  

   MOV AL, 1CH

   MOV AH, 35H

   INT 21H

   PUSH ES

   PUSH BX

   PUSH DS

   MOV DX, OFFSET RING

   MOV AX, SEG RING

   MOV DS, AX

   MOV AX, 251CH

   INT 21H

   POP DS

   IN AL, 21H

   AND AL, 11111110B

   OUT 21H, AL        ; 开放定时器中断

   STI

   MOV DI, 2000

DELAY1: 

MOV SI, 3000

DELAY2: 

   DEC SI

   JNZ DELAY2

   DEC DI

   JNZ DELAY1

   POP DX

   POP DS

   MOV AL, 1CH

   MOV AH, 25H

   INT 21H

   RET

MAIN ENDP

RING PROC FAR

   PUSH DS

   PUSH AX

   PUSH CX

   PUSH DX

   MOV AX, DSEG

   MOV DS, AX

STI

   DEC COUNT

   JNZ EXIT

   MOV DX, OFFSET MESS

   MOV AH, 09H

   INT 21H

   MOV DL, 07H   ;响铃符

   MOV AH, 02H

   INT 21H

   MOV COUNT, 182

EXIT:

   CLI

   POP DX

   POP CX

   POP AX

   POP DS

   IRET

RING ENDP

CSEG ENDS

   END START

上机调试及运行结果

程序运行后在屏幕上显示“THE BELL IS RINGING!”

五、实验心得

本实验时中断服务程序,执行的是响铃操作,每隔10S进行一次中断,执行一次操作。直接用G命令就可查看结果。

通过这次实验,对计算机的中断指令以及其原理有了更深的认识,这说明通过实践来熟练操作是学以致用最好的方法。实验中遇到不少问题,最终通过调试解决了,这使自己的调试水平得到了提高。

更多相关推荐:
微机原理与接口技术实验报告

目录实验一数据传送2实验二算术运算8实验三代码转换15实验四程序的基本结构练习21实验五存储器RAM6264扩展错误未定义书签实验六可编程并行接口8255扩展错误未定义书签实验七可编程计数定时器8253扩展错误...

微机原理与接口技术实验报告

实验一认识Tddebug集成操作软件一实验内容一实验题目数据传送实验1编程将数据段中的一个字符串传送到附加段中并输出附加段中的目标字符串到屏幕上2修改此程序采用字符串传送指令完成二实验目的通过对该程序进行调试查...

微机原理与接口技术实验报告

实验一熟悉汇编语言程序开发过程一实验目的1熟悉与实验有关的系统软件如编辑程序汇编程序连接程序和调试器等的使用2在程序调试过程中学习及掌握调试器CodeView的各种操作命令掌握程序的调试方法及技巧二实验内容用查...

微机原理与接口技术实验报告

微机原理与接口技术实验报告姓名专业班级学号指导教师计算机科学与技术安徽工业大学计算机学院20xx年5月21日微机原理与接口技术实验报告实验一存贮器读写实验一实验目的l熟悉静态RAM的使用方法掌握8088微机系统...

微机原理与接口技术 实验报告

微机原理与接口技术实验报告学院计算机与通信工程学院专业计算机科学与技术班级学号姓名实验一8259中断控制器应用实验一实验目的1掌握PC机中断处理系统的基本原理2掌握可编程中断控制器8259的应用编程方法二实验内...

微机原理与接口技术实验报告

南京信息工程大学微机原理与接口技术综合实验实验报告书微机原理与接口技术课程设计报告题目继电器控制实验设计学院电子与信息工程学院专业通信工程年级10级学生姓名xx学号xxxxxxxx指导教师xx完成时间20xx1...

微机原理与接口技术实验报告 接口部分 大学实验报告免费下载

实验一系统认识实验1实验内容编写实验程序将00H0FH共16个数写入内存3000H开始的连续16个存储单元中2实验源程序SSTACKSEGMENTSTACKDW32DUPSSTACKENDSCODESEGMEN...

微机原理与接口技术实验报告 全实例代码

实验一上机练习实验目的1掌握用编辑软件编辑程序文本的方法在DOS环境下熟练掌握用MASM50宏汇编程序对ASM文件进行编译连接等操作步骤2熟悉用DEBUG调试程序实验要求选取教科书中一典型例题用编辑软件在PC机...

微机原理与接口技术实验报告

微机原理与接口技术实验报告学生姓名学生学号学生班级实验一认识Tddebug集成操作软件一实验内容一实验题目数据传送实验1编程将数据段中的一个字符串传送到附加段中并输出附加段中的目标字符串到屏幕上2修改此程序采用...

微机原理及接口技术实验指导书20xx本(SH51-Keil版)

微机原理及接口技术实验指导书北京联合大学机电学院20xx年4月微机原理及接口技术实验指导书目录实验指南GCMCU单片机实验箱简介Keil集成开发环境使用简介实验一数据传送及输入输出接口实验实验二常用数据处理程序...

微机原理与接口技术实验报告

微机原理与接口技术实验报告学院班级姓名学号西安交通大学实验报告课程微机原理与接口技术实验日期年月日专业班号交报告日期年月日姓名学号实验三并行接口电路8255A一实验目的1掌握8255的工作方式及初始化编程2掌握...

微机原理课程设计报告

沈阳工程学院课程设计课程设计题目简单电子钟设计系别信息工程系班级学生姓名学号指导教师职称起止日期20xx年11月20日起至20xx年11月25日止沈阳工程学院课程设计任务书课程设计题目简单电子钟设计系别信息工程...

微机原理与接口技术实验报告(32篇)