、实验目的
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。