汇编语言实验报告

时间:2024.4.20

实验报告

一、实验目的

《汇编语言程序设计》是计算机专业的重要的专业基础课,通过本综合性、设计性实验使学生进一步巩固课堂所学,全面熟悉、掌握8088宏汇编语言程序设计的基本方法和技巧,进一步提高编写程序、阅读分析程序及上机操作、调试程序的能力。

二、实验要求

编写一个程序,让红心和严在(0,0)到(140,140)的斜线上移动。

时钟的常驻内存程序,要求:右上角显示时分秒。

三、实验原理分析

1、INT 10H 是一个中断向量,是由 BIOS 对屏幕及显示器所提供的服务程序。

2、先在数据段定义好“心”的图形,代码段选定坐标,调用显示子程序显示在桌面上。

3、将时间数值转换成ASCII码字符

4、设置显示方式为40*25彩色文本方式

5、MOV AH,2CH    取系统时间

四、流程图

五、源程序(加必要注释)和程序运行时的截屏

STACK SEGMENT STACK

      DW 200 DUP (?)

STACK ENDS

DATA SEGMENT

      SPACE DB 1000 DUP (' ')

      PATTERN DB 24 DUP (' '),0C9H,8 DUP (0CDH),0BBH,6 DUP (' ')

              DB 24 DUP (' '),0BAH,8 DUP (20H),0BAH,6 DUP (' ')

              DB 24 DUP (' '),0C8H,8 DUP (0CDH),0BCH,6 DUP (' ')

      DBUFFER DB 8 DUP (':'),12 DUP (' ')

      DBUFFER1 DB 20 DUP (' ')

      STR  DB 0DH,0AH, 'INPUT "Q" TO QUIT!$'

      DELAY1  DW        0           ;延迟时间设置

      DELAY2  DW        0

      COLOUR  DB        0           ;颜色设置

       S_MOV  DB        0           ;擦出或画图方式选择                              

        LINE  DW        0           ;行号                               

         ROW  DW        0           ;列号                              

         PIX  DB        0           ;颜色                              

          XX  DW        0           ;坐标(xx,yy)    

          YY  DW        0           ;                           

       Y_NUM  DW        0           ;行数             

       L_NUM  DW        0           ;行数            

       R_NUM  DW        0           ;列数

           P1 DB    0,0,00H ,00H ,00H ,00H  ,0FH ,00H ,0F0H ,01H  ,0FH ,00H ,0F0H ,03H   ,0FH ,00H ,0F0H ,07H   ;图形“严” 

              DB        0FH ,30H ,0F0H,0EH  ,0FH ,38H ,0F0H ,1CH  ,0FH ,1CH ,0FFH ,0F8H  ,0FH ,0EH ,0FFH ,0F0H  

              DB        0FH ,0FFH,0FFH,0E0H ,0FH ,0FFH,0F0H ,00H  ,0FH ,0FFH,0F0H ,00H   ,0FH ,00H ,0F0H ,000H   

              DB        0FH ,00H ,0F0H,00H  ,0FH ,00H ,0F0H ,00H  ,0FH ,00H ,0F0H ,00H   ,0FH ,00H ,0F0H ,00H   

              DB        0FH ,00H ,0F0H,00H  ,0FH ,00H ,0F0H ,00H  ,0FH ,0FFH,0F0H ,00H   ,0FH ,0FFH,0F0H ,00H 

              DB        0FH ,0FFH,0F0H,00H  ,0FH ,0EH ,0F0H ,00H  ,0FH ,1CH ,0F0H ,00H   ,0FH ,38H ,0F0H ,00H 

              DB        0FH ,30H ,0F0H,00H  ,0FH ,00H ,0F0H ,00H  ,0FH ,00H ,0F0H ,0H    ,0FH ,00H ,0F0H ,00H   

              DB        00H ,00H ,00H ,00H  ,00H ,00H ,00H  ,00H  ,00H ,00H ,00H  ,00H   ,00H ,00H ,00H  ,00H 

           P2 DB    0,0,00H , 00H , 00H , 00H ,00H , 0FH , 00H , 00H ,00H ,03FH ,0C0H , 00H ,00H ,0FFH ,0F0H ,00H  ;图形“心” 

              DB        01H ,0FFH ,0F8H , 00H ,03H ,0FFH ,0FCH , 00H ,07H ,0FFH ,0FEH , 00H ,0FH ,0FFH ,0FFH ,00H  

              DB        0FH ,0FFH ,0FFH , 80H ,0FH ,0FFH ,0FFH ,0C0H ,07H ,0FFH ,0FFH ,0E0H ,03H ,0FFH ,0FFH ,0F0H   

              DB        01H ,0FFH ,0FFH ,0F8H ,00H ,0FFH ,0FFH ,0FCH ,00H , 7FH ,0FFH ,0FEH ,00H , 3FH ,0FFH ,0FFH  

              DB        00H , 1FH ,0FFH ,0FFH ,00H , 3FH ,0FFH ,0FFH ,00H , 7FH ,0FFH ,0FEH ,00H ,0FFH ,0FFH ,0FCH   

              DB        01H ,0FFH ,0FFH ,0F8H ,03H ,0FFH ,0FFH ,0F0H ,07H ,0FFH ,0FFH ,0E0H ,0FH ,0FFH ,0FFH ,0C0H 

              DB        0FH ,0FFH ,0FFH , 80H ,0FH ,0FFH ,0FFH , 00H ,07H ,0FFH ,0FEH , 00H ,03H ,0FFH ,0FCH ,00H     

              DB        01H ,0FFH ,0F8H , 00H ,00H ,0FFH ,0F0H , 00H ,00H ,03FH ,0C0H , 00H ,00H , 0FH , 00H ,00H                

