首页 > 编程语言 >汇编语言语法练习与代码转换

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

时间:2024-08-12 10:52:10浏览次数:14  
标签:汇编语言 BX 练习 DB MOV 语法 AH DATA 源程序

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

一、实验目的和要求

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的常用码值还不够熟练,并不能很敏锐的、准确的想到对应的码值,这也说明了之前的学的知识在悄悄遗忘,还是需要时常翻翻书,温故一下的。当然对于一些程序代码,也并非使用的很熟练,反而是经常翻书,这恰恰反映了,仅凭上课时间,是不能够牢记这些字符的含义的,也体现了课后巩固的重要作用。

标签:汇编语言,BX,练习,DB,MOV,语法,AH,DATA,源程序
From: https://blog.csdn.net/qq_55543315/article/details/141125654

相关文章

  • while循环的3个练习
    staticvoidMain(string[]arg){//while的3个练习Console.WriteLine("请输入班级人数:");intintNum=0;while(!(int.TryParse(Console.ReadLine(),outintNum))){C......
  • DP练习题(二)
    [NOIP2008普及组]传球游戏上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。游戏规则是这样的:......
  • switch和try-catch综合练习
    //输入任意年份,月份,判断该月份天数;staticvoidMain(string[]args){intintDay=0;intintYear=0;intintMonth=0;//任意输入年份和月份,判断该月有几天;try......
  • PythonL-Chapter_01_基础语法
    注释#这是单行注释"""这是多行注释可以写多行文字"""变量和数据类型内置基本数据类型整数(int):用于表示没有小数部分的数字,例如-1,0,1,100等浮点数(float):用于表示带有小数部分的数字,例如3.14,2.718字符串(str):用于表示文本信息,必须使用引号(单引......
  • switch_case练习
     staticvoidMain(string[]args){doubleintSalary=5000;boolbFlag=true;Console.WriteLine("请输入张三的评点等级:");stringstrLevel=Console.ReadLine();switch(strLevel......
  • 炒鸡好用的Markdown语法
    简介Markdown是一种轻量级标记语言,它最初由JohnGruber和AaronSwartz在2004年共同创建,可以通过简单、纯文本的语法,快速构建格式化、排版精美的文档。其可与HTML混编,可导出为HTML、PDF、Word等格式的文件Markdown可以让作者更多地关注内容本身而非格式排版。同样的内容,在Markdow......
  • Wfurent 语语法概述
    \[\textit{Litar!}\newcommand{\wd}[2]{\texttt{#1}^{#2}}\]让神明白  文字产生于史前的祭祀,史前的人们改造了原式的语言规则,使得句子拥有“唯一语义性”(至少保证语法树可被唯一生成),以清晰(而不那么像人话)地传递对神的祈求。后来人们逐渐适应了改造语言,产生了系统的Wfurent......
  • 汇编语言第二章寄存器(笔记、习题及拓展知识)(王爽汇编语言第四版)
    一、寄存器基础知识​一个典型的CPU(此处讨论的不是某一具体的CPU)由运算器、控制器、寄存器(CPU工作原理)等器件构成,这些器件靠内部总线相连。前一章所说的总线,相对于CPU内部来说是外部总线。内部总线实现CPU内部各个器件之间的联系,外部总线实现CPU和主板上其他器件的联......
  • 用户名和密码输入练习
    staticvoidMain(string[]args){stringstrUsrName="";stringstrPwd="";Console.WriteLine("pleaseinputyourUsrName:");strUsrName=Console.ReadLine();......
  • JavaL1-07_综合练习
    练习一:需求:    机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。    按照如下规则计算机票的价格:旺季(5~10月)头等舱9折,经济舱8.5折,淡季(11月~来年4月)头等舱7折,经济舱6.5折。代码示例:packagecom.itheima.test;importj......