初学汇编语言的几个练习题

编写程序,从键盘输入一个字符并回显到视频显示器上。

、实验目的

1.    学习汇编语言源程序的编辑、汇编、连接、运行全过程。

2.    了解汇编程序、连接程序、DOS系统装入和返回功能。掌握MASM、LINK的应用。

3.    掌握汇编语言程序结构,熟悉汇编语言的一些常用语法规则,初步掌握汇编语言的开发过程。

4.    掌握DOS系统功能调用的基本方法。

二、  实验原理

通过调用(INT 21H)表中的01h号功能号从键盘输入一个字符并回显到视频显示器上

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

实验内容:编写程序,从键盘输入一个字符并回显到视频显示器上。

流程(流程框图)

源程序清单:

实验1.asm

实验1.obj

实验1.exe

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 AH,1

    INT 21H

    MOV AH,4CH

    INT 21H

    MOV AH,4CH

    INT 21H

CODES ENDS

    END START

四、 结果与分析:用文字、表格、图形等将数据表示出来。

键盘输入y

屏幕输出y

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

实验2

实验名称:编写程序,显示一个字符Y。

、实验目的

1、   学习汇编语言源程序的编辑、汇编、连接、运行全过程。

2、   了解汇编程序、连接程序、DOS系统装入和返回功能。掌握MASM、LINK的应用。

3、   掌握汇编语言程序结构,熟悉汇编语言的一些常用语法规则,初步掌握汇编语言的开发过程。

4、   掌握DOS系统功能调用的基本方法。

二、  实验原理

通过调用(INT 21H)表中的02h号功能显示输出一个字符Y。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 编写程序,显示输出一个字符Y。

流程(流程框图)

源程序清单:

实验2.asm

实验2.obj

实验2.exe

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 AH,02H

    MOV DL,'Y'

    INT 21H

    MOV AH,4CH

    INT 21H

    MOV AH,4CH

    INT 21H

CODES ENDS

    END START

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

屏幕显示Y

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

 

 

实验3

实验名称: 编写程序,在屏幕上显示输出“I love DOTA”。

一、  实验目的

1、   学习汇编语言源程序的编辑、汇编、连接、运行全过程。

2、   了解汇编程序、连接程序、DOS系统装入和返回功能。掌握MASM、LINK的应用。

3、   掌握汇编语言程序结构,熟悉汇编语言的一些常用语法规则,初步掌握汇编语言的开发过程。

4、   掌握DOS系统功能调用的基本方法。

二、  实验原理

考察通过调用(INT 21H)表中的0ah号功能显示输出字符串

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 编写程序,在屏幕上显示输出‘I love DOTA。

流程(流程框图)

源程序清单:

实验3.asm

实验3.obj

实验3.exe

DATAS SEGMENT

    ;此处输入数据段代码

    STRING DB 'I LOVE DOTA$'  

DATAS ENDS

 

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

 

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    MOV DX,SEG STRING

    MOV DS,DX

    LEA DX,STRING

    MOV AH,09

    INT 21H

    MOV AH,4CH

    INT 21H

CODES ENDS

    END START

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

屏幕输出I LOVE DOTA

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

六、 实验扩展 (XH2)

 

 

 

实验4

实验名称:编写一个程序,要求从键盘输入一个小写字母,以其大写字母形式显示,否则显示ERROR。

一、  实验目的

综合转移指令与字符串显示操作。

二、  实验原理

对输入的字符进行比较,若为小写字母的字符,则通过02h号功能显示该字符的大写形式,否则通过JMP跳转指令输出字符串。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 编写一个汇编语言程序,要求从键盘输入一个小写字母,以其大写字母形式显示,否则显示error。

流程(流程框图)

源程序清单:

实验4.asm

实验4.obj

实验4.exe

DATAS SEGMENT

    ;此处输入数据段代码

    STRING DB 'ERROR$'

DATAS ENDS

 

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

 

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    MOV AH,08

    INT 21H

    CMP AL,61H

    JL ERROR

    CMP AL,7AH

    JG ERROR

    SUB AL,20H

    MOV DL,AL

    MOV AH,2

    INT 21H

    MOV AH,4CH

    INT 21H

ERROR:

      MOV DX,SEG STRING

      MOV DS,DX

      LEA DX,STRING

      MOV AH,09

      INT 21H

CODES ENDS

    END START

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

键盘输入a,屏幕显示A

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

六、 实验扩展 (XH2)

 

 

 

七、  结论

实验5

实验名称:编写程序在屏幕上显示10个“T”。

一、  实验目的

通过LOOP循环语句控制输出,熟悉LOOP语句的用法。

二、  实验原理

通过LOOP循环语句置CX寄存器的值为10,并在循环体内调用02H功能,进行字符输出。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 编写程序,在屏幕上输出10个“T”。

流程(流程框图)

源程序清单:

实验5.asm

实验5.obj

实验5.exe

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 CX,10

AGAIN:

    MOV AH,02

    MOV DL,'T'

    INT 21H

    DEC CX

    JNZ AGAIN

    MOV AH,4CH

    INT 21H

CODES ENDS

    END START

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

在屏幕上输出10个“T”。

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

实验6

实验名称:从键盘输入一个字符,如果是a则显示10个*, 如果是b,则显示10个$;否则退出程序。

一、  实验目的

主要考察JMP转移指令以及条件转移指令。

二、  实验原理

对输入的字符进行比较,如果满足相应的条件则根据条件转移指令转移到不同的地方输出不同的字符。

三、实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 从键盘上输入一个字符,如果是a则显示是个“*”,如果是b,则显示十个“$”;否则退出程序。

流程(流程框图)

源程序清单:

实验6.asm

实验6.obj

实验6.exe

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 CX,10

    MOV AH,07H

    INT 21H

    CMP AL,61H

    JZ A

    CMP AL,62H

    JZ B

    MOV AH,4CH

    INT 21H

A:

M1:

  MOV AH,02H

  MOV DL,'*'

  INT 21H

  SUB CX,1

  JNZ M1

  MOV AH,4CH

  INT 21H 

 

B:

M2:

  MOV AH,02H

  MOV DL,'$'

  INT 21H

  SUB CX,1

  JNZ M2

  MOV AH,4CH

  INT 21H 

  CODES ENDS

  END START

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

从键盘上输入a,显示是个“*”;

从键盘上输入b,则显示十个“$”

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

实验7

实验名称 :从键盘输入一个字符串,要求将其转换为大写字符串显示。

一、  实验目的

考察DOS系统调用里的0AH号功能进行字符串输入操作。

二、  实验原理

通过调用DOS系统调用里的0AH号功能进行字符串输入操作,将其中的每个字符的ASCII码减去32即可得到所对应大写字母的ASCII码,并对其输出。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 从键盘输一个字符串,要求将其转换为大写字符串显示。

流程(流程框图)

源程序清单:

实验7.asm

实验7.obj

实验7.exe

