汇编语言语法练习与代码转换

 汇编语言语法练习与代码转换

一、实验目的和要求

1. 掌握汇编语言源程序的格式;

2. 进一步学习汇编语言源程序的编辑、汇编、目标文件的链接和可执行文件的执行全过程;

3. 掌握编辑软件、TASM/MASM、TLINK和TD的使用方法、掌握汇编语言的语法规则。

4. 实验内容:

(1)练习并掌握命令行下汇编语言开发全过程,在屏幕打印各自学号,要求在命令行下进行TASM环境进行汇编程序开发的各步骤,汇编源程序的文件名命名为各自学号后四位。

(2)排除语法错误:给出的是一个通过比较法完成8位二进制数转换成十进制数送屏幕显示功能的汇编语言源程序,但有很多语法错误。要求实验者按照原样对源程序进行编辑,汇编后,根据TASM给出的信息对源程序进行修改,知道没有语法错误为止。然后进行链接,并执行相应可执行文件。正确的执行结果在屏幕上显示:25+9=34。

(3)从BUF单元开始存有一字符串(长度<255),编程实现统计该字符串中的ASCII在42H~45H之间的字符个数,并将统计结果以二进制形式显示在屏幕。

二、实验环境

Windows XP/Win 7 32 + TASM/TNPP/轻松汇编/未来汇编软件

三、实验过程描述与结果分析

1)汇编语言开发步骤

汇编语言源程序编写好以后,必须经过下列几个步骤才能在机器上运行:

  1. 在TNPP中输入代码,并存储在D:\CCC
  2. 在DOSBox中运行mount命令将源文件所在的分区挂载到DOSBox下。mount d d:\
  3. 然后使用“d:\”命令进入D盘,使用“cd CCC”进入当前汇编程序和源文件所在的目录下。
  4. 当然我们还可以用dir命令,查看可运行的文件,也方便检验前几步是否正确。
  5. 之后可以使用TASM汇编程序TASM.EXE(TASM.EXE 0815.ASM)和链接程序TLINK.EXE(TLINK.EXE 0815.OBJ)分别对源文件和目标文件进行编译,生成可运行的文件。
  6. 最后我们输入0815.EXE,得到运行结果。

程序段为:

.586

        DATA  SEGMENT      USE16

        MESG  DB     '20610815', '$'

        DATA  ENDS

        CODE  SEGMENT       USE16

              ASSUME     CS: CODE, DS: DATA

        BEG:  MOV    AX, DATA

              MOV     DS, AX

              MOV     AH, 9

              MOV     DX, OFFSET MESG

              INT 21H

              MOV     AH, 4CH

              INT 21H

        CODE  ENDS

              END      BEG

运行结果为:

2)排除语法错误

要求通过比较法完成8位二进制数转换成十进制数送屏幕显示功能的汇编语言源程序。但有很多语法错误,要求按照原样对源程序进行编辑,汇编后,根据TASM给出的错误信息对源程序进行修改,直到没有语法错误为止,然后进行链接,并执行相应的可执行文件。正确的执行结果是在屏幕上显示:25+9=34。

修改后代码:(分号后为修改)

        .486

        DATA  SEGMENT       USE16

        SUM  DB ?, ?,                   ; SUM  DB ?, ?

        MESG  DB     '25+9='

              DB  0, 0                ; DB      0, 0, '$'

          N1  DB 9, F0H              ; N1  DB     9

          N2  DW       25                    ; N2  DB     25

        DATA  ENDS 

        CODE  SEGMENT       USE16

              ASSUME     CS: CODE, DS: DATA

              BEG:

              MOV     AX, DATA

              MOV     DS, AX

              MOV     BX, OFFSET SUM

              MOV     AH, N1

              MOV     AL, N2

              ADD      AH, AL

              MOV     [BX], AH

              CALL    CHANG

              MOV     AH, 9

              MOV     DX, OFFSEG MEST    ; MOV   DX, OFFSET MESG

              INT 21H

              MOV     AH, 4CH

              INT 21H

       CHANG:  PROC                      ; CHANG  PROC

              LAST:

              CMP      [BX], 10             ; CMP BYTE PTR [BX], 10

              JC   NEXT             

              SUB [BX], 10     ; SUB      BYTE PTR [BX], 10

              INC [BX+7]      ; INC       BYTE PTR [BX+7]

JMP  LAST

              NEXT:

                                          ;MOV    AH, SUM

              ADD    [BX+8] ,SUM        ; ADD  [BX+8], AH

              ADD      [BX+7], 30H          ; ADD BYTE PTR [BX+7], 30H

              ADD      [BX+8], 30H          ; ADD BYTE PTR [BX+8], 30H

              RET

       CHANG:  ENDP                      ; CHANG  ENDP

        CODE  ENDS

              END      BEG

运行结果:

3)统计42H45H之间的字符个数

        .486

        DATA  SEGMENT       USE16

         BUF  DB       'ABCDE'

       COUNT  EQU  $-BUF

        DATA  ENDS 

        CODE  SEGMENT       USE16

              ASSUME     CS: CODE, DS: DATA

        BEG:  MOV    AX, DATA

              MOV     DS, AX

              MOV     BL, 0

              MOV     SI, 0

              MOV     CX, COUNT

              CALL    CMP

              CALL    DISP

              MOV     AH, 4CH

              INT 21H

         CMP  PROC

       AGA1:  CMP    BUF[SI], 42H

              JB   NEXT1

              CMP      BUF[SI], 45H

              JA   NEXT1

              INC BL

      NEXT1:  INC     SI

              LOOP    AGA1

              RET

         CMP  ENDP

        DISP  PROC  

              MOV     CL, 8

       LAST:  MOV    DL, '0'

              RCL      BL, 1

              JNC       NEXT2

              MOV     DL, '1'

      NEXT2:  MOV   AH, 2

              INT 21H

              LOOP    LAST

              RET

        DISP  ENDP  

        CODE  ENDS

              END      BEG

运行结果:

四、实验小结

通过此次实验,也发现了自己的问题,就比如说之前学的基本知识不扎实,在做第三题的时候对于ASCII的常用码值还不够熟练,并不能很敏锐的、准确的想到对应的码值,这也说明了之前的学的知识在悄悄遗忘,还是需要时常翻翻书,温故一下的。当然对于一些程序代码,也并非使用的很熟练,反而是经常翻书,这恰恰反映了,仅凭上课时间,是不能够牢记这些字符的含义的,也体现了课后巩固的重要作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值