汇编实验报告.docx
- 文档编号:3684594
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:23
- 大小:183.38KB
汇编实验报告.docx
《汇编实验报告.docx》由会员分享,可在线阅读,更多相关《汇编实验报告.docx(23页珍藏版)》请在冰豆网上搜索。
汇编实验报告
华北电力大学
实验报告
实验名称微机原理与汇编语言程序设计课程实验
课程名称微机原理与汇编语言程序设计
专业班级:
学生姓名:
学号:
成绩:
指导教师:
实验日期:
实验一、用表格形式显示字符
一、验目的及要求
用表格形式显示ASCII字符SMASCII。
按15行×16列的表格形式显示ASCII码为10H~100H的所有字符,即一行为主的顺序及ASCII码递增的次序显示对应的字符。
每16个字符为一行,每行中的相邻两个字符之间用空白字符(ASCII为0)隔开。
2、所用仪器、设备
PC机、Masmforwindows集成实验环境
三、实验源代码
STACKSSEGMENT;此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX;此处输入代码段代码
movcx,0f0h
movbl,10h
movdl,10h
again:
movah,2
int21h
pushdx
movdl,0
movah,2
int21h
popdx
incdl
decbl
cmpbl,0
jnznext
movbl,10h
pushdx
movdl,0dh
movah,2
int21h
movdl,0ah
movah,2
int21h
popdx
四、实验结果截图
实验二、查找匹配字符串
一、实验目的及要求
查找匹配字符串SEARCH,要求程序接收用户键入一个关键字以及一个句子,如果句子中不包含关键字,则显示“Nomatch!
”;如果句子中包含关键字则显示“Match”,且吧该关键字在句子中的位置用十六进制数显示出来。
二、所用仪器、设备
PC机、Masmforwindows集成实验环境
三、实验流程图
四、实验代码
START:
pushds
subAX,AX
subBX,BX
subDI,DI
subSI,SI
pushAX;为返回dos并清空后面要用到的寄存器
MOVAX,DATA
MOVDS,AX
LEADX,mess1
MOVah,09
INT21h;输出Enterkeyword
LEADX,stoknin1
MOVah,0ah;用21号中段的0ah号功能获取关键字
INT21h
cmpact1,0
jeexit;如果为空直接退出程序
a10:
;输入Sentence并判断
LEADX,change
MOVah,09
INT21h;输出回程,换行
LEADX,mess2
MOVah,09
INT21h;输出EnterSentence:
LEADX,stoknin2
MOVah,0ah
INT21h;用21号中段的0ah号功能获取句子
MOVAL,act1
CBW
MOVCX,AX;保存关键字长度到cx
PUSHCX;cx入栈
MOVAL,act2
cmpAL,0
jea50;保存句子长度到al,若句子为空则跳转显示notmatch
SUBAL,act1
jsa50;若句子长度小于关键字长度,则跳转显示notmatch
INCAL
CBW
LEABX,stokn2;将句子的首地址放进BX
MOVDI,0
MOVSI,0
a20:
;比较,内循环
MOVAH,[BX+DI]
CMPAH,stokn1[SI];遇见字符不相等就跳转到a30
jnea30
INCDI
INCSI
DECCX;没遇到一个相等的字符,cx-1,cx不为0则比较下一个字符,当cx为0是说明关键字比较完
CMPCX,0
jea40
jmpa20
a30:
;外循环,BX+1,清空si,di继续内循环比较
INCBX
DECAL
cmpAL,0
jea50
MOVDI,0
MOVSI,0
POPCX
pushCX
jmpa20
a40:
;match,将bx减去句子的首地址加一得到关键字所在位置,调用二进制转十六进制子函数将位置输出
SUBBX,offsetstokn2
INCBX
LEADX,change
MOVah,09
INT21h
LEADX,mess3
MOVah,09
INT21h
CALLbtoh
LEADX,mess5
MOVah,09
INT21h
jmpa10
;二进制转换十六进制
btohPROCNEAR
MOVCH,4
rotate:
MOVCL,4
ROLBX,CL
MOVAL,BL
andAL,0fh
addAL,30h
cmpal,3ah
jlprintit
addal,7h
printit:
MOVdl,al
MOVah,2
int21h
decch
jnzrotate
ret
btohendp
a50:
显示notmatch
LEADX,change
MOVah,09
INT21h
LEADX,mess4
MOVah,09
INT21h
jmpa10
5、实验结果
实验三、分类统计字符个数
一、实验目的及要求
分类统计字符个数COUNT-CHAR,程序接收用户键入的一行字符(字符个数不超过80个,该字符串用回车符结束),并按字符、数字及其他字符分类计数,然后将结果存入以letter、digit和other为名的存储单元中。
二、实验代码
START:
MOVAX,DATAS
MOVDS,AX
LEADX,STRING1;显示输入提示信息
MOVAH,9
INT21H
MOVCX,100;设置循环次数主够大
L1:
MOVAH,1;中断调用,单字符输入
iNT21H
CMPAL,0DH;若输入回车符则结束
JZOVER2
CMPAL,30H
JBOTHER;若<30H(0),OTHERS++
CMPAL,39H;若>39H(9),跳转进一步比较
JAHIGHER1
JMPDIGITAL;DIGIT++
HIGHER1:
CMPAL,41H;if<41H(A),OTHERS++
JBOTHER
CMPAL,5AH;if>5AH(Z),跳转继续比较
JAHIGHER2
JMPUALPHA;ALPHAU++
HIGHER2:
CMPAL,61H;if<61H(a),OTHERS++
JBOTHER
CMPAL,7AH;if>7AH(z),OTHERS++
JAOTHER
JMPLALPHA;ALPHAL++
JMPOVER;比较结束
OTHER:
INCOTHERS;OTHERS++
JMPOVER
DIGITAL:
INCDIGIT;DIGIT++
JMPOVER
LALPHA:
INCALPHAL;ALPHAL++
JMPOVER
UALPHA:
INCALPHAU;ALPHAU++
JMPOVER
OVER:
NOP
LOOPL1;循环,输入下一字符
OVER2:
CALLENDLINE;回车换行
LEADX,STRING2;输出提示信息
MOVAH,9
INT21H
XORAX,AX
MOVAL,DIGIT;将统计的数字送AX,为输出做准备
CALLDISPLAY;调用输出两位数字的子程序
CALLENDLINE;下同
LEADX,STRING3
MOVAH,9
INT21H
XORAX,AX
MOVAL,ALPHAU
CALLDISPLAY
CALLENDLINE
LEADX,STRING4
MOVAH,9
INT21H
XORAX,AX
MOVAL,ALPHAL
CALLDISPLAY
CALLENDLINE
LEADX,STRING5
MOVAH,9
INT21H
XORAX,AX
MOVAL,OTHERS
CALLDISPLAY
MOVAH,4CH
INT21H
ENDLINEPROCNEAR;控制输出格式,输出回车换行子程序
MOVAH,2
MOVDL,0AH
INT21H
MOVAH,2
MOVDL,0DH
RET
ENDLINEENDP
DISPLAYPROCNEAR;输出两位数字的子程序
MOVBL,10;10送BL
DIVBL;AX/BL,AL=商,AH=余数
PUSHAX;保存AX中的信息
MOVDL,AL
ADDDL,30H
MOVAH,2
INT21H;输出十位数
POPAX;出栈送AX
MOVDL,AH
ADDDL,30H
MOVAH,2
INT21H;输出个位数
4、实验结果
DATASSEGMENT
STRING1DB'InputYourString:
$';输入提示信息
STRING2DB'Digit:
$';各类字符提示信息
STRING3DB'UpAlpha:
$'
STRING4DB'LowAlpha:
$'
STRING5DB'Others:
$'
DIGITDB0;数字
ALPHAUDB0;大写字母
ALPHALDB0;小写字母
OTHERSDB0;其他
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
LEADX,STRING1;显示输入提示信息
MOVAH,9
INT21H
MOVCX,100;设置循环次数主够大
L1:
MOVAH,1;中断调用,单字符输入
INT21H
CMPAL,0DH;若输入回车符则结束
JZOVER2
CMPAL,30H
JBOTHER;若<30H(0),OTHERS++
四、实验结果
实验四、查找电话号码
一、实验目的
查找电话号码phone
二、实验要求
(1)要求程序建立一个可存放50项的电话号码表,每项包括人名(20个字符)及电话号码(8个字符)两部分;
(2)程序可接收输入人名及相应的电话号码,并把它们加入电话号码表中;
(3)凡有新的输入后,程序应按人名对电话号码表重新排序;
(4)程序可接收需要查找电话号码的人名,并从电话号码表中查出其电话号码,再在屏幕上以如下格式显示出来。
nametel.
XXXXXXXX
三、实验代码及分析
;显示所有电话。
显示电话表中的所有姓名和号码,查看排序结果是否正确
callcrlf
callcrlf
leadx,text2;输出'NameTel.
movah,09
int21h
leabx,tel_tab;号码表基址
rept1:
callprintline;显示联系人
addbx,28;求下一个联系人首地址
cmpbx,endaddr;是否到达表尾?
jbrept1;未到达则继续显示
ret
printallendp
;**************************************************************************
;获取号码子程序:
读入用户输入的号码到tphone缓冲区,然后
;转存入号码表对应位置
inphoneprocnear
noinputp:
callcrlf
leadx,tphone
movah,0ah
int21h;调用dos0a号功能输入字符串
cmptphone[1],0;判断输入是否为回车
jenoinputp;是,则继续等待输入
xorcx,cx
movcl,tphone[1]
leasi,tphone[2]
movdi,endaddr
subdi,8;待插入位置
cld
repmovsb;移动
ret
inphoneendp
;**********************************************************************
;排序子程序(用直接插入排序),对号码表进行按人名从小到大排序
name_sortprocnear
cmp[tab_len],1;记录数1,不用排序
jeexitn
leadi,tel_tab;第一个记录地址
movsi,endaddr
subsi,28;最后一个记录-待排序记录的地址
next1:
movcx,20
movax,si;暂存两个地址
movdx,di
cld
repecmpsb;查找插入位置
jbinsert
movsi,ax
movdi,dx
adddi,28;比较下一个
cmpdi,si;是否比较完
jbnext1;没有则继续比较
jmpexitn;否则排序完成
insert:
movcx,28
movsi,ax
leadi,temp
repmovsb;待排序数据放到缓冲区
movdi,ax
next2:
movcx,28
movsi,di
subsi,28
repmovsb;记录后移
subdi,56
cmpdi,dx
janext2
movcx,28
movdi,dx
leasi,temp
repmovsb;插入到待插位置
exitn:
ret
name_sortendp
;******************************************************************************
;姓名查找子程序。
入口参数为tname缓冲区的人名,用寄存器bx返回结果,找到则返回该
;姓名对应记录的地址,未找到则返回(bx)=-1
name_searchprocnear
cmptab_len,0;记录为0,无法查找
jeexit_nofind
leasi,tname[2];待查姓名地址
movax,si;暂存si
leabx,tel_tab;从第一个记录开始查找
rsearch:
movcx,20
movdi,bx
repecmpsb
jzexit_n
movsi,ax
addbx,28;查找下一个
cmpbx,endaddr
jbrsearch
exit_nofind:
movbx,-1;未找到则(bx)=-1
exit_n:
ret
name_searchendp
printlineprocnear
pushax;保存ax
callcrlf
xorsi,si
movcx,28;共28个字符
movah,02h;调用dos2号显示字符功能
nextc:
movdl,[bx][si];待显示字符
int21h
incsi;输出下一个字符
loopnextc
callcrlf
popax
ret
printlineendp
四、实验方法与步骤
实验刚开头在tel_tab创建了电话本空间,给每位联系人创建一个临时空间,把电话号码和姓名保存。
在inname内调用name_search查找该用户,看是否在表中,如果已经存在则从新输入,如果没有则跳转到stor,在stor里面把姓名移动到表中,并把输入电话号码调用inphone读进去;在search里面提示用户要查找的姓名并查找。
在printall显示出所有的用户姓名和号码,并且查看排序结果是否正确,stor_name该子程序把tname缓冲区的姓名转存入号码表中,,获取号码子程序读入用户输入的号码到tphone缓冲区,然后转存入号码表对应位置,在name_sort排序子程序(直接插入排序),对号码表进行按人名从小到大排序,姓名查找子程序的入口参数为tname缓冲区的人名,用寄存器bx返回结果,找到则返回该姓名对应的地址,未找到则返回(bx)=-1,在printline显示姓名和电话子程序,待显示的记录的地址保存在bx寄存器。
五、实验结果与数据处理
实验五、屏幕窗口程序
datassegment
curydb15;光标初始位置
curxdb50
lxdb10;记录左窗口当前光标位置,初始化为左窗口初始位置
lydb15
rxdb50;记录右窗口当前光标位置,初始化为右窗口初始位置
rydb15
dwxdb15;记录下窗口当前光标位置,初始化为下窗口初始位置
dwydb22
ulrowdb0
ulcoldb0
lrrowdb0
lrcoldb0
windownumdb1
datasends
;!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
宏指令clear清屏
clearmacroa,b,c,d
movah,6
moval,0;初始化窗口
movch,a;左上角行号
movcl,b;左上角列号
movdh,c;右下角行号
movdl,d;右下角列号
movbh,7;卷入行属性
int10h;BIOS调用,屏幕初始化
endm
;!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
宏指令scroll向上卷动一行
scrollmacrocont,ulrow,ulcol,lrrow,lrcol
movah,6
moval,cont;上卷行数
movch,ulrow;左上角行号
movcl,ulcol;左上角列号
movdh,lrrow;右下角行号
movdl,lrcol;右下角列号
movbh,70h;卷入行属性
int10h;BIOS调用,上卷
endm
;!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
宏指令postc光标定位
postcmacroy,x
movah,2
movdh,y;行
movdl,x;列
movbh,0;页号
int10h;BIOS调用,置光标位置
endm
codessegment
assumecs:
codes,ds:
datas
start:
mainprocfar
pushds
subax,ax
pushax
movax,datas
movds,ax
clear0,0,24,79
scroll10,5,10,15,30
scroll10,5,50,15,70
scroll4,18,15,22,65
postccury,curx
input:
;输入键盘上的字符
movah,0
int16h;BIOS调用,从键盘读字符
cmpah,4bh;判断输入字符是否为左向键
jnzno_left
postcly,lx
movwindownum,2
jmpinput
no_left:
cmpah,4dh
jnzno_right;判断输入字符是否为右向键
postcry,rx
movwindownum,1
jmpinput
no_right:
cmpah,01;判断输入字符是否为ESC
jzexit
movah,0ah;在正确的窗口打印字符
movbh,0
movcx,1
int10h
postcdwy,dwx
movah,0ah;在下窗口输出
movbh,0
movcx,1
int10h
incdwx
cmpdwx,65;判断下窗口是否上卷
jleisright
scroll1,19,15,22,65
movdwx,15
isright:
cmpwindownum,1;判断是否在右窗口
jnzdispleft
dispright:
;判断右窗口是否上卷
incrx
cmprx,70
jlerightexit
scroll1,6,50,15,70
movrx,50
rightexit:
;右窗口输出
postcry,rx
jmpinput
displeft:
;判断左窗口是否上卷
inclx
cmplx,30
jleleftexit
scroll1,6,10,15,30
movlx,10
leftexit:
;左窗口输出
postcly,lx
jmpinput
exit:
movah,4ch
int21h
mainendp
codesends
endstart
实验结果:
实验总结:
刚学习汇编语言还不是很久,编写的时候遇到很多问题,有些一点都不懂,不知道要用到那些指令,只好一个个的翻书。
此次软件设计方面,使得对于内存的操作,单元地址等有了清晰概念,各种寻址方式、各寄存器的用途、用法都应该相当了解一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 实验 报告