汇编实验报告.docx

上传人:b****5 文档编号:26424696 上传时间:2023-06-19 格式:DOCX 页数:35 大小:556.12KB
下载 相关 举报
汇编实验报告.docx_第1页
第1页 / 共35页
汇编实验报告.docx_第2页
第2页 / 共35页
汇编实验报告.docx_第3页
第3页 / 共35页
汇编实验报告.docx_第4页
第4页 / 共35页
汇编实验报告.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

汇编实验报告.docx

《汇编实验报告.docx》由会员分享,可在线阅读,更多相关《汇编实验报告.docx(35页珍藏版)》请在冰豆网上搜索。

汇编实验报告.docx

汇编实验报告

汇编实验报告

实验一

(1)熟悉汇编语言程序调试环境及顺序程序设计

一、实验目的及要求:

1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。

2.学会使用EDIT、MASM、LINK、DEBUG等软件工具。

3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。

二、熟悉汇编语言程序调试环境

1.汇编语言源程序的建立

本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。

设定源程序的文件名为ABC。

DATASEGMENT

BUFDB23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FH

CNEQU$-BUF

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

PUSHDS

XORAX,AX

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVBX,OFFSETBUF

MOVCX,CN

DECCX

MOVAL,[BX]

INCBX

LP:

CMPAL,[BX]

JBENEXT

MOVAL,[BX]

NEXT:

INCBX

DECCX

JNZLP

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

键入以下命令:

C:

\>EDITABC.ASM

此时屏幕的显示状态如图1所示。

图1用EDIT编辑ABC.ASM程序窗口

程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。

2.将源程序文件汇编成目标程序文件

一般情况下,MASM汇编程序的主要功能有以下3点:

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

(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。

(3)若程序中使用了宏指令,则汇编程序将展开宏指令。

源程序建立以后,在DOS状态下,采用宏汇编程序MASM对源程序文件进行汇编,其操作过程如图2所示。

图2MASM宏汇编程序工作窗口

汇编过程的错误分警告错误(WarningErrors)和严重错误(SevereErrors)两种。

其中警告错误是指汇编程序认为的一般性错误;严重错误是指汇编程序认为无法进行正确汇编的错误,并给出错误的个数、错误的性质。

这时,就要对错误进行分析,找出原因和问题,然后再调用屏幕编辑程序加以修改,修改以后再重新汇编,一直到汇编无错误为止。

3.用连接程序生成可执行程序文件

经汇编以后产生的目标程序文件(.OBJ文件)并不是可执行程序文件,必须经过连接以后,才能成为可执行文件(即扩展名为.EXE)。

连接过程如图3所示。

图3LINK连接程序工作窗口

上述提示行回答以后,连接程序开始连接,如果连接过程中出现错误,则显示出错误信息,根据提示的错误原因,要重新调入编辑程序加以修改,然后重新汇编,再经过连接,直到没有错误为止。

连接以后,便可以产生可执行程序文件(.EXE文件)。

4.程序的执行

当我们建立了正确的可执行文件以后,就可以直接在DOS状态下执行该程序。

如:

C:

\>ABC

本程序当中没有用到DOS中断调用指令,所以在屏幕上看不到程序执行的结果。

实验二

(2)分支及循环程序设计

一、实验目的及要求

熟练掌握转移指令,掌握分支程序设计的原理和方法,重点掌握各种分支程序中形成条件和判断条件的方法和技巧。

掌握循环程序设计的方法(单重循环结构和两重循环结构),正确分配与使用寄存器,根据实际问题选择控制循环的方法(循环次数已知和循环次数未知)。

二、实验内容

编写下列程序并调试通过。

1.通过键盘输入一个小写字母,找出对应的前导字母和后续字母,再按顺序显示这三个字母。

2.编写一个程序,要求比较数组ARRAY中的三个16位补码,并根据比较结果在终端上显示如下信息:

1)如果三个数都不相等,显示0;

2)如果三个数都两个相等,显示1;

3)如果三个数都相当,显示2。

3.编写一个程序,要求通过键盘接收一个个位数N,然后显示N个字母‘$’。

4.从键盘上输入一个8位二进制数,在显示器上显示其相应的十六进制数。

(教材P170习题5)

5.要求从键盘上接收一个4位十六进制数,然后再显示器上显示其对应的16位二进制数。

6.用15行*16列的表格形式显示ASCII码为10H-FFH的所有字符。

三、实验设计方案说明

实验1

流程图:

实验完整代码:

DATASSEGMENT

