现代微机原理实验指导书.docx
- 文档编号:6730762
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:16
- 大小:126.45KB
现代微机原理实验指导书.docx
《现代微机原理实验指导书.docx》由会员分享,可在线阅读,更多相关《现代微机原理实验指导书.docx(16页珍藏版)》请在冰豆网上搜索。
现代微机原理实验指导书
实验一两个多位十进制数相减实验
一、实验要求:
将两个多位十进制数相减,要求被减数,减数均以ASCII码形式按顺序存放在以DATAI和DATA2为首的5个内存单元中(低位在前),结果送回DATAI处。
二、实验目的:
1.学习数据传送和算术运算指令的用法。
2.熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。
三、实验程序框图:
四、实验程序:
DATASEGMENT
DATA1DB33H,39H,31H,37H,38H;第一个数据(作为被减数)
DATA2DB36H,35H,30H,38H,32H;第二个数据(作为减数)
MES1DB'-','$'
MES2DB'=','$'
DATAENDS
STACKSEGMENT;堆栈段
STADB20DUP(0)
TOPEQU20
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAX,STACK
MOVSS,AX
MOVAX,TOP
MOVSP,AX
MOVSI,OFFSETDATA1
MOVBX,05
CALLDISPL;显示被减数
MOVAH,09H
LEADX,MES1
INT21H
MOVSI,OFFSETDATA2
MOVBX,05;显示减数
CALLDISPL
MOVAH,09H
LEADX,MES2
INT21H
MOVSI,OFFSETDATA1
MOVDI,OFFSETDATA2
CALLSUBA;减法运算
MOVSI,OFFSETDATA1
MOVBX,05;显示结果
CALLDISPL
MOVDL,0DH
MOVAH,02H
INT21H
MOVDL,0AH
MOVAH,02H
INT21H
INT21H
MOVAX,4C00H
INT21H
DISPLPROCNEAR;显示子功能
DSI:
MOVAH,02
MOVDL,[SI+BX-1];显示字符串中一字符
INT21H
DECBX;修改偏移量
JNZDSI
RET
DISPLENDP
SUBAPROCNEAR
MOVDX,SI
MOVBP,DI
MOVBX,05
SU1:
SUBBYTEPTR[SI+BX-1],30H
SUBBYTEPTR[DI+BX-1],30H
DECBX;将ASCII码表示的数字串
JNZSU1;转化为十六进制的数字串
MOVSI,DX
MOVDI,BP
MOVCX,05;包括进位,共5位
CLC;清进单位
SU2:
MOVAL,[SI]
MOVBL,[DI]
SBBAL,BL;带进位相减
AAS;非组合BCD码的减法调整
MOV[SI],AL;结果送被减数区
INCSI
INCDI;指向下一位
LOOPSU2;循环
MOVSI,DX
MOVDI,BP
MOVBX,05
SU3:
ADDBYTEPTR[SI+BX-1],30H
ADDBYTEPTR[DI+BX-1],30H
DECBX;十六进制的数字串转化ASCII码表示的数字串
JNZSU3
RET
SUBAENDP
CODEENDS
ENDSTART
实验二从键盘输入数据并显示
一、实验要求:
编写程序,将键盘接收到的四位十六进制数转换为等值的二进制数,再显示在屏幕上。
若输入的不是0-F间的数字,则显示出错信息,并要求重新输入。
二、实验目的:
掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为ASCII码的原理,并在程序中设置错误出口。
三、实验程序框图:
四、实验程序:
CRLFMACRO
MOVAH,02H
MOVDL,0DH
INT21H
MOVAH,02H
MOVDL,0AH
INT21H
ENDM
DATASEGMENT
MARKDB?
MESSDB'input4bithex,sendenterconverttobinary,spaceend!
',0DH,0AH,'input:
$'
ERRORDB0DH,0AH,''inputerror!
',0DH,0AH,'$'
DATAENDS
STACKSEGMENT
STADW32DUP(?
)
TOPDW?
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVSP,TOP
HEAD:
CRLF
MOVMARK,0
MOVAH,09H
LEADX,MESS
INT21H;显示提示输入的信息
CALLGETNUM;接收键入数值送DX
CMPMARK,01H
JEHEAD
MOVCX,0010H;16位
MOVBX,DX
TTT:
ROLBX,1;循环左移1位
MOVDL,BL
ANDDL,01H;屏蔽掉高7位
ADDDL,30H
MOVAH,02H
INT21H;显示二进制位对应的ASCII字符
LOOPTTT
JMPHEAD
FINI:
MOVAX,4C00H
INT21H;返回DOS
GETNUMPROCNEAR;子程序,接收键入数值送DX
PUSHCX
XORDX,DX
GGG:
MOVAH,01H
INT21H
CMPAL,0DH;输入为回车,则进行转换
JEPPP
CMPAL,20H;输入为空格,则退回DOS
JEFINI
CMPAL,30H
JBKKK
SUBAL,30H
CMPAL,0AH
JBGETS
CMPAL,11H
JBKKK
SUBAL,07H
CMPAL,0FH
JBEGETS
CMPAL,2AH
JBKKK
CMPAL,2FH
JAKKK
SUBAL,20H
GETS:
MOVCL,04
SHLDX,CL
XORAH,AH
ADDDX,AX
JMPGGG
KKK:
MOVAH,09H
MOVDX,OFFSETERROR
INT21H
MOVMARK,01H
PPP:
PUSHDX
CRLF
POPDX
POPCX
RET
GETNUMENDP
CODEENDS
ENDSTART
实验三字母的大小写转换
一、实验要求:
显示选择项菜单,接收键盘输入以确定大写转小写,小写转大写或返回DOS。
然后根据提示输入字符串(以回车为结束符),程序按先前选择进行大小写转换并显示,之后返回选择项菜单。
二、实验目的:
了解小写字母和大写字母在计算机内的表示方法,并学习如何进行转换。
三、实验程序框图:
四、实验程序:
CRLFMACRO
MOVAHM02H
MOVDL,0DH
INT21H
MOVAH,02H
MOVDL,0AH
INT21H
ENDM
DATASEGMENT
MESS1DB'capitallettertosmallletter-----input1',0DH,0AH
DB'smalllettertocapitalletter-----input2',0DH,0AH
DB'backtoDOS-----input3',0DH,0AH,'$'
MESS2DB'inputstring,sendenterstartconvert!
',0DH,0AH,'$'
MARKDB0
BUFDB82DUP(0)
DATAENDS
STACKSEGMENT
STADB50DUP(0)
TOPEQU50;LENGTHSTA
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAX,STACK;段寄存器和堆栈初始化
MOVSS,AX
MOVSP,TOP
MOVBX,OFFSETBUF;BX指向字符行缓冲区首址.
KKK:
MOVSI,0000H;偏移指针SI清0
MOVMARK,0
MOVAH,09H
LEADX,MESS1
INT21H
BG:
MOVAH,08H
INT21H;接收键入字符
CMPAL,'3'
JEPPP;
CMPAL,'1'
JEBS
CMPAL,'2'
JESB
JMPBG
BS:
MOVAH,09H;大写转小写
LEADX,MESS2
INT21H
MOVMARK,11H
BS1:
MOVAH,01H
INT21H
CMPAL,0DH
JEBBB
CMPAL,5AH
JATTT
CMPAL,41H
JBTTT
ADDAL,20H
JMPTTT
SB:
MOVAH,09H;小写转大写
LEADX,MESS2
INT21H
MOVMARK,22H
SB1:
MOVAH,01H
INT21H
CMPAL,0DH
JZBBB
CMPAL,61H
JBTTT
CMPAL,7AH
JATTT;不是小写它母转TTT
SUBAL,20H;小写字母转化为大写字母
TTT:
MOV[BX+SI],AL;存入字符行缓冲区中
INCSI;偏移指针加1
CMPMARK,11H
JEBS1
CMPMARK,22H
JESB1
JMPPPP
BBB:
MOV[BX+SI],AL
MOVAL,0AH
MOV[BX+SI+1],AL;加入换行符
MOVAL,'$'
MOV[BX+SI+2],AL;再加一个`$`标志字符
MOVAH,09H
MOVDX,BX
INT21H;显示转换后的字符串
JMPKKK;循环
PPP:
MOVAX,4C00H
INT21H
CODEENDS;返回DOS
ENDSTART
实验四排序实验
一、实验要求:
使用DEBUG程序,从首址为1000H的内存区开始存放10个数,要求设计程序将这些数由小到大排序,排序后的数,仍放在该区域中。
二、实验目的:
掌握用汇编语言编写气泡排序程序的思路和方法。
三、实验程序框图:
四、实验程序:
CRLFMACRO
MOVAH,02H
MOVDL,0DH
INT21H
MOVAH,02H
MOVDL,0AH
INT21H
ENDM
DATASEGMENT
SORTNUMEQU10
MESSDB'1000:
0start,10numberSmalltolargesort:
',0DH,0AH,'$'
DATAENDS
STACKSEGMENT
STADW32DUP(0)
TOPDW64
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVSP,TOP;初始化
MOVSI,0;偏移量
MOVAX,1000H;段址
MOVDS,AX
MOVCX,SORTNUM;排序数的长度
DECCX;外循环次数
XORBX,BX;偏移指针清0
III:
MOVAL,[SI+BX];取数
MOVAH,BL;AH为交换单元指针
PUSHCX
MOVDX,BX;初始化内循环控制变量
JJJ:
INCDX;内循环控制变量值增1
PUSHBX;入栈保存
MOVBX,DX
CMPAL,[SI+BX]
JBEUUU;若AL较小,则不必交换,转UUU
MOVAL,[SI+BX]
MOVAH,DL;置AL为新的较小值并修改AH指针
UUU:
POPBX
LOOPJJJ;内循环
MOVCL,[SI+BX]
MOV[SI+BX],AL
MOVDL,AH
PUSHBX
MOVBX,DX
MOV[SI+BX],CL
POPBX;交换
INCBX;偏移量加1
POPCX
LOOPIII;外循环
PUSHDS
MOVAX,DATA
MOVDS,AX;重置DS使其指向DATA段
MOVAH,09H
MOVDX,OFFSETMESS
INT21H;显示SORTOK信息
POPDS
MOVCX,SORTNUM
VVV:
MOVAL,[SI]
CALLDISP1
PUSHAX
PUSHDX
MOVDL,20H
MOVAH,02H
INT21H
POPDX
POPAX
INCSI
LOOPVVV;并排序后数显示出来
MOVAX,4C00H
INT21H;返回DOS
DISP1PROCNEAR;显示子程序,显示AL寄存器的内容
PUSHCX
MOVBL,AL
MOVDL,BL
MOVCL,04
ROLDL,CL
ANDDL,0FH
CALLDISPL
MOVDL,BL
ANDDL,0FH
CALLDISPL
POPCX
RET
DISP1ENDP
DISPLPROCNEAR
ADDDL,30H
CMPDL,3AH
JBDDD
ADDDL,27H
DDD:
MOVAH,02H
INT21H
RET
DISPLENDP;参见数值显示实验程序清单
CODEENDS
ENDSTART
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 现代 微机 原理 实验 指导书