DATA ENDS

CODE SEGMENT

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

START: MOV AX,0001H          ;设置显示方式为40*25彩色文本方式           

       INT 10H

       MOV AX,DATA

       MOV DS,AX

       MOV ES,AX

       MOV BP,OFFSET SPACE      

       MOV DX,0300H

       MOV CX,1000

       MOV BX,0030H

       MOV AX,1300H

       INT 10H

       MOV BP,OFFSET PATTERN ;显示矩形条    

       MOV DX,0300H

       MOV CX,120

       MOV BX,002EH

       MOV AX,1301H

       INT 10H

       LEA DX,STR            ;显示提示信息

       MOV AH,9

       INT 21H      

       CALL TIME             ;显示系统时间            

EXIT: 

       MOV AH,1              ;从键盘输入单个字符

       INT 21H

       CMP AL,51H            ;AL='Q'?            

       JNE EXIT

       CALL INIT_WORD

       CALL W_END

       MOV AH,4CH            ;返回dos状态

       INT 21H

TIME   PROC NEAR        ;显示时间子程序

DISPLAY1:MOV SI,0

       MOV BX,100

       DIV BL

       MOV AH,2CH       ;取时间

       INT 21H

       MOV AL,CH

       CALL BCDASC      ;将时间数值转换成ASCII码字符

       INC SI

       MOV AL,CL

       CALL BCDASC

       INC SI

       MOV AL,DH

       CALL BCDASC

       MOV BP,OFFSET DBUFFER

       MOV DX,0419H

       MOV CX,8

       MOV BX,004EH

       MOV AX,1301H

       INT 10H

       MOV AH,02H

       MOV DX,0300H

       MOV BH,0

       INT 10H

       MOV BX,0018H

RE:    MOV CX,0FFFFH

REA:   LOOP REA

       DEC BX

       JNZ RE

       MOV AH,01H

       INT 16H

       JE  DISPLAY1

       JMP EXIT

       MOV AX,4C00H

       INT 21H

       RET

TIME  ENDP