;此处输入数据段代码

DATASENDS

STACKSSEGMENT

;此处输入堆栈段代码

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

;告诉汇编程序哪个是代码段,哪个是数据段,哪个是堆栈段

START:

MOVAX,DATAS

MOVDS,AX;初始化数据段的段地址

MOVCL,3

L:

MOVAH,01H;输入一个小写字母,常用DOS功能调用,入口参数为AH

INT21H

CMPAL,61H;对输入进行判断,确保输入的字符为a~z

JBL

CMPAL,7AH

JAL

MOVBL,AL

MOVDL,0DH;回车

MOVAH,02H;常用DOS功能调用,入口参数为AH

INT21H

MOVDL,0AH;换行

MOVAH,02H

INT21H

SUBBL,01H;按顺序输出三个字母

CMPBL,61H;判断前导字母是否合法

JNBL1

ADDBL,1AH

MOVDL,BL

MOVAH,02H

INT21H

SUBBL,19H

JMPL2

L1:

MOVDL,BL;输出录入字母的前导字母

MOVAH,02H

INT21H

INCBL

L2:

MOVDL,BL;输出录入字母本身

MOVAH,02H

INT21H

INCBL

CMPBL,7AH;判断后续字母是否合法

JNAL3

SUBBL,1AH

L3:

MOVDL,BL;输出录入字母的后续字母

MOVAH,02H;常用DOS功能调用,入口参数为AH

INT21H

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

 

实验2

实验流程图:

实验完整代码:

DATA SEGMENT 

 ARRAYDW 1,2,3 ;为数组中的三个元素各分配一个字的存储空间并初始化

 DATAENDS 

 CODE SEGMENT 

 ASSUME CS:

CODE, DS:

DATA ;告诉汇编程序哪个是代码段,哪个是数据段,哪个是堆栈段

 START:

  MOV AX,DATA 

MOV DS,AX ;初始化数据段的段地址

MOV AX,ARRAY 

MOV BX,ARRAY+2 

MOV CX,ARRAY+4 

 CMPAX,BX ;

 JEL 

 CMP BX,CX 

JEL1 

 CMP AX,CX 

 JE L1 

 MOVDL,30H 

 JMP EXIT 

L:

 CMP BX,CX 

 JNE L1 

 MOV DL,32H 

 JMP EXIT 

 L1:

 MOV DL,31H 

 EXIT:

 MOV AH,02 H

INT 21H 

 MOVAH,4CH 

 INT 21H 

 CODE ENDS 

 END START 

实验3

流程图:

实验完整代码:

DATASSEGMENT

;此处输入数据段代码

DATASENDS

STACKSSEGMENT

;此处输入堆栈段代码

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS;告诉汇编程序哪个是代码段,哪个是数据段,哪个是堆栈段

START:

MOVAX,DATAS

MOVDS,AX;初始化数据段的段地址

L:

MOVAH,01H;输入一位数字

INT21H

CMPAL,30H;对输入进行判断

JBL

CMPAL,39H

JAL

MOVCL,AL

MOVDL,0DH;回车

MOVAH,02H

INT21H

MOVDL,0AH;换行

MOVAH,02H

INT21H

SUBCL,30H

JZL2

L1:

MOVDL,24H;输出相应个数的$

MOVAH,02H

INT21H

SUBCL,01H

JNZL1

L2:

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

实验4

流程图:

实验完整代码:

DATASSEGMENT

;此处输入数据段代码

DATASENDS

STACKSSEGMENT

;此处输入堆栈段代码

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVBL,0

MOVCL,8

L:

SHLBL,1;输入8位二进制数,并保存在BL中

MOVAH,01H

INT21H

CMPAL,30H

JZL1

ORBL,1

L1:

DECCL

JNZL

MOVDL,0DH;回车

MOVAH,02H

INT21H

MOVDL,0AH;换行

MOVAH,02H

INT21H

MOVDH,0

MOVCX,0204H

L2:

SHLBL,1;输出2位十六进制数

JCL3

SHLDH,1

JMPL4

L3:

SHLDH,1

ADDDH,1

L4:

DECCL

JNZL2

ADDDH,30H

CMPDH,39H

JBEL5

ADDDH,07H

L5:

MOVDL,DH

MOVAH,02H

INT21H

MOVDH,0

MOVCL,4

DECCH

JNZL2

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

实验5

实验完整代码:

DATASSEGMENT

;此处输入数据段代码

DATASENDS

STACKSSEGMENT

;此处输入堆栈段代码

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVBX,0