DATAS SEGMENT

    ;此处输入数据段代码 

    BUFFER DB 20 DUP(?)

DATAS ENDS

 

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

 

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    LEA BX,BUFFER

NEXT: MOV AH,07

       INT 21H

       CMP AL,0DH

       JZ EXIT

       SUB AL,20H

       MOV [BX],AL

       INC BX

       MOV DL,AL

       MOV AH,02

       INT 21H

       JMP NEXT

EXIT:  MOV AH,4CH

       INT 21H

 

CODES ENDS

    END START

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

输入abcde,屏幕显示ABCDE

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

实验8

实验名称:编写程序从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。

一、  实验目的

通过条件转移指令产生不同的分支。

二、  实验原理

通过对输入的字符进行比较,若为小写字母字符,则先将该字符的ASCII码减去1输出,然后依次加上1后在输出,一共输出3个字符即可。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 编写程序,从键盘接受一个小写字母,然后找出他的前导字符和后续字符,再按顺序显示这三个字符。

流程(流程框图)

源程序清单:

实验8.asm

实验8.obj

实验8.exe

DATAS SEGMENT

    ;此处输入数据段代码

    STRING1 DB 'PLEASE INPUT ONE CHARACTER$'

    STRING2 DB 'WRONG INPUT$' 

DATAS ENDS

 

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

 

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

      MOV AX,DATAS

      MOV DS,AX

      ;此处输入代码段代码

      MOV BX,SEG STRING1

      MOV DS,BX

      LEA DX,STRING1

      MOV AH,09H

      INT 21H

      MOV AH,07H

      INT 21H

      CMP AL,61H

      JB ERROR

      CMP AL,7AH

      JA ERROR

      SUB AL,1H

      MOV DL,AL

      MOV AH,02H

      INT 21H

      ADD AL,1H

      MOV DL,AL

      MOV AH,02H

      INT 21H

      ADD AL,1H

      MOV DL,AL

      MOV AH,02H

      INT 21H

      JMP EXIT

ERROR:

      MOV BX,SEG STRING2

      MOV DS,BX

      LEA DX,STRING2

      MOV AH,09H

      INT 21H

EXIT: MOV AH,4CH

      INT 21H

CODES ENDS

    END START

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

键盘输入b

屏幕输出abc

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

实验9

实验名称:编写程序将string区中的所有数字字符删除掉。

一、  实验目的

1.    掌握汇编语言程序的开发方法和过程;

2.    掌握汇编语言程序设计中数据分类统计的基本方法。

二、  实验原理

  在输出string区中的数据时屏蔽数字字符,只将非数字字符输出。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 编写程序,将数据段string区中的数字字符删除掉。

流程(流程框图)

源程序清单:

实验9.asm

实验9.obj

实验9.exe

DATAS SEGMENT

    ;此处输入数据段代码 

    MAXLEN DB 11

    RETLEN DB 0

    STR1 DB 11 DUP(0)

    STR2 DB 11 DUP(0)

DATAS ENDS

 

STACKS SEGMENT

    ;此处输入堆栈段代码

    STACK DW 40 DUP(0)

STACKS ENDS

 

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    MOV ES,AX

    LEA DX,MAXLEN

    MOV AH,0AH

    INT 21H

    LEA SI,STR1

    LEA DI,STR2

    CLD

    LOP:

    LODSB

    CMP AL,0DH

    JZ NEXT

    STOSB

    CMP AL,'0'

    JC LOP

    CMP AL,'9'

    JA LOP

    DEC DI

    JMP LOP

NEXT:

    MOV BYTE PTR[DI],'$'

    CALL NEWLINE

    MOV AH,02H

    MOV DL,0DH

    INT 21H

    MOV AH,02H

    MOV DL,0AH

    INT 21H

    LEA DX,STR2

    MOV AH,09H

    INT 21H

    MOV AH,4CH

    INT 21H

    NEWLINE PROC

    PUSH AX

    PUSH DX

    MOV DL,0DH

    MOV AH,02H

    INT 21H

    POP DX

    POP AX

    RET

    NEWLINE ENDP

CODES ENDS

    END START

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

键盘输入AB123CD

屏幕输出ABCD

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

实验10

实验名称:口令校对。

一、  实验目的

1.    进一步熟悉汇编语言程序的开发方法和过程;

2.    掌握汇编语言程序设计中字符串搜索的基本方法。

二、  实验原理

通过REPE CMPSB指令将输入的密码与设定的密码进行比较,相同则进入,否则退出再次输入。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 口令校对:程序执行后给出操作提示,例如“Please input

the password:”等待用户输入密码与内定的字符串进行比较。

当连续输入3次错误时退出。

流程(流程框图)

源程序清单:

实验10.asm

实验10.obj

实验10.exe

DATAS SEGMENT

    ;此处输入数据段代码 

    PASS DB "123"

    BUF DB 4;最多接收的字节数

    DB 0;实际输入的字节数

    DB 4 DUP(?);接收的字符,末尾放回车

    MSGWEL DB  0DH,0AH,"PLEASE INPUT THE PASSWORD:$"

    MSGOK DB 0DH,0AH,"WELCOME TO USE! COPYRIGHT$"

    MSGFAILE DB 0DH,0AH,"PASSWORD ERRIR$"

DATAS ENDS

 

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

 

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    MOV BX,3

    HERE:

    CMP BX,1

    JS DONE

    LEA SI,PASS

    MOV DX,OFFSET MSGWEL

    MOV AH,9

    INT 21H

    LEA DX,BUF

    MOV AH,0AH

    INT 21H

    MOV CX,03H;循环次数

    LEA DI,BUF+2;DI指向接收的串首地址

AGAIN:

      MOV AL,[SI]

    CMP AL,BYTE PTR[DI]

    JNE FAILE

    INC SI;下一密码

    INC DI;下一数据

    LOOP AGAIN

    MOV DX,OFFSET MSGOK

    MOV AH,9

    INT 21H

    JMP DONE

FAILE:

      MOV DX,OFFSET MSGFAILE

      MOV AH,09H

      INT 21H

      DEC BX

      JMP HERE

DONE:

    MOV AH,4CH

    INT 21H

CODES ENDS

    END START

 

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

内置密码是123

键盘输入123后

键盘输入111三次后

 

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

实验11

实验名称:从键盘上输入一串字符再将其输出。

一、  实验目的

字符串的输入以及字符的搜索输出。

二、  实验原理

开辟一段缓冲区,通过调用0AH号功能将字符串输入到缓冲区,接着对字符进行单个搜索输出。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 从键盘上输入一串字符再将其输出。

流程(流程框图)

源程序清单:

实验11.asm

实验11.obj

实验11.exe

DATAS SEGMENT

    ;此处输入数据段代码

    BUFFER DB 20 DUP(?)

DATAS ENDS

 

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

 

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    LEA BX,BUFFER

 NEXT: MOV AH,07

       INT 21H

       CMP AL,0DH

       JZ EXIT

       MOV [BX],AL

       INC BX

       MOV DL,AL

       MOV AH,02

       INT 21H

       JMP NEXT