BCDASC PROC NEAR                ;时间数值转换成ASCII码字符子程序

       PUSH BX

       CBW

       MOV BL,10

       DIV BL

       ADD AL,'0'

       MOV DBUFFER[SI],AL

       INC SI

       ADD AH,'0'

       MOV DBUFFER[SI],AH

       INC SI

       POP BX

       RET

BCDASC ENDP

INIT_WORD  PROC      NEAR ;初始化屏幕

              MOV       AH,0

              MOV       AL,5H

              INT       10H

              MOV       AH,0BH

              MOV       BH,01H

              MOV       BL,0

              INT       10H

              RET

   INIT_WORD  ENDP

                

W_END  PROC      NEAR   ;让“心”和“严”分别从两侧向中间靠拢          

              MOV       R_NUM,4

              MOV       L_NUM,4

              MOV       COLOUR,2;颜色为红

              MOV       AX,0

             

         K1:  MOV       XX,0   

              MOV       YY,0

              ADD       XX,AX

              ADD       YY,AX

              MOV       DI,OFFSET P2

              MOV       S_MOV,1

              CALL      DISP

             

              MOV       XX,310

              MOV       YY,0

              SUB       XX,AX

              ADD       YY,AX

              MOV       DI,OFFSET P1

              MOV       S_MOV,1

              CALL      DISP

              MOV       DELAY1,100

              MOV       DELAY2,100

              CALL      DELAY

                            

              INC       AX

              CMP       AX,140

              JZ        K2       

              JMP       K1

     

         K2:  RET

       W_END  ENDP   

      

DISP  PROC      NEAR 

              PUSH      AX

              PUSH      BX

              PUSH      CX

              PUSH      DX

              PUSH      SI

              MOV       SI,R_NUM

              mov cl,3

              SAL       SI,cl

             

              MOV       ROW,0

              MOV       Y_NUM,0

     

         GO:  MOV       Y_NUM,0

         L1:  MOV       LINE,0

              ADD       DI,1

              MOV       BX,[DI]

         L2:  SAL       BX,1       

              JNC       L3          ;CF=0,跳转

            

              CMP       S_MOV,0    

              JZ        L3

              MOV       AL,COLOUR

              MOV       PIX,AL

              JMP       L4

         L3:  MOV       PIX,0      

            

         L4:  MOV       DX,YY

              ADD       DX,LINE

              MOV       CX,Y_NUM

              CMP       Y_NUM,0

              JZ        L6

         L5:  ADD       DX,8

              LOOP      L5

   

         L6:  MOV       CX,XX

              ADD       CX,ROW

              MOV       AH,0CH

              MOV       AL,PIX

              INT       10H

                     

              INC       LINE

              CMP       LINE,8

              JNZ       L2

              INC       Y_NUM

              MOV       AX,L_NUM

              CMP       Y_NUM,AX

              JNZ       L1

              INC       ROW

              CMP       ROW,SI

              JNZ       GO

              POP       SI

              POP       DX

              POP       CX

              POP       BX

              POP       AX

              RET

        DISP  ENDP

       

       DELAY  PROC      NEAR

              PUSH      CX

              PUSH      DX

              MOV       DX,DELAY1

        D11:  MOV       CX,DELAY2

        D12:  LOOP      D12

              DEC       DX

              JNZ       D11

              POP       DX

              POP       CX

              RET

       DELAY  ENDP

CODE   ENDS

       END START               

这是时间显示器,输入大写字母“Q”退出后是动画。

因为“心”和“严”图形是全屏的,无法截屏,大概运行情况如下(win7不能全屏)

六、体会