MOVCX,0404H

L1:

MOVAH,01H;输入4位十六进制数

INT21H

SUBAL,30H

CMPAL,0AH

JBL2

SUBAL,07H

L2:

SHLBX,CL

ORBL,AL

DECCH

JNZL1

MOVDL,0DH;回车

MOVAH,02H

INT21H

MOVDL,0AH;换行

MOVAH,02H

INT21H

MOVCX,16

L3:

SHLBX,1;输出16位二进制数

JCL4

MOVDL,30H

MOVAH,02H

INT21H

DECCX

JNZL3

JMPEXIT

L4:

MOVDL,31H

MOVAH,02H

INT21H

DECCX

JNZL3

EXIT:

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

实验6

实验完整代码:

DATAS SEGMENT

  ;此处输入数据段代码  

DATAS ENDS

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

    ASSUME CS:

CODES,DS:

DATAS,SS:

STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    MOV DL,10H

    MOV CX,0FH

L1:

 MOV BX,10H

L2:

 MOV AH,02H

    INT 21H

    INC DL

    PUSH DX

    MOV DL,' '

    MOV AH,02H

    INT 21H

    POP DX

    DEC BX

    CMP BX,00H

    JNZ L2

    PUSH DX

    MOV DL,0DH

    MOV AH,02H

    INT 21H

    MOV DL,0AH

    MOV AH,02H

    INT 21H

    POP DX

    DEC CX

    CMP CX,00H

    JNZ L1     

    MOV AH,4CH

    INT 21H

CODES ENDS

    END START

四、测试及评估

实验1运行结果

实验2运行结果

实验3运行结果

实验4运行结果

实验5运行结果

实验6运行结果

五、设计心得

这次试验过程中出现的问题很多,最开始是对过程的不熟悉以及第一次使用这个asm软件导致编译运行老是出错,最后是代码上的错误。

所以通过这次试验不仅让我懂得对汇编操作的基本过程熟悉了,更多的是对整个编写代码的流程熟悉了。

中间总是出现错误时感觉不知道该怎么办了,但是觉得这种代码也并不是很难,应该可以实现,所以通过请教同学、翻阅资料、经过不断地改动之后最终让正确的实验结果出现。

所以这次试验还让我对做实验增加了耐心,因而这次收获很多。

实验二子程序设计

一、实验目的及要求

理解CALL和RET指令,以及子程序的调用与返回过程;掌握子程序的结构,及相关的设计方法;能合理地分解程序功能,有效地支持功能的重用。

二、实验内容

编写下列程序并调试通过。

从键盘输入一系列字符(以回车符结束),并按字母、数字及其他字符分类计数,最后显示这三类字符的计数结果(采用子程序BINIDEC)

(子程序BINIDEC输入:

16位二进制数

输出:

十进制数,

功能:

将16位二进制数转换成十进制数)

三、实验设计方案说明

实验完整代码:

DATAS SEGMENT 

     ALPHA DB 'The total of alpha is:

','$' 

     NUMBER DB 'The total of number is:

','$' 

     OTHER DB 'The total of other is:

','$' 

     BUF DB 7 DUP(0),'$' 

     CRLF DB 0DH,0AH,'$' 

DATAS ENDS 

CODES SEGMENT 

MAIN PROC FAR 

    ASSUME CS:

CODES,DS:

DATAS 

START:

 

   PUSH DS 

   SUB AX,AX 

   PUSH AX 

   MOV AX,DATAS

   MOV DS,AX 

   MOV BX,0

   MOV SI,0

   MOV DI,0

INPUT:

 

   MOV AH,01H

   INT 21H

   CMP AL,0DH

   JE DISP

   CMP AL,30H

   JAE L1

OTHERS:

   INC DI 

   JMP SHORT INPUT 

L1:

 

   CMP AL,39H 

   JA L2 

   INC SI 

   JMP SHORT INPUT 

L2:

 

   CMP AL,41H 

   JAE L3 

   JMP SHORT OTHERS 

L3:

 

   CMP AL,5AH 

   JA L4 

   INC BX 

   JMP SHORT INPUT 

L4:

 

   CMP AL,61H 

   JAE L5 

   JMP SHORT OTHERS 

L5:

 

   CMP AL,7AH 

   JA SHORT OTHERS 

   INC BX 

   JMP SHORT INPUT 

