80X86汇编语言程序设计 实验报告2.docx
- 文档编号:6963644
- 上传时间:2023-01-13
- 格式:DOCX
- 页数:15
- 大小:265.88KB
80X86汇编语言程序设计 实验报告2.docx
《80X86汇编语言程序设计 实验报告2.docx》由会员分享,可在线阅读,更多相关《80X86汇编语言程序设计 实验报告2.docx(15页珍藏版)》请在冰豆网上搜索。
80X86汇编语言程序设计实验报告2
80X86汇编语言程序设计实验报告
专业:
班级:
日期:
成绩:
第二次试验指导老师:
学生姓名:
学号:
1、实验目的
(1)加深对一些常用的汇编指令的理解;
(2)加深对常用DOS功能调用指令的理解;
(3)进一步熟悉TD的使用。
二、实验内容
1、《80X86汇编语言程序设计》教材中P45的2.3题。
要求:
(1)分别记录执行到“MOVCX,10”和“INT21H”之前的(BX),(BP),(SI),(DI)各是多少。
(2)分别记录程序执行初期与退出之前数据段开始40个字节的内容,指出
运行结果是否与设想的一致。
2、《80X86汇编语言程序设计》教材中P45的2.4题。
要求:
(1)实现的功能不变。
(2)内存单元中数据的访问采用变址寻址方式。
(3)记录程序执行到退出之前数据段开始40个字节的内容,检查程序运行结果是否与设想的一致。
3、编写程序
利用DOS10号功能调用输入一个字符串,统计字符串中字符0、1、…、9出现的次数并显示出来(假设每个字符最多出现9次,若大于9次则显示为x)。
三、实验步骤及结果
1、输入源程序,如下:
.386
STACKSEGMENTUSE16STACK
DB200DUP(0)
STACKENDS
DATASEGMENTUSE16
BUF1DB0,1,2,3,4,5,6,7,8,9
BUF2DB10DUP(0)
BUF3DB10DUP(0)
BUF4DB10DUP(0)
DATAENDS
CODESEGMENTUSE16
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETBUF1
MOVDI,OFFSETBUF2
MOVBX,OFFSETBUF3
MOVBP,OFFSETBUF4
MOVCX,10
LOPA:
MOVAL,[SI]
MOV[DI],AL
INCAL
MOV[BX],AL
ADDAL,3
MOVDS:
[BP],AL
INCSI
INCDI
INCBP
INCBX
DECCX
JNZLOPA
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
(1)进行单步调试。
执行到“MOVCX,10”之前时,得到:
其中(BX)=0014,(BP)=001E,(SI)=0000,(DI)=000A;
执行到“INT21H”之前时,得到:
其中(BX)=001E,(BP)=0028,(SI)=000A,(DI)=0014。
通过单步调试,我发现:
该程序中的LOPA“循环”被执行了十次。
(2)程序执行初期数据段开始40个字节的内容如下:
分别记录为:
00010203040506070809(BUF1)
00000000000000000000(BUF2)
00000000000000000000(BUF3)
00000000000000000000(BUF4)
退出之前数据段开始40个字节的内容如下:
分别记录为:
00010203040506070809(BUF1)
00010203040506070809(BUF2)
0102030405060708090A(BUF3)
0405060708090A0B0C0D(BUF4)
与设想的一致。
2、修改上一题中的代码段,改用变址寻址方式访问BUF1、BUF2、BUF3、BUF4四个存储区中的存储单元。
修改后的程序如下(有下划线标记的为改动的地方):
.386
STACKSEGMENTUSE16STACK
DB200DUP(0)
STACKENDS
DATASEGMENTUSE16
BUF1DB0,1,2,3,4,5,6,7,8,9
BUF2DB10DUP(0)
BUF3DB10DUP(0)
BUF4DB10DUP(0)
DATAENDS
CODESEGMENTUSE16
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVSI,0
MOVDI,0
MOVBX,0
MOVBP,0
MOVCX,10
LOPA:
MOVAL,[SI]+BUF1
MOV[DI]+BUF2,AL
INCAL
MOV[BX]+BUF3,AL
ADDAL,3
MOVDS:
[BP]+BUF4,AL
INCSI
INCDI
INCBP
INCBX
DECCX
JNZLOPA
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
运行之后,程序执行到退出之前数据段开始40个字节的内容显示如下:
记录如下:
00010203040506070809(BUF1)
00010203040506070809(BUF2)
0102030405060708090A(BUF3)
0405060708090A0B0C0D(BUF4)
与设想的一致。
3、编写的程序如下:
.386
DATASEGMENTUSE16
STR00DB0DH,0AH,'Inputsomecharacters,please!
$'
STR01DB'X$'
STR0DB0DH,0AH,'Thefrequencyofzerois:
$'
STR1DB0DH,0AH,'Thefrequencyofoneis:
$'
STR2DB0DH,0AH,'Thefrequencyoftwois:
$'
STR3DB0DH,0AH,'Thefrequencyofthreeis:
$'
STR4DB0DH,0AH,'Thefrequencyoffouris:
$'
STR5DB0DH,0AH,'Thefrequencyoffiveis:
$'
STR6DB0DH,0AH,'Thefrequencyofsixis:
$'
STR7DB0DH,0AH,'Thefrequencyofsevenis:
$'
STR8DB0DH,0AH,'Thefrequencyofeightis:
$'
STR9DB0DH,0AH,'Thefrequencyofnineis:
$'
BUFDB200
DB0
DB200DUP(0)
CRLFDB0DH,0AH,'$'
BUF0DB30H,'$'
BUF1DB30H,'$'
BUF2DB30H,'$'
BUF3DB30H,'$'
BUF4DB30H,'$'
BUF5DB30H,'$'
BUF6DB30H,'$'
BUF7DB30H,'$'
BUF8DB30H,'$'
BUF9DB30H,'$'
DATAENDS
STACKSEGMENTUSE16STACK
STACKENDS
CODESEGMENTUSE16
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
LEADX,STR00
MOVAH,9
INT21H
LEADX,CRLF
MOVAH,9
INT21H
LEADX,BUF
MOVAH,10
INT21H
MOVBL,BUF+1
MOVBH,0
MOVBYTEPTRBUF+2[BX],'$'
LOOP1:
DECBX
CMPBX,-1
JELOPA
CMPBUF+2[BX],'0'
JBEXIT2
CMPBUF+2[BX],'9'
JAEXIT2
CMPBUF+2[BX],'0'
JEA
CMPBUF+2[BX],'1'
JEB
CMPBUF+2[BX],'2'
JED
CMPBUF+2[BX],'3'
JEE
CMPBUF+2[BX],'4'
JEF
CMPBUF+2[BX],'5'
JEG
CMPBUF+2[BX],'6'
JEH
CMPBUF+2[BX],'7'
JEI
CMPBUF+2[BX],'8'
JEJ
CMPBUF+2[BX],'9'
JEK
JMPLOOP1
LOPA:
CMPBUF0,'9'
JAAA
LEADX,STR0
MOVAH,9
INT21H
LEADX,BUF0
MOVAH,9
INT21H
LOPB:
CMPBUF1,'9'
JABB
LEADX,STR1
MOVAH,9
INT21H
LEADX,BUF1
MOVAH,9
INT21H
LOPC:
CMPBUF2,'9'
JAOO
LEADX,STR2
MOVAH,9
INT21H
LEADX,BUF2
MOVAH,9
INT21H
LOPD:
CMPBUF3,'9'
JAEE
LEADX,STR3
MOVAH,9
INT21H
LEADX,BUF3
MOVAH,9
INT21H
LOPE:
CMPBUF4,'9'
JAFF
LEADX,STR4
MOVAH,9
INT21H
LEADX,BUF4
MOVAH,9
INT21H
LOPF:
CMPBUF5,'9'
JAGG
LEADX,STR5
MOVAH,9
INT21H
LEADX,BUF5
MOVAH,9
INT21H
LOPG:
CMPBUF6,'9'
JAHH
LEADX,STR6
MOVAH,9
INT21H
LEADX,BUF6
MOVAH,9
INT21H
LOPH:
CMPBUF7,'9'
JAII
LEADX,STR7
MOVAH,9
INT21H
LEADX,BUF7
MOVAH,9
INT21H
LOPI:
CMPBUF8,'9'
JAJJ
LEADX,STR8
MOVAH,9
INT21H
LEADX,BUF8
MOVAH,9
INT21H
LOPJ:
CMPBUF9,'9'
JAKK
LEADX,STR9
MOVAH,9
INT21H
LEADX,BUF9
MOVAH,9
INT21H
N:
LEADX,CRLF
MOVAH,9
INT21H
MOVAH,4CH
INT21H
EXIT2:
JMPLOOP1
A:
INCBUF0
JMPLOOP1
B:
INCBUF1
JMPLOOP1
D:
INCBUF2
JMPLOOP1
E:
INCBUF3
JMPLOOP1
F:
INCBUF4
JMPLOOP1
G:
INCBUF5
JMPLOOP1
H:
INCBUF6
JMPLOOP1
I:
INCBUF7
JMPLOOP1
J:
INCBUF8
JMPLOOP1
K:
INCBUF9
JMPLOOP1
AA:
LEADX,STR0
MOVAH,9
INT21H
LEADX,STR01
MOVAH,9
INT21H
MOVAH,9
INT21H
JMPLOPB
BB:
LEADX,STR1
MOVAH,9
INT21H
LEADX,STR01
MOVAH,9
INT21H
JMPLOPC
OO:
LEADX,STR2
MOVAH,9
INT21H
LEADX,STR01
MOVAH,9
INT21H
JMPLOPD
EE:
LEADX,STR3
MOVAH,9
INT21H
LEADX,STR01
MOVAH,9
INT21H
JMPLOPE
FF:
LEADX,STR4
MOVAH,9
INT21H
LEADX,STR01
MOVAH,9
INT21H
JMPLOPF
GG:
LEADX,STR5
MOVAH,9
INT21H
LEADX,STR01
MOVAH,9
INT21H
JMPLOPG
HH:
LEADX,STR6
MOVAH,9
INT21H
LEADX,STR01
MOVAH,9
INT21H
JMPLOPH
II:
LEADX,STR7
MOVAH,9
INT21H
LEADX,STR01
MOVAH,9
INT21H
JMPLOPI
JJ:
LEADX,STR8
MOVAH,9
INT21H
LEADX,STR01
MOVAH,9
INT21H
JMPLOPJ
KK:
LEADX,STR9
MOVAH,9
INT21H
LEADX,STR01
MOVAH,9
INT21H
LEADX,CRLF
MOVAH,9
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
运行结果如下:
四、实验体会
本次实验较难的在于第三题,一方面要分别计数用户输入的0-9各个字符的个数,另一方面,考虑到能计数的限度为9,故在某个字符的个数超过9时,要用‘x’来代替。
前面一个问题好解决,使用两个“循环”即可。
问题就在于后面,对于数量超过9个的字符,要用‘x’来代替。
首先要进行判断,不大于9,则直接输出统计的数字,如果大于9,则现将其存为‘x’,再输出。
基本思路是这样的,但由于要对0-9分别进行判断和计数,就使得代码大量重复,浪费了许多的内存。
但运行速度还是很快的。
我现在正在考虑采用另一种方案,看能不能定义一个数组,分别用于存储0-9各个字符出现的次数,然后循环比较每个内存单元中存储的字符与9的大小,大于9,将其置为‘x’,然后再依次输出。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 80X86汇编语言程序设计 实验报告2 80 X86 汇编语言 程序设计 实验 报告