EXIT:  MOV AH,4CH

       INT 21H

CODES ENDS

    END START

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

键盘输入abc

屏幕输出如下

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

实验12

 

实验名称:编写程序显示蓝屏。

一、  实验目的

掌握BIOS系统功能调用方法。

二、  实验原理

通过调用(INT 10H)功能表里的)06H号功能,用蓝屏进行清屏。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 编写程序显示蓝屏。

流程(流程框图)

源程序清单:

实验12.asm

实验12.obj

实验12.exe

DATAS SEGMENT

    ;此处输入数据段代码 

DATAS ENDS

 

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

 

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    PUSH AX

      PUSH BX

      PUSH CX

      PUSH DX

      MOV AH,6

      MOV AL,0

      MOV BH,10H

      MOV CH,0

      MOV CL,0

      MOV DH,24

      MOV DL,79

      INT 10H

      MOV DX,0

      MOV AH,2

      INT 10H

      POP DX

      POP CX

      POP BX

      POP AX

    MOV AH,4CH

    INT 21H

    MOV AH,4CH

    INT 21H

CODES ENDS

    END START

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

如图

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

实验13

实验名称:编写程序调用BIOS功能,是程序运行后屏幕清屏为黑色,按任意键后显示5个“I LOVE YOU”并闪烁,按ESC健退出。

一、  实验目的

掌握BIOS系统功能调用方法。

二、  实验原理

通过调用(INT 10H)功能表里的06H号功能,实现彩色字符串的输出。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 编写程序调用bios功能,使程序运行后屏幕清屏为黑色,

按任意键(自己设定)后显示五个“I LOVE YOU”并闪烁,

按ESC键退出程序。

流程(流程框图)

源程序清单:

实验13.asm

实验13.obj

实验13.exe

DATAS SEGMENT

    ;此处输入数据段代码 

    STRING DB 'I LOVE YOU$'

DATAS ENDS

 

STACKS SEGMENT

    ;此处输入堆栈段代码

    DW 100 DUP (?)

STACKS ENDS

 

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    MOV CX,5

    ;

      PUSH AX

      PUSH BX

      PUSH CX

      PUSH DX

      MOV AH,6

      MOV AL,0h

      MOV BH,84H

      MOV CH,0

      MOV CL,0

      MOV DH,24

      MOV DL,79

      INT 10H

      MOV DX,0

      MOV AH,2

      INT 10H

      POP DX

      POP CX

      POP BX

      POP AX

      MOV AH,07H

      INT 21H

      CMP AL,0DH;按回车键显示字符串

      JZ AGAIN

      MOV AH,4CH

      INT 21H

;

AGAIN:

    MOV DX,SEG STRING

    MOV DS,DX

    LEA DX,STRING

    MOV AH,09

    INT 21H

    ;回车换行

    MOV DL,0DH

    MOV AH,2

    INT 21H

    MOV DL,0AH

    MOV AH,2

    INT 21H

    ;

    DEC CX

    JNZ AGAIN

    MOV AH,07H

    CMP AL,27H

    JZ ESCA

    MOV AH,4CH

    INT 21H

ESCA:

    MOV AH,4CH

    INT 21H

CODES ENDS

    END START

 

 

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

如图:键盘输入回车键,即可显示五个“I LOVE YOU”并闪烁。

 

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

实验14

实验名称:编写程序,实现数据段BUFF开始字节单元中的10个数字、1、2、3、4、5、6、7、8、9转换成相应的ASCII码送入以ASC开始的内存单元。

一、  实验目的

实现两个不同的缓冲区之间的字符的传送。

二、  实验原理

通过字符串的搜索将BUFF中的字符依次传入ASC的内存单元中。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 编写程序,实现将数据段BUFF开始字节单元中的10个数字

0,1,2,3,4,5,6,7,8,9转换成相应的ASCLL码送入以ASC开始的内存单元。

流程(流程框图)

源程序清单:

实验14.asm

实验14.obj

实验14.exe

DATAS SEGMENT

    ;此处输入数据段代码

    BUF DB  1,2,3,4,5,6,7,8,9,0,0DH,0AH

    ASC DB  10 DUP(?),0DH,0AH,'$'

DATAS ENDS

 

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

 

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    MOV BX,0

    MOV CX,10

    LP:

    MOV AL,BUF[BX]

    ADD AL,30

    MOV ASC[BX],AL

    INC BX

    LOOP LP

    MOV AH,4CH

    INT 21H

CODES ENDS

    END START

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

操作在后台执行,屏幕 无显示

 

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

实验15

实验名称:应用文本方式图形处理,在屏幕上显示4行,每行10个相同字符,这4个字符依次是Y、A、N、G,各行颜色不同。

一、  实验目的

掌握BIOS系统功能调用方法。

二、  实验原理

通过调用(INT 10H)功能表里的0AH号功能,实现彩色字符串的输出。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 应用文本方式图形处理,在屏幕上显示4行,每行10个相同的字符,

这4个字符依次是Y、A、N、G,各行颜色不同。

流程(流程框图)

源程序清单:

实验15.asm

实验15.obj

实验15.exe

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 AH,9

    MOV BH,0   

    MOV AL,'Y'

    MOV BL,2H

    MOV CX,10

    INT 10H

    MOV AH,02

    MOV DL,0DH

    INT 21H

    MOV AH,02

    MOV DL,0AH

    INT 21H

    MOV AH,9

    MOV BH,0   

    MOV AL,'A'

    MOV BL,4H

    MOV CX,10

    INT 10H

    MOV AH,02

    MOV DL,0DH

    INT 21H

    MOV AH,02

    MOV DL,0AH

    INT 21H

    MOV AH,9

    MOV BH,0   

    MOV AL,'N'

    MOV BL,6H

    MOV CX,10

    INT 10H

    MOV AH,02

    MOV DL,0DH

    INT 21H

    MOV AH,02

    MOV DL,0AH

    INT 21H

    MOV AH,9

    MOV BH,0   

    MOV AL,'G'

    MOV BL,1H

    MOV CX,10

    INT 10H

    MOV AH,4CH

    INT 21H

CODES ENDS

    END START

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

如图

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

实验16

实验名称:编制程序,显示5行HELLO语句

一、  实验目的

考察用LOOP语句输出字符串

二、  实验原理

对计数器CX置5,用循环语句输出字符串。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 编制程序,显示5行HELLO语句。

流程(流程框图)

源程序清单:

实验16.asm

实验16.obj

实验16.exe

DATAS SEGMENT

    ;此处输入数据段代码 

    STRING DB 'HELLO$'

DATAS ENDS

 

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

 

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    MOV CX,5