DISP:

 

   LEA DX,CRLF 

   MOV AH,09H

   INT 21H

   LEA DX,ALPHA

   CALL DISPLAY

   LEA DX,NUMBER

   MOV BX,SI

   CALL DISPLAY

   LEA DX,OTHER

   MOV BX,DI

   CALL DISPLAY

   RET

MAIN ENDP

DISPLAY PROC NEAR

   MOV AH,09H

   INT 21H 

   CALL BINIDEC

   LEA DX,CRLF

   MOV AH,09H

   INT 21H

   RET

DISPLAY ENDP

BINIDEC PROC NEAR

   PUSH AX

   PUSH SI

   PUSH DX

   MOV AX,BX

   MOV CX,10

   LEA SI,BUF+6

EXCHANGE:

   MOV DX,0

   DIV CX

   ADD DL,30H

   MOV [SI],DL

   DEC SI

   OR AX,AX

   JNZ EXCHANGE

   LEA DX,BUF

   MOV AH,09H

   INT 21H

   POP DX

   POP SI

   POP AX

   RET

BINIDEC ENDP

CODES ENDS

END MAIN

四、测试及评估

五、设计心得

通过本次实验,我对子程序结构的设计方法有了一定的认识,子程序相当于高级语言中的过程和函数。

在一个程序的不同部分,往往要用到类似的程序段,这些程序段的功能和结构形式都相同,只是某些变量的赋值不同,此时就可以把这些程序段写成子程序的形式,一边需要时可以调用它。

实验三

(1)熟悉接口技术实验环境

一、学习和熟悉实验平台相关资料:

附件1TD-PITE用户手册。

二、完成下列实验内容

对实验平台提供的时钟脉冲信号(1MHZ)进行分频,分频后产生的脉冲信号(1HZ)输出到一个发光二极管上(发光二极管的点亮、熄灭交替进行)。

1)画出硬件线路图。

在TD-PITE实验平台上,计数器0的GATE0已连接+5V,计数器2用于支持串行通讯(用户不能使用)。

IOY0*地址范围:

0600H–063FH

*实验平台上每个I/O端口地址均为偶数。

2)写出初始化程序。

CODESEGMENT

ASSUMECS:

CODE

START:

MOVDX,0606H

MOVAL,36H;计数器0工作方式控制字

OUTDX,AL

MOVDX,0600H

MOVAX,1000;计数器0计数初值

OUTDX,AL

MOVAL,AH

OUTDX,AL

MOVDX,0606H

MOVAL,76H;计数器1工作方式控制字

OUTDX,AL

MOVDX,0602H

MOVAX,1000;计数器1计数初值

OUTDX,AL

MOVAL,AH

OUTDX,AL

AA:

JMPAA

CODEENDS

ENDSTART

2)在实验平台上连线,调试,演示。

实验三

(2)定时计数器的应用

一、实验基本内容及要求

1.在上述实验方案中,采用8254计数器0控制声音频率,采用软件延时的方法控制声音的节拍(声音长度)。

2.修改上述实验方案,采用8254计数器1控制声音节拍。

画出实验方案的硬件连接图,并设计相关的控制程序;在实验平台上调试通过。

二、实验设计方案说明

 

流程图:

实验参考例程(SOUND.ASM)

IOY0      EQU 06C0H

MY8254_COUNT0 EQU IOY0+00H        ;8254计数器0端口地址

MY8254_COUNT1 EQU IOY0+02H        ;8254计数器1端口地址

MY8254_COUNT2 EQU IOY0+04H        ;8254计数器2端口地址

MY8254_MODE   EQU IOY0+06H        ;8254控制寄存器端口地址

STACK1   SEGMENT STACK

    DW 256 DUP(?

STACK1   ENDS

DATA     SEGMENT

FREQ_LIST     DW  371,495,495,495,624,556,495,556,624    ;频率表

              DW  495,495,624,742,833,833,833,742,624

                 DW  624,495,556,495,556,624,495,416,416,371

              DW  495,833,742,624,624,495,556,495,556,833

              DW  742,624,624,742,833,990,742,624,624,495

              DW  556,495,556,624,495,416,416,371,495,0

TIME_LIST     DB    4,   6,  2,   4,  4,  6,   2,  4,  4    ;时间表

              DB    6,   2,  4,   4, 12,  1,  3,   6,  2

              DB    4,   4,  6,   2,  4,  4,  6,   2,  4,  4

              DB   12,   4,  6,   2,  4,  4,  6,   2,  4,  4

              DB    6,   2,  4,   4, 12,  4,  6,   2,  4,  4

            

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

当前位置:首页 > PPT模板 > 动物植物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1