微机原理汇编实验.docx

上传人:b****2 文档编号:16951653 上传时间:2023-07-20 格式:DOCX 页数:15 大小:75.06KB
下载 相关 举报
微机原理汇编实验.docx_第1页
第1页 / 共15页
微机原理汇编实验.docx_第2页
第2页 / 共15页
微机原理汇编实验.docx_第3页
第3页 / 共15页
微机原理汇编实验.docx_第4页
第4页 / 共15页
微机原理汇编实验.docx_第5页
第5页 / 共15页
微机原理汇编实验.docx_第6页
第6页 / 共15页
微机原理汇编实验.docx_第7页
第7页 / 共15页
微机原理汇编实验.docx_第8页
第8页 / 共15页
微机原理汇编实验.docx_第9页
第9页 / 共15页
微机原理汇编实验.docx_第10页
第10页 / 共15页
微机原理汇编实验.docx_第11页
第11页 / 共15页
微机原理汇编实验.docx_第12页
第12页 / 共15页
微机原理汇编实验.docx_第13页
第13页 / 共15页
微机原理汇编实验.docx_第14页
第14页 / 共15页
微机原理汇编实验.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

微机原理汇编实验.docx

《微机原理汇编实验.docx》由会员分享,可在线阅读,更多相关《微机原理汇编实验.docx(15页珍藏版)》请在冰点文库上搜索。

微机原理汇编实验.docx

微机原理汇编实验

姓名:

学号:

实验题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

 

运行结果:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2