80X86汇编语言程序设计 实验报告2
- 格式:doc
- 大小:512.00 KB
- 文档页数:11
1 80X86汇编语言程序设计 实验报告
专业: 班级: 日期: 成绩:
第二次试验 指导老师:
学生姓名: 学号:
一、实验目的
(1) 加深对一些常用的汇编指令的理解;
(2) 加深对常用DOS功能调用指令的理解;
(3) 进一步熟悉TD的使用。
二、实验内容
1、《80X86汇编语言程序设计》教材中 P45的 2.3题。
要求:(1) 分别记录执行到“MOV CX,10”和“INT 21H”之前的(BX),
(BP),(SI),(DI)各是多少。
(2) 分别记录程序执行初期与退出之前数据段开始40个字节的内容,指出
运行结果是否与设想的一致。
2、《80X86汇编语言程序设计》教材中 P45的 2.4题。
要求:(1) 实现的功能不变。
(2) 内存单元中数据的访问采用变址寻址方式。
(3) 记录程序执行到退出之前数据段开始40个字节的内容,检查程序运行结果是否与设想的一致。
3、编写程序
利用DOS 10号功能调用输入一个字符串,统计字符串中字符0、1、„、9出现的次数并显示出来(假设每个字符最多出现9次,若大于9次则显示为x)。
三、实验步骤及结果
1、输入源程序,如下:
.386
STACK SEGMENT USE16 STACK
DB 200 DUP(0)
STACK ENDS
DATA SEGMENT USE16
BUF1 DB 0,1,2,3,4,5,6,7,8,9
BUF2 DB 10 DUP(0)
BUF3 DB 10 DUP(0)
BUF4 DB 10 DUP(0)
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET BUF1
MOV DI,OFFSET BUF2
MOV BX,OFFSET BUF3
MOV BP,OFFSET BUF4
MOV CX,10
2 LOPA: MOV AL,[SI]
MOV [DI],AL
INC AL
MOV [BX],AL
ADD AL,3
MOV DS:[BP],AL
INC SI
INC DI
INC BP
INC BX
DEC CX
JNZ LOPA
MOV AH,4CH
INT 21H
CODE ENDS
END START
(1)进行单步调试。执行到“MOV CX,10”之前时,得到:
其中(BX)=0014,(BP)=001E,(SI)=0000,(DI)=000A;
执行到“INT 21H”之前时,得到:
3 其中(BX)=001E,(BP)=0028,(SI)=000A,(DI)=0014。
通过单步调试,我发现:该程序中的LOPA“循环”被执行了十次。
(2)程序执行初期数据段开始40个字节的内容如下:
分别记录为:
00 01 02 03 04 05 06 07 08 09 (BUF1)
00 00 00 00 00 00 00 00 00 00 (BUF2)
00 00 00 00 00 00 00 00 00 00 (BUF3)
00 00 00 00 00 00 00 00 00 00 (BUF4)
退出之前数据段开始40个字节的内容如下:
分别记录为:
00 01 02 03 04 05 06 07 08 09 (BUF1)
00 01 02 03 04 05 06 07 08 09 (BUF2)
01 02 03 04 05 06 07 08 09 0A (BUF3)
04 05 06 07 08 09 0A 0B 0C 0D (BUF4)
与设想的一致。
2、修改上一题中的代码段,改用变址寻址方式访问BUF1、BUF2、BUF3、BUF4四个存储区中的存储单元。修改后的程序如下(有下划线标记的为改动的地方):
.386
STACK SEGMENT USE16 STACK
DB 200 DUP(0)
STACK ENDS
DATA SEGMENT USE16
BUF1 DB 0,1,2,3,4,5,6,7,8,9
BUF2 DB 10 DUP(0)
BUF3 DB 10 DUP(0)
BUF4 DB 10 DUP(0)
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV SI,0
MOV DI,0
MOV BX,0
4 MOV BP,0
MOV CX,10
LOPA: MOV AL,[SI]+BUF1
MOV [DI]+BUF2,AL
INC AL
MOV [BX]+BUF3,AL
ADD AL,3
MOV DS:[BP]+BUF4,AL
INC SI
INC DI
INC BP
INC BX
DEC CX
JNZ LOPA
MOV AH,4CH
INT 21H
CODE ENDS
END START
运行之后,程序执行到退出之前数据段开始40个字节的内容显示如下:
记录如下:
00 01 02 03 04 05 06 07 08 09 (BUF1)
00 01 02 03 04 05 06 07 08 09 (BUF2)
01 02 03 04 05 06 07 08 09 0A (BUF3)
04 05 06 07 08 09 0A 0B 0C 0D (BUF4)
与设想的一致。
3、编写的程序如下:
.386
DATA SEGMENT USE16
STR00 DB 0DH,0AH,'Input some characters, please!$'
STR01 DB 'X$'
STR0 DB 0DH,0AH,'The frequency of zero is:$'
STR1 DB 0DH,0AH,'The frequency of one is:$'
STR2 DB 0DH,0AH,'The frequency of two is:$'
STR3 DB 0DH,0AH,'The frequency of three is:$'
STR4 DB 0DH,0AH,'The frequency of four is:$'
STR5 DB 0DH,0AH,'The frequency of five is:$'
STR6 DB 0DH,0AH,'The frequency of six is:$'
STR7 DB 0DH,0AH,'The frequency of seven is:$'
STR8 DB 0DH,0AH,'The frequency of eight is:$'
STR9 DB 0DH,0AH,'The frequency of nine is:$'
5 BUF DB 200
DB 0
DB 200 DUP(0)
CRLF DB 0DH,0AH,'$'
BUF0 DB 30H,'$'
BUF1 DB 30H,'$'
BUF2 DB 30H,'$'
BUF3 DB 30H,'$'
BUF4 DB 30H,'$'
BUF5 DB 30H,'$'
BUF6 DB 30H,'$'
BUF7 DB 30H,'$'
BUF8 DB 30H,'$'
BUF9 DB 30H,'$'
DATA ENDS
STACK SEGMENT USE16 STACK
STACK ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
LEA DX,STR00
MOV AH,9
INT 21H
LEA DX,CRLF
MOV AH,9
INT 21H
LEA DX,BUF
MOV AH,10
INT 21H
MOV BL,BUF+1
MOV BH,0
MOV BYTE PTR BUF+2[BX],'$'
LOOP1: DEC BX
CMP BX,-1
JE LOPA
CMP BUF+2[BX],'0'
JB EXIT2
CMP BUF+2[BX],'9'
JA EXIT2
CMP BUF+2[BX],'0'
JE A
CMP BUF+2[BX],'1'
JE B
6 CMP BUF+2[BX],'2'
JE D
CMP BUF+2[BX],'3'
JE E
CMP BUF+2[BX],'4'
JE F
CMP BUF+2[BX],'5'
JE G
CMP BUF+2[BX],'6'
JE H
CMP BUF+2[BX],'7'
JE I
CMP BUF+2[BX],'8'
JE J
CMP BUF+2[BX],'9'
JE K
JMP LOOP1
LOPA: CMP BUF0,'9'
JA AA
LEA DX,STR0
MOV AH,9
INT 21H
LEA DX,BUF0
MOV AH,9
INT 21H
LOPB: CMP BUF1,'9'
JA BB
LEA DX,STR1
MOV AH,9
INT 21H
LEA DX,BUF1
MOV AH,9
INT 21H
LOPC: CMP BUF2,'9'
JA OO
LEA DX,STR2
MOV AH,9
INT 2 1H
LEA DX,BUF2
MOV AH,9
INT 21H
LOPD: CMP BUF3,'9'
JA EE
LEA DX,STR3