微机原理汇编实验.docx
- 文档编号:29005686
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:15
- 大小:75.06KB
微机原理汇编实验.docx
《微机原理汇编实验.docx》由会员分享,可在线阅读,更多相关《微机原理汇编实验.docx(15页珍藏版)》请在冰豆网上搜索。
微机原理汇编实验
姓名:
学号:
实验题1:
将制定数据区的数据以十六进制数形式显示到屏幕上,并调用DOS功能显示提示信息。
程序代码:
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
DATASEGMENTUSE16
MES1DB'Showaashex:
',0AH,0DH,'$'
SDDB'a'
DATAENDS
CODESEGMENTUSE16
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETMES1;showmessage
MOVAH,09H
INT21H
MOVSI,OFFSETSD
MOVAL,DS:
[SI]
ANDAL,0F0H低四位置零
MOVCL,4
SHRAL,CL右移四位最高位补零,取高四位
CMPAL,0AH
JBC2有进位转移时,当AL小于10时转移
ADDAL,07H;将高4位A到F加37H,转换成对应的ASCCII码
C2:
ADDAL,30H
MOVDL,AL
MOVAH,02H显示高位
INT21H
MOVAL,DS:
[SI]
ANDAL,0FH高4位置零
CMPAL,0AH
JBC3
ADDAL,07H
C3:
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
WAIT1:
MOVAH,1;通过循环写入16次写入
INT16H
JZWAIT1
MOVAX,4C00H;gobacktodos
INT21H
CODEENDS
ENDSTART
实验题2:
将数据段中一个字符串,传送到附加数据段;并将附加数据段中的目标字符串输出到屏幕。
实验要求:
要求尽可能的给执行语句加上注释。
程序代码:
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS定义堆栈
DDATASEGMENT定义数据段字符串
MSRDB'HELLO,WORLD!
$'
LENEQU$-MSR
DDATAENDS
EXDASEGMENT定义附加段字符串
MSDDBLENDUP(?
)
EXDAENDS
CODESEGMENT定义代码段
ASSUMECS:
CODE,DS:
DDATA,ES:
EXDA设置段寄存器指向一个段
START:
MOVAX,DDATA
MOVDS,AX初始化DS,使DS指向当前数据段
MOVAX,EXDA
MOVES,AX初始化ES,使其指向当前附加段
MOVSI,OFFSETMSR把MSR偏移地址给SI
MOVDI,OFFSETMSD把MSD偏移地址给DI
MOVCX,LEN把数据段的长度给CX
MOVBX,0BX置0
NEXT:
MOVAL,MSR[BX]把数据段首字符给AL
MOVES:
MSD[BX],ALAL传给附加段首个字符
INCBX使BX的值加一
LOOPNEXTCX减一,如果CX不为零继续回到NEXT执行把下一个数据字符段的字符给下一个附加段
PUSHES把传入的字符压栈
POPDS弹出DS
MOVDX,OFFSETMSD将此时附加段的偏移地址给DX
MOVAH,99号子功能,在标准输出设备显示器上显示一个字符串
INT21H
WAIT1:
MOVAH,11号子功能,读取键盘字符并显示
INT16H中断,检查键盘输入
JZWAIT1如果为零转移到WAIT1执行
MOVAX,4C00H
INT21H
CODEENDS代码段结束
ENDSTART结束
实验题3:
计算X+Y=Z,并将Z输出到屏幕中。
假设:
X=001565A0H,Y=0021B79EH,运行以下汇编程序。
实验要求:
简要解释子程序SHWORD和子程序SHOW的作用。
程序代码:
STACK1SEGMENTSTACK定义堆栈段
DW256DUP(?
)
STACK1ENDS
DATASEGMENT定义数据段
MES1DB'Theresultis:
$'变量定义
XLDW65A0HX的低16位
XHDW0015HX的高16位
YLDW0B79EH
YHDW0021H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX初始化DS,使其指向数据段
MOVDX,OFFSETMES1DX指向字符串
MOVAH,09H9号子功能,在标准输出设备显示器上显示一个字符串
INT21H
MOVAX,XLX的低位给AX
ADDAX,YLX与Y的低位相加
MOVBX,AX把相加的结果放到BX中
MOVAX,XHX的高位给AX
ADCAX,YH带低位的进位的X与Y高位相加
PUSHBX把低位相加的结果压栈
CALLSHWORD;调用子程,显示高四位相加的结果
POPBX
MOVAX,BX低四位相加的结果给AX
CALLSHWORD显示低四位相加的结果
WAIT1:
MOVAH,1
INT16H
JZWAIT1
MOVAX,4C00H
INT21H
SHWORDPROCNEAR作为一个子程序来分步显示
MOVBL,AH
CALLSHOW;显示高位
MOVBL,AL
CALLSHOW显示低位
RET
ENDP
SHOWPROCNEAR显示功能
PUSHAX
PUSHDX
MOVAL,BL
ANDAL,0F0H取高四位
SHRAL,4
CMPAL,0AH
JBC2
ADDAL,07H
C2:
ADDAL,30H
MOVDL,AL用十六进制数显示高位
MOVAH,02H
INT21H
MOVAL,BL
ANDAL,0FH
CMPAL,0AH
JBC3
ADDAL,07H
C3:
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
POPDX
POPAX
RET
ENDP
CODEENDS
ENDSTART
实验题4:
分支程序设计实验.从一个无符号的字节序列中,找出其最大值放在BH中,找出其最小值放在BL中。
并将BH和BL的值输出到屏幕上。
实验要求:
简单画出程序的流程图或简单文字描述程序的解题思想。
程序代码:
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
DDATASEGMENT
MES1DB'Theleastnumberis:
$'
MES2DB0AH,0DH,'Thelargestnumberis:
$'
NUMBDB0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9H
DDATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DDATA
START:
MOVAX,DDATA
MOVDS,AX
MOVSI,OFFSETNUMB
MOVCX,0008H循环次数
JCXZA4;(CX)=0,则转移
MOVBH,[SI]
MOVBL,BH
A1:
LODSB;此指令相当于:
AL=DS:
[SI],SI=SI+1
CMPAL,BH
JBEA2小于等于转移
MOVBH,AL
JMPA3
A2:
CMPAL,BL
JAEA3大于等于转移
MOVBL,AL
A3:
LOOPA1将CX减一,如果不为零重复传送
A4:
MOVDX,OFFSETMES1;showmes1
MOVAH,09H
INT21H
MOVAL,BL
ANDAL,0F0H
SHRAL,4
CMPAL,0AH
JBC2
ADDAL,07H
C2:
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
MOVAL,BL
ANDAL,0FH
CMPAL,0AH
JBC3
ADDAL,07H
C3:
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
MOVDX,OFFSETMES2
MOVAH,09H
INT21H
MOVAL,BH
ANDAL,0F0H
MOVCL,4
SHRAL,CL
CMPAL,0AH
JBC22
ADDAL,07H
C22:
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
MOVAL,BH
ANDAL,0FH
CMPAL,0AH
JBC33
ADDAL,07H
C33:
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
WAIT1:
MOVAH,1
INT16H
JZWAIT1
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
基本思路:
先取首数据放到BH,BL当中,通过AL把剩下的数据一一取遍,分别与BH,BL比较,如果大于BH就把大的数给BH从而保证了BH为最大值。
如果小于BL就把小的数给BL从而保证了BL中的数为最小值。
然后显示输出相应的最大值与最小值。
流程图:
实验题5:
循环程序设计实验。
在数据区中定义了若干个带符号数。
统计出其中负数的个数。
实验要求:
改变数据区中的数据和数据的个数,反复验证程序的正确性。
程序代码:
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
DDATASEGMENT
NUMBDB12H,88H,82H,89H,33H,90H,01H,10H,0BDH,01H
MES1DB'Thenumberofnegativeis:
$'
DDATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DDATA
START:
MOVAX,DDATA
MOVDS,AX
MOVDI,OFFSETNUMB
XORBH,BH
MOVCX,10
A1:
MOVAL,[DI]
TESTAL,80H
JEA2
INCBL
A2:
INCDI
LOOPA1
MOVDX,OFFSETMES1;showmes
MOVAH,09H
INT21H
MOVAL,BL
ANDAL,0F0H
SHRAL,4
CMPAL,0AH
JBC2
ADDAL,07H
C2:
ADDAL,30H
MOVDL,AL;showcharacter
MOVAH,02H
INT21H
MOVAL,BL
ANDAL,0FH
CMPAL,0AH
JBC3
ADDAL,07H
C3:
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
WAIT1:
MOVAH,1
INT16H
JZWAIT1
MOVAX,4C00H;gobacktodos
INT21H
CODEENDS
ENDSTART
验证多次,正确。
作业12题:
DATASSEGMENT;数据段
S1DB25DUP('12FDSHGA'),'$'
S2DB50DUP(?
),'$'
DATASENDS
CODESSEGMENT;代码段
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS;初始化
MOVDS,AX
MOVSI,OFFSETS1
MOVDI,OFFSETS2
MOVCX,50
LOP:
MOVAL,[SI]
MOV[DI],AL
INCSI
INCDI
DECCX
JNZLOP
LEADX,S2
MOVAH,09H
INT21H
MOVAX,4C00H;退出程序
INT21H
CODESENDS
ENDSTART
运行结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 汇编 实验