通过这次汇编语言的综合性课程设计,我觉得自己真的学到了不少的东西,加深了自己以前没掌握的知识,还学到不少的新知识。通过课程设计的编程和对编程过程中遇到的问题的思考,确实有效地提高了我对编程的认识和理解,也一定程度上提高了我的编程能力,弥补了的不足之处。同时,我通过这次课程设计,巩固了学过的知识,学会了将它们切实地用到编程当中。能用汇编语言和相应的顺序、选择、循环三大结构来结合想问题,进一步掌握的各个指令的功能,特别是转向指令,掌握了子程序的定义及调用,以及如何调用系统时间,如何让图形动起来。在整个课程设计中,最开始我选择动画,可是显示全屏后都不能截图,又另外做了时间显示,顺便把动画当做结束。

虽然完成了这次综合性实验,但一个小实验就花了很长时间,自己对汇编语言的掌握还需要进一步提高。

更多相关推荐:
汇编语言实验报告

实验一汇编语言的源程序的输入一实验目的1通过实验了解和熟悉微机系统的配置2学习在DEBUG状态下输入汇编源程序的方法3初步掌握调试在DEBUG状态下的过程二实验原理1本实验在DEBUG状态下输入汇编源程序并且用...

汇编语言程序设计实验报告

学生实验报告册20xx20xx学年第1学期实验名称汇编语言程序设计学院信息与电气工程学院班级09级计算机科学与技术2班学号13514031姓名于志佳指导教师徐静实验一DEBUG的使用实验目的1熟悉在计算机上建立...

汇编语言实验报告

汇编语言实验报告姓名专业软件工程班级093班学号099074235STARTMOVAXDATASMOVDSAXmovbxoffsetblockmovcx256againmovbxbyteptr0字节填充0inc...

汇编语言实验报告

HarbinInstituteofTechnologyatWeihai汇编语言实验报告实验一第一部分dubug用法一问题描述上机前预习debug常用命令的用法复习汇编语言基本指令上机时进行debug命令练习二问...

汇编语言实验报告5份整合版

福建农林大学金山学院课程名称姓名系专业年级学号指导教师职称程序设计类课程实验报告汇编语言庄建军信息与机电工程电子信息工程专业20xx级092230069刘永芬助教20xx20xx学年第二学期实验项目列表福建农林...

汇编语言实验报告一

实验1实验学时2实验地点二综实验日期20xx1020一实验目的掌握汇编编程规范熟悉编程环境二实验内容1编程向内存0200023F依次传送数据0633FH2编程编写code段代码用push指令将a段中的word数...

汇编语言实验报告qxf

汇编语言程序设计实验报告学号班级指导老师姓名实验时间学院目录实验一认识Tddebug集成环境实验日志3实验二IO程序设计实验日志4实验三代码转换程序设计实验日志7实验四分支程序设计实验报告11附录源代码14实验...

汇编语言实验报告

汇编语言语言实验报告学院计算机学院班级网111班学号姓名黄飞指导教师实验1汇编语言运行环境及方法简单程序设计源代码PROGRAMTITLEGOESHEREComparestringdatareasegmentd...

合工大汇编语言实验报告

合肥工业大学计算机与信息学院实验报告课程汇编语言程序设计专业班级学号姓名实验一Debug程序的使用一实验目的1熟悉DEBUG程序中的命令学会在DEBUG下调试运行汇编语言源程序2掌握80868088的寻址方式及...

汇编语言实验报告

汇编语言实验报告廖成D0120xx015康峻豪D0120xx011一实验题目第5题二实验目的用汇编语言实现从键盘上输出两个数可以输入负数先判断是否为有符号数再计算计算他们乘积并以十六进制数的形式输出三实验思路从...

汇编语言实验报告

汇编语言实验报告学院计算机学院姓名王强学号129074061班级计122指导老师纪平实验一汇编运行环境及方法简单程序设计1程序说明本程序用来比较两个字符串string1和string2所含的字符是否相同若相同则...

汇编语言实验报告

华北科技学院综合性实验报告课程名称汇编语言实验学期20XX至20XX学年第2学期学生所在院部计算机学院计算机工程系年级二年级专业班级计科B12-学生姓名学号任课教师实验成绩计算机学院制《汇编语言》课程综合性实验…

汇编语言实验报告(30篇)