AGAIN:

    MOV DX,SEG STRING

    MOV DS,DX

    LEA DX,STRING

    MOV AH,09

    INT 21H

    ;回车换行

    MOV DL,0DH

    MOV AH,2

    INT 21H

    MOV DL,0AH

    MOV AH,2

    INT 21H

    ;

    DEC CX

    JNZ AGAIN

    MOV AH,4CH

    INT 21H

CODES ENDS

    END START

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

如图

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

实验17

实验名称:编写程序,实现两存储区之间的数据传递。

一、  实验目的

实现两个不同的缓冲区之间的字符的传送。

二、  实验原理

通过字符串的搜索将其中一个缓冲区中的字符依次传入另一缓冲区中的内存单元中。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 编写程序,实现两存储区间之间的数据传送。

流程(流程框图)

源程序清单:

实验17.asm

实验17.obj

实验17.exe

DATAS SEGMENT

    ;此处输入数据段代码 

    AREA1 DB 100 DUP(?)

    AREA2 DB 100 DUP(?)

DATAS ENDS

 

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

 

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    LEA DX,AREA1

    MOV AREA1,LENGTH AREA1

    MOV AH,0AH

    INT 21H

    MOV SI,0

    MOV CX,0

    MOV CL,AREA1+1

    LP:

    MOV BL,AREA1[SI+2]

    MOV AREA2[SI],BL

    INC SI

    CMP CX,SI

    JNE LP

    MOV SI,0

    TRANSOUT:

    MOV DL,AREA2[SI]

    MOV AH,02H

    INT 21H

    INC SI

    CMP SI,CX

    JNE TRANSOUT

    MOV AH,4CH

    INT 21H

CODES ENDS

    END START

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

键盘输入12345,后台输到存储区

 

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

实验18

实验名称:编写程序实现数据区中数据的分类统计。

一、  实验目的

掌握汇编语言程序设计中数据分类统计的基本方法。

二、  实验原理

通过分支程序设计,对已知的地址单元中的字符进行统计,同时将二进制转换成十六进制显示在屏幕上。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: (1)分类统计内存FFF0H:0000H 开始100个字节单元中字符 0-9、

英文字母(含大、小写字母)及其他字符的个数,分别存放 nn、ln、on。

(2)用debug调试程序检查程序的运行结果。

流程(流程框图)

源程序清单:

实验18.asm

实验18.obj

实验18.exe

DATAS SEGMENT

       ;此处输入数据段代码

    NN DW 0

    LN DW 0

    ON DW 0

DATAS ENDS

CHANGE  MACRO P

      LOCAL RE,N1,N2

      PUSH AX

      PUSH BX

      PUSH CX

      PUSH DX

      MOV BX,P

      MOV CX,4

RE:

      PUSH CX

      MOV CL,4

      ROL BX,CL

      PUSH BX

      AND BX,0FH

      ADD BX,30H

      CMP BX,'9'

      JLE N2

      ADD BX,7H

      JMP N2

N1:

      ADD BX,30

N2:

      MOV DL,BL

      MOV AH,2

      INT 21H

      POP BX

      POP CX

      LOOP RE

      POP DX

      POP CX

      POP BX

      POP AX

      ENDM

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    MOV AX,0FFF0H

    MOV ES,AX

    MOV SI,0

NEXT:

      CMP SI,100

      JE EXIT

    CMP BYTE PTR ES:[SI],'0'

    JL OTHER

    CMP BYTE PTR ES:[SI],'9'

    JLE NUMBER

    CMP BYTE PTR ES:[SI],'A'

    JL OTHER

    CMP BYTE PTR ES:[SI],'Z'

    JLE CHAR

    CMP BYTE PTR ES:[SI],'A'

    JL OTHER

    CMP BYTE PTR ES:[SI],'Z'

    JLE CHAR

OTHER:

      INC ON

      INC SI

      JMP NEXT

CHAR:

      INC LN

      INC SI

      JMP NEXT

NUMBER:

      INC NN

      INC SI

      JMP NEXT

EXIT:

      CHANGE NN

      CALL CRLF

      CHANGE LN

      CALL CRLF

      CHANGE ON

    MOV AH,4CH

    INT 21H

CRLF PROC NEAR

      PUSH AX

      PUSH DX

      MOV DL,0DH

      MOV AH,2H

      INT 21H

      MOV DL,0AH

      MOV AH,2H

      INT 21H

      POP DX

      POP AX

      RET

CRLF ENDP

CODES ENDS

    END START

 

 

 

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

 运行结果如图

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

实验19

实验名称:应用图形方式图形处理,将显示器置于中分辨率图形模式,然后用四种颜色各显示一个矩形块。

一、  实验目的

掌握宏指令的调用。

二、  实验原理

通过宏指令对屏幕进行四次不同颜色的部分清屏。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 应用图形方式图形处理,将显示器置于中分辨率图形方式,然后用4种颜色

各显示一个矩形块。

流程(流程框图)

源程序清单:

实验19.asm

实验19.obj

实验19.exe

DATAS SEGMENT

    ;此处输入数据段代码 

DATAS ENDS

 

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

DRAW MACRO A1,A2,A3,A4,A5,A6

MOV AL,A1

MOV BH,A2

MOV CH,A3

MOV CL,A4

MOV DH,A5

MOV DL,A6

MOV AH,6

INT 10H

ENDM

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    DRAW 0,10H,0,0,10,20

 

    DRAW 0,20H,0,20,10,40

 

    DRAW 0,40H,10,0,20,20

 

    DRAW 0,60H,10,20,20,40

 

    MOV AH,4CH

    INT 21H

CODES ENDS

    END START

 

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

程序运行结果如图

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

实验20

实验名称: 在指定窗口输入字符。

一、  实验目的

掌握宏指令的调用。

二、  实验原理

通过宏指令调用在开辟出的窗口中,调用BIOS系统调用中的(INT 10H)中的06H号功能进行上卷。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 在指定窗口内输入字符。

1.实验要求

学习并掌握宏的使用,完成一个在指定的窗口内输入字符的宏的编码,并编写相

应的程序对宏的调用,并将结果显示出来。

(1).窗口的大小和要求如下图所示,即外框左上角坐标为7行19列,右下角坐标为

19行51列,内框左上角坐标为8行20列,右下角坐标为18行50列,

边框为品红,字符为白色。

(2).程序运行后,光标定位于18行20列处,等待输入。

当输入满30个字符,则自动上卷一行,光标仍然回到开始位置,窗口最高一行向上

卷动后消失。

流程(流程框图)

源程序清单:

实验20.asm

实验20.obj

实验20.exe

BACKGROUND MACRO A1,A2,A3,A4,A5,A6

MOV AL,A1

MOV BH,A2

MOV CH,A3

MOV CL,A4

MOV DH,A5

MOV DL,A6

MOV AH,6

INT 10H

ENDM

CURSOR MACRO B1,B2,B3

MOV BH,B1

MOV DH,B2

MOV DL,B3

MOV AH,2

INT 10H

ENDM

DATAS SEGMENT

    ;此处输入数据段代码 

DATAS ENDS

 

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

 

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    BACKGROUND 0,50H,7,19,19,51

    BACKGROUND 0,2FH,8,20,18,50

    LP:

    CURSOR 0,18,20

    MOV CX,30

    PUTIN:

    MOV AH,1

    INT 21H

    CMP AL,1BH;ESC退出

    JE ENDL

    CMP AL,0DH

    JE NEXT

    LOOP PUTIN

    NEXT:

    BACKGROUND 1,2FH,8,20,18,50

    JMP LP

    ENDL:

    MOV AH,4CH

    INT 21H

CODES ENDS

    END START

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

键盘输入多个1字符,屏幕输出如下

 

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

实验21

实验名称:编写一个查询表,将十六进制数00H—FFH转化为十六进制数字的ASCII码字符。

一、  实验目的

考察对缓冲区中的字符进行搜索查找。

二、  实验原理

通过打表法将00H-0FH的ASCII传入缓冲区,对缓冲区中的字符进行搜索查找。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 编写一个查询表将十六进制数00H~0FH转化为十六进制数字的ASCII码字符。

流程(流程框图)

源程序清单:

实验21.asm

实验21.obj

实验21.exe

DATAS SEGMENT

;此处输入数据段代码 

    ASCII1 DB '0123456789' 

    ASCII2 DB '0A0B0C0D0E0F'

      STR DB 'ERROR!$'  

DATAS ENDS

 

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:

    MOV AX,DATAS

    MOV DS,AX

RE:

    MOV AH,1

    INT 21H

    CALL CRLF

    CMP AL,1BH

    JE EXIT

    CMP AL,'0'

    JL ERROR

    CMP AL,'9'

    JLE PUT1

    CMP AL,'A'

    JL ERROR

    CMP AL,'F'

    JLE PUT2

    CMP AL,'A'

    JL ERROR

    CMP AL,'F'

    JLE PUT3

    JMP ERROR

PUT1:

      SUB AL,30H

      MOV BX,0

      MOV BL,AL

      MOV DL,ASCII1[BX]

      MOV AH,2

      INT 21H

      CALL CRLF

      JMP RE

PUT2:

      SUB AL,41H

      MOV BX,2

      MUL BX

      MOV BL,AL

      MOV DL,ASCII2[BX]

      MOV AH,2

      INT 21H

      MOV DL,ASCII2[BX+1]

      MOV AH,2

      INT 21H

      CALL CRLF

      JMP RE

PUT3:

      SUB AL,61H

      MOV BX,2

      MUL BX

      MOV BL,AL

      MOV DL,ASCII2[BX]

      MOV AH,2

      INT 21H

      MOV DL,ASCII2[BX+1]

      MOV AH,2

      INT 21H

      CALL CRLF

      JMP RE

ERROR:

      LEA DX,STR

      MOV AH,9

      INT 21H

      CALL CRLF

      JMP RE

EXIT:

    MOV AH,4CH

    INT 21H

CRLF  PROC NEAR

      PUSH AX

      PUSH DX

      MOV DL,0AH

      MOV AH,2H

      INT 21H

      MOV DL,0DH

      MOV AH,2H

      INT 21H

      POP DX

      POP AX

      RET

CRLF ENDP

CODES ENDS

    END START

 

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

键盘输入6,输出6

 

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

六、 实验扩展 (XH2)

 

 

 

七、  结论

实验22

实验名称:查找匹配字符串SEARCH

一、  实验目的

掌握汇编语言程序设计中字符串搜索的基本方法。

二、  实验原理

通过REPE CMPSB指令对字串与母串进行比较,同时调用二进制转换为十六进制的子程序将开始匹配的位置输出。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 查找匹配字符串SEARCH

实验要求:

程序接收用户键入的一个关键字以及一个句子。如果句子中不包含关键字则显示

‘No match!’;如果句子中包含关键字则显示‘Match’且把改字在句子中的位

置用十六进制数显示出来。

要求程序的执行过程如下:

Enter keyword :abc

Enter sentence: we are studying abc.

Match at location:11H of the sentence

Enter sentence: xyz,ok?

No match.

Enter sentence:ESC;输入ESC键时,结束运行返回DOS。

流程(流程框图)

源程序清单:

实验22.asm

实验22.obj

实验22.exe

DATAS SEGMENT

    ;此处输入数据段代码 

    STRKEY DB 'Enter keyword:$'

    STRSEN DB 'Enter sentenc:$'

    STRAT DB 'Match at location:$'

    STROF DB 'of the sentence$'

    STRNO DB 'No match.',0DH,0AH,'$'

    CRLF  DB  0DH,0AH,'$'

    BUFKEY DB 10

    DB 10 DUP(?)

    BUFSEN DB 100

    DB 100 DUP(?)

    BUFCMP DB 10

    DB 10 DUP(?)

DATAS ENDS

 

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

 

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    LEA DX,STRKEY

    MOV AH,09H

    INT 21H

    LEA DX,BUFKEY

    MOV AH,0AH

    INT 21H

    LEA DX,CRLF

    MOV AH,09H

    INT 21H

    LEA SI,BUFKEY+2;关键第一字

    MOV DX,[SI]

    CMP DX,1BH;如果输入的是ESC键就退出

    JZ EXIT

    LP1:

    LEA DX,STRSEN

    MOV AH,09H

    INT 21H

    LEA DX,BUFSEN;

    MOV AH,0AH

    INT 21H

    MOV AH,09H

    LEA DX,CRLF

    INT 21H

    LEA BX,BUFSEN+2;句子第一个字符偏移地址

    LP2:

    PUSH CX

    MOV CL,BUFSEN+1;句子长度

    MOV  CH,0

    PUSH SI

      MOV DI,OFFSET BUFCMP

      REP MOVSB

      POP SI

    POP CX

    PUSH CX

    MOV CL,BUFKEY+1

    MOV CH,0

    PUSH SI

    LEA SI,BUFCMP

    LEA DI,BUFKEY+2

    REPZ CMPSB

    POP SI

    POP CX

    JZ MATCHAT

    INC BX

    DEC CL

    JNZ MATCHAT

    JMP NOMATCH

    MATCHAT:

    MOV AH,09H

    LEA DX,STRAT

    INT 21H

    SUB BX,OFFSET BUFSEN+2

    INC BX

    PUSH CX

    MOV CL,4

    MOV CH,4

    NEXT:

    ROL BX,CL

    MOV AL,BL

    AND AL,0FH

    ADD AL,30H

    CMP AL,3AH

    JL OUTP

    ADD AL,07H

    OUTP:

    MOV DL,AL

    CMP DL,'0'

    JZ ZJMP

    MOV AH,02H

    INT 21H

    ZJMP:

    DEC CH

    CMP CH,0

    JA  NEXT

    MOV DL,'H'

    MOV AH,02H

    INT 21H

    POP CX

    MOV AH,09H

    LEA DX,STROF

    INT 21H

    JMP LP1

    NOMATCH:

    MOV AH,09H

    LEA DX,STRNO

    INT 21H

    JMP LP1

    EXIT:

    MOV AH,4CH

    INT 21H

CODES ENDS

    END START

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

 

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

实验23

实验名称:在屏幕上显示ASCLL表

一、  实验目的

输出不同ASCII码的字符。

二、  实验原理

通过宏指令设置光标位置,对字符进行输出。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 在屏幕上显示ASCLL表:

      | 0 1 2 3 4 5 6 7 8 9 A B C D E F

  20  |  ! “ # ……

  30  | 0 1 2 3……

  40  | @ A B C…

  50  | P Q R S ……

  60  | ‘ a b c ……

  70  | p q r s ……

流程(流程框图)

源程序清单:

实验23.asm

实验23.obj

实验23.exe

SHOW MACRO A1

LOCAL L

;PUSH DX

;PUSH AX

;PUSH CX

XOR AX,AX

MOV AL,A1

XOR CX,CX

MOV CX,16

L:

MOV DL,AL

MOV AH,02H

INT 21H

INC AL

LOOP L

MOV DL,0DH

MOV AH,02H

INT 21H

MOV DL,0AH

MOV AH,02H

INT 21H

;POP CX

;POP AX

;POP DX

ENDM

PRINT MACRO B1,B2

 

MOV DL,B1

MOV AH,02H

INT 21H

MOV DL,30H

MOV AH,02H

INT 21H

SHOW B2

ENDM

DATAS SEGMENT

    ;此处输入数据段代码

    HEAD DB 16H,16H,'0123456789ABCDEF$'

DATAS ENDS

 

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

 

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    MOV DX,SEG HEAD

    MOV DS,DX

    LEA DX,HEAD

    MOV AH,09

    INT 21H

      MOV DL,0DH

      MOV AH,02H

      INT 21H

      MOV DL,0AH

      MOV AH,02H

      INT 21H

    ;

   

    PRINT 32H,20H

    PRINT 33H,30H

    PRINT 34H,40H

    PRINT 35H,50H

    PRINT 36H,60H

    PRINT 37H,70H

    ;

    MOV AH,4CH

    INT 21H  

CODES ENDS

    END START

 

 

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

 

 

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

六、 实验扩展 (XH2)

 

 

 

七、  结论

实验24

实验名称:编写程序,统计寄存器AX中置1位的个数。

一、  实验目的

考察寄存器中的置数状态。

二、  实验原理

通过移位指令判断AX中置1的个数,并将其放入BX寄存器中,通过调用二进制转换为十六进制的子程序将置1的个数输出。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 编写程序,统计寄存器AX中置1位的个数。

流程(流程框图)

源程序清单:

实验24.asm

实验24.obj

实验24.exe

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 BL,0

    MOV CX,15

    L1:

    ROL AX,1

    MOV DL,AL

    AND DL,01H

    CMP DL,1

    JNZ L2

    INC BL

    L2:

    LOOP L1

    ;

    MOV CH,2

    NEXT:

    MOV CL,4

    ROL Bl,CL

    MOV AL,BL

    AND AL,0FH

    ADD AL,30H

    CMP AL,3AH

    JL OUTP

    ADD AL,07H

    OUTP:

    MOV DL,AL

    MOV AH,02H

    INT 21H

    DEC CH

    CMP CH,0

    JA  NEXT

    MOV DL,'H'

    MOV AH,02H

    INT 21H

    ;

    MOV AH,4CH

    INT 21H

CODES ENDS

    END START

 

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

 

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

实验25

实验名称:编写程序,统计字符串的长度并将其显示,设字符串以结尾。

一、  实验目的

编写程序,统计字符串的长度并将其显示。设字符串以结尾。

二、  实验原理

掌握如何求输入的字符串的长度并将其输出。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 编写程序,统计字符串的长度并将其显示,设字符串以结尾。

流程(流程框图)

源程序清单:

实验25.asm

实验25.obj

实验25.exe

DATAS SEGMENT

    ;此处输入数据段代码

    BUF DB 30,0,30 DUP(?)

DATAS ENDS

 

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

 

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    LEA DX,BUF

    MOV DS,DX

    LEA DX,BUF

    MOV AH,0AH

    INT 21H

    CALL CRLF

    MOV BL,BUF+1

    MOV CH,2

    NEXT:

    MOV CL,4

    ROL Bl,CL

    MOV AL,BL

    AND AL,0FH

    ADD AL,30H

    CMP AL,3AH

    JL OUTP

    ADD AL,07H

    OUTP:

    MOV DL,AL

    MOV AH,02H

    INT 21H

    DEC CH

    CMP CH,0

    JA  NEXT

    MOV DL,'H'

    MOV AH,02H

    INT 21H

    CALL CRLF

    XOR CX,CX

    MOV CL,BUF+1

    MOV SI,2

    SHOW:

    MOV DL,BUF[SI]

    MOV AH,02H

    INT 21H

    INC SI

    LOOP SHOW

    MOV AH,4CH

    INT 21H

    CRLF PROC NEAR

    MOV DL,0DH

    MOV AH,02H

    INT 21H

    MOV DL,0AH

    MOV AH,02H

    INT 21H

    RET

    CRLF ENDP

CODES ENDS

    END START

 

 

 

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

 

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

实验26

实验名称:从键盘输入一个字符串,再将字符串正序、逆序输出,并显示该字符串的长度

一、  实验目的

编写程序,从键盘输入一个字符,再将该字符正序、逆序输出

二、  实验原理

通过将输入字符存入缓冲区,接着字符串的首地址与尾地址分别按正序、逆序输出字符串。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 编写程序,从键盘输入一个字符串,再将字符串正序、逆序输出,并显示该字符串的

长度。

流程(流程框图)

源程序清单:

实验26.asm

实验26.obj

实验26.exe

DATAS SEGMENT

    ;此处输入数据段代码

    BUF DB 30,0,30 DUP(?)

DATAS ENDS

 

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

 

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    LEA DX,BUF

    MOV DS,DX

    LEA DX,BUF

    MOV AH,0AH

    INT 21H

    CALL CRLF

    ;

    XOR CX,CX

    MOV CL,BUF+1

    MOV SI,2

    SHOW:

    MOV DL,BUF[SI]

    MOV AH,02H

    INT 21H

    INC SI

    LOOP SHOW

    CALL CRLF

    ;

    XOR SI,SI

    XOR CX,CX

    XOR BX,BX

    MOV CL,BUF+1

    XOR BH,BH

    MOV BL,CL

    ADD BL,1

    MOV SI,BX

    SHOW1:

    MOV DL,BUF[SI]

    MOV AH,02H

    INT 21H

    DEC SI

    LOOP SHOW1

    CALL CRLF

    ;

    MOV BL,BUF+1

    MOV CH,2

    NEXT:

    MOV CL,4

    ROL Bl,CL

    MOV AL,BL

    AND AL,0FH

    ADD AL,30H

    CMP AL,3AH

    JL OUTP

    ADD AL,07H

    OUTP:

    MOV DL,AL

    MOV AH,02H

    INT 21H

    DEC CH

    CMP CH,0

    JA  NEXT

    MOV DL,'H'

    MOV AH,02H

    INT 21H

    CALL CRLF

    ;

    MOV AH,4CH

    INT 21H

    CRLF PROC NEAR

    MOV DL,0DH

    MOV AH,02H

    INT 21H

    MOV DL,0AH

    MOV AH,02H

    INT 21H

    RET

    CRLF ENDP

CODES ENDS

    END START

四、 结果与分析:用文字、表格、图形等将数据表示出来。

 

 

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

 

 六、 实验扩展(XH2)

实验27

实验名称:在屏幕中间位置开出一个窗口,随后接收用户按键,并把按键字符显示在窗口的

底行;当窗口底行显示满时,窗口内容自动向上滚动一行;用户按CTRL+C组合键结束

程序运行。  

一、  实验目的

掌握宏指令的调用。

二、  实验原理

通过宏指令调用在开辟出的窗口中,调用BIOS系统调用中的(INT 10H)中的06H号功能进行上卷。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容: 在屏幕中间位置开出一个窗口,随后接收用户按键,并把按键字符显示在窗口的

底行;当窗口底行显示满时,窗口内容自动向上滚动一行;用户按CTRL+C组合键结束

程序运行。  

流程(流程框图)

源程序清单:

实验27.asm

实验27.obj

实验27.exe

BACKGROUND MACRO A1,A2,A3,A4,A5,A6

MOV AL,A1

MOV BH,A2

MOV CH,A3

MOV CL,A4

MOV DH,A5

MOV DL,A6

MOV AH,6

INT 10H

ENDM

CURSOR MACRO B1,B2,B3

MOV BH,B1

MOV DH,B2

MOV DL,B3

MOV AH,2

INT 10H

ENDM

DATAS SEGMENT

    ;此处输入数据段代码 

DATAS ENDS

 

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

 

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    BACKGROUND 0,2FH,8,20,18,50

    LP:

    CURSOR 0,18,20

    MOV CX,30

    PUTIN:

    MOV AH,1

    INT 21H

    CMP AL,0BH;Ctrl+C退出

    JE ENDL

    CMP AL,0DH

    JE NEXT

    LOOP PUTIN

    NEXT:

    BACKGROUND 1,2FH,8,20,18,50

    JMP LP

    ENDL:

    MOV AH,4CH

    INT 21H

CODES ENDS

    END START

 

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

 程序运行如下,输入多个1得到以下运行结果

 

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

实验28

实验名称:在PC机上演奏一段乐曲

一、  实验目的

综合运用各章知识在PC机上演奏一段乐曲

 

二、  实验原理

通过调用发声程序,音调演奏一段乐曲。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容:

流程(流程框图)

源程序清单:

实验28.asm

实验28.obj

实验28.exe

EXTRN SOUNDF:FAR;SOUNDF是外部过程——通用发声程序

DSEG  SEGMENT PARA'DATA'

MUS_FREG DW 262, 262, 294, 262, 349, 330, 262, 262, 294, 262,392, 349, 262, 262

DW 294, 440, 349, 330, 294, 466, 466,440,262, 392, 349, -1

MUS_TIME DW 25, 25, 50, 50, 50, 100

DW 25, 25, 50, 50, 50, 100

DW 25, 25, 50, 50, 50, 50, 150

DW 25, 25, 50, 50, 50, 100

DSEG ENDS ;以上定义数据段

CSEG  SEGMENT PARA'CODE'

      ASSUME CS:CSEG,DS:DSEG

      CALL FAR PTR MUSIC

MUSIC PROC FAR

      MOV AX,DSEG

      MOV DS,AX

      LEA SI,MUS_FREG;取发声的频率(音阶)表首地址

      LEA BP,DS:MUS_TIME ;取发声的节拍(时间)表首地址

FREQ:

      MOV DI,[SI];读取频率值

      CMP DI,-1;歌曲结束了吗?

      JE END_MUS

      MOV BX,DS:[BP] ;读取节拍

      CALL SOUNDF ;调通用发声子程序

      ADD SI,2

      ADD BP,2

      JMP FREQ

END_MUS:

      MOV AH,4CH

      INT 21H

MUSIC ENDP

CSEG ENDS

     END MUSIC

四、 结果与分析:用文字、表格、图形等将数据表示出来。

在XP系统环境下能正常发声

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

 

六、 实验扩展 (XH2)

 

 

 

七、  结论

实验29

实验名称:查找电话号码phone

一、  实验目的

建立一个电话号码本,并完成实验要求

二、  实验原理

通过各个子程序的调用,完成电话号码本的各种功能

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容:

流程(流程框图)

源程序清单:

实验29.asm

实验29.obj

实验29.exe

DATAS SEGMENT

    ;此处输入数据段代码 

INBUF DB 12 DUP (' ') ;输入缓冲区,初始值为空格

OUTNAME DB 16 DUP (' ');姓名输出行,初始值为空格

OUTPHONE DB 12 DUP (' '), 0DH, 0AH,'$';号码输出行,初始值为空格

MESG1 DB 'INPUT NAME $'

MESG2 DB 'INPUT A TELEPHONE NUMBER $'

MESG3 DB 'NAME', 12 DUP (' '), 'TEL.', 0DH, 0AH, '$'

CRLF DB 0DH, 0AH, '$'

DATAS ENDS

STACKS SEGMENT

    ;此处输入堆栈段代码

    DW 100 DUP (?)

    TOS LABEL WORD

STACKS ENDS

 

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

MOV AX, STACKS

MOV SS, AX ;给SS赋值

MOV SP, OFFSET TOS ;给SP赋值

PUSH DS ;设置返回DOS

SUB AX, AX

PUSH AX

MOV AX,DATAS

MOV DS,AX

MOV ES, AX ;给ES赋值

;此处输入代码段代码

LEA DX, MESG1

MOV AH, 09H ;显示字符串功能调用

INT 21H

CALL INPUT_NAME ;输入姓名

LEA DX, MESG2

MOV AH, 09H ;显示字符串功能调用

INT 21H

CALL INPHONE ;输入电话号码

CALL PRINTLINE ;显示姓名及电话号码

;

MOV AH,4CH

INT 21H   

;子程序

INPUT_NAME PROC NEAR ;输入姓名子程序

CALL GETCHAR ;调输入字符子程序输入姓名

LEA SI, INBUF ;把INBUF中的姓名移入输出行OUTNAME

LEA DI, OUTNAME

MOV CX, 12

CLD

REP MOVSB

RET

INPUT_NAME ENDP ;INPUT_NAME子程序结束

;--------------------------------------------------------------------------

INPHONE PROC NEAR ;输入电话号码子程序

CALL GETCHAR ;调输入字符子程序输入电话号码

LEA SI, INBUF ;把INBUF中的电话号码移入输出行OUTPHONE

LEA DI, OUTPHONE

MOV CX, 12

CLD

REP MOVSB

RET

INPHONE ENDP ;INPHONE子程序结束

;--------------------------------------------------------------------------

GETCHAR PROC NEAR ;键盘输入子程序

MOV AL, 20H ;先将INBUF中填满空格字符

MOV CX, 12

LEA DI, INBUF

CLD

REP STOSB

MOV CX, 12 ;向INBUF输入字符

MOV DI, 0

INPUT: MOV AH, 1 ;从键盘接收一个字符并回显的DOS功能调用

INT 21H

CMP AL, 0DH ;输入回车符返回

JZ QUIT

MOV INBUF[DI], AL

INC DI

LOOP INPUT

QUIT: CALL DISP_CRLF

RET

GETCHAR ENDP ;GETCHAR子程序结束

;--------------------------------------------------------------------------

PRINTLINE PROC NEAR ;显示姓名及电话号码子程序

LEA DX, MESG3

MOV AH, 09H ;显示字符串功能调用

INT 21H

LEA DX, OUTNAME ;显示姓名及电话号码

MOV AH, 09H ;显示字符串功能调用

INT 21H

RET

PRINTLINE ENDP ;PRINTLINE子程序结束

;--------------------------------------------------------------------------

DISP_CRLF PROC NEAR ;显示回车换行符子程序

LEA DX, CRLF

MOV AH, 09H

INT 21H

RET

DISP_CRLF ENDP ;DISP_CRLF子程序结束

 

CODES ENDS

    END START

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

 

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

这个程序怎么查找联系人的姓名和电话号码我有点思路,还没有做出来,我的思路是每个联系人在存储区分配三个相邻的存储空间。第一个存姓名,第二个存电话号码,第三个存下一个联系人的地址,这样的话就可已形成一个链表,用前插法对联系人排序和组织。

实验30

实验名称:从键盘输入一个字符串,再将字符串正序、逆序输出

一、  实验目的

编写程序,从键盘输入一个字符,再将该字符正序、逆序输出

二、  实验原理

通过将输入字符存入缓冲区,接着字符串的首地址与尾地址分别按正序、逆序输出字符串。

三、  实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释)

 

实验内容:

流程(流程框图)

源程序清单:

实验30.asm

实验30.obj

实验30.exe

DATAS SEGMENT

    ;此处输入数据段代码

    BUF DB 20,0,20 DUP(?)

DATAS ENDS

 

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

 

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    LEA DX,BUF

    MOV DS,DX

    LEA DX,BUF

    MOV AH,0AH

    INT 21H

    CALL CRLF

    ;

    XOR CX,CX

    MOV CL,BUF+1

    MOV SI,2

    SHOW:

    MOV DL,BUF[SI]

    MOV AH,02H

    INT 21H

    INC SI

    LOOP SHOW

    CALL CRLF

    ;

    XOR SI,SI

    XOR CX,CX

    XOR BX,BX

    MOV CL,BUF+1

    XOR BH,BH

    MOV BL,CL

    ADD BL,1

    MOV SI,BX

    SHOW1:

    MOV DL,BUF[SI]

    MOV AH,02H

    INT 21H

    DEC SI

    LOOP SHOW1

    CALL CRLF

    MOV AH,4CH

    INT 21H

    CRLF PROC NEAR

    MOV DL,0DH

    MOV AH,02H

    INT 21H

    MOV DL,0AH

    MOV AH,02H

    INT 21H

    RET

    CRLF ENDP

CODES ENDS

    END START

 

 

四、 结果与分析:用文字、表格、图形等将数据表示出来。

键盘输入abc123,得到输出结果如下图所示

 

五、 问题讨论:对实验中的现象、数据、产生的结果等进行分析和讨论;程序调试过

程中遇到的问题总结、如何解决。还有哪些问题有待解决;程序有无BUG。

转载于:https://my.oschina.net/clear/blog/34992

5.1试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。 5.2 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序输出 5.3 将AX寄存器中的16位数分成4组,每组4位,然后把这四组数分别放在AL、BL、CL、DL中。 5.4 试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示‘MATCH’,若不相同则显示‘NOT MATCH’。 5.5 试编写一程序,要求能从键盘接收一个个位数N,然后响铃N次。 5.6 编写程序,将一个包含有20个数据的数组M分成两个数组:正数数组P和负数数组N,并分别把这两个数组中的数据的个数显示出来。 5.7 试编制一个汇编语言程序,求出首地址为DATA的100D字数组中的最小偶数,并把它放在AX中。 5.8 把AX中存放的16位二进制数K看作是8个二进制的“四分之一字节”。试编写一个程序,要求数一下值为3(即11B)的四分之一字节数,并将该数在终端上显示出来。 5.9 试编写一汇编语言程序,要求从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数。 5.10 设有一段英文,其字符变量名为ENG,并以$字符结束。试编写一程序,查对单词SUN在该文中的出现次数,并以格式”SUNXXXX“显示出次数。 5.11 从键盘输入一系列以$为结束的字符串,然后对其中的非数字字符进行计数,并显示出计数结果。 5.12 有一个首地址为MEM的100D字数组,试编制程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零。 5.13 在STRING到STRING+99单元中存放着一个字符串,试编制一程序测试该字符串中是否存在数字,如有,则把CL的第五位置1,否则置0. 5.14 在首地址为TABLE的数组中按递增次序存放着100H个16位补码数,试编写一个程序把出现次数最多的数及其出现的次数分别放在AX和CX中。 5.15 数据段中已定义了一个有N个字数据的数组M,试编写一程序求出M中绝对值最大的数,把它放在数据段的M+2n单元中,并将该数的偏移地址存放在M+2(n+1)单元中。 5.16 在首地址为DATA的字数组中,存放了100H个16位补码数,试编写一个程序求出它们的平均值放在AX寄存器中;并求出数组中有多少个数小于此平均值,将结果放在BX寄存器中。 5.17 试编写一个程序,把AX中的十六进制数转换为ASCII码,并将对应的ASCII码依次存放到MEM数组中的四个字节中,例如:当(AX)=2A49H时,程序执行完后,MEM中的4个字节的内容为39H,34H,41H和32H。 5.18 把0~100D之间的30个数存入以GRADE为首地址的30个字数组中,GRADE+i表示学号i+1的学生的成绩。另一个数组RANK为30个学生的名次表,其中RANK+i的内容是学号为i+1的学生的名次。编写一程序,根据GRADE中的学生成绩,将学生名次填入RANK数组中。 5.19 已知数组A包含15个互不相等的整数,试编写一程序,把既在A中又在B中出现的整数存在于数组中C中。 5.20 设在A,B和C单元中存放着三个数,若三个数都不是0,则求出三树之和并存放于D单元中;其中有一个数为0,则把其他两个数也清零。试编写此程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值