《计算机硬件技术基础》实验程序.docx

上传人:b****4 文档编号:3134293 上传时间:2022-11-17 格式:DOCX 页数:31 大小:37.39KB
下载 相关 举报
《计算机硬件技术基础》实验程序.docx_第1页
第1页 / 共31页
《计算机硬件技术基础》实验程序.docx_第2页
第2页 / 共31页
《计算机硬件技术基础》实验程序.docx_第3页
第3页 / 共31页
《计算机硬件技术基础》实验程序.docx_第4页
第4页 / 共31页
《计算机硬件技术基础》实验程序.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

《计算机硬件技术基础》实验程序.docx

《《计算机硬件技术基础》实验程序.docx》由会员分享,可在线阅读,更多相关《《计算机硬件技术基础》实验程序.docx(31页珍藏版)》请在冰豆网上搜索。

《计算机硬件技术基础》实验程序.docx

《计算机硬件技术基础》实验程序

实验一:

简单程序设计实验

 

(1)编写一个32位无符号数除法的程序,要求将存放在NUM1中的32位无符号数与存放在NUM2中的16位无符号数相除,结果存放在NUM3和NUM4中。

 

程序流程图略。

参考源程序:

DATASEGMENT

NUM1DD2A8B7654HNUM2DW5ABCHNUM3DW?

NUM4DW?

DATAENDS

 

CODESEGMENT

ASSUMEDS:

DATA,CS:

CODE

START:

MOVAX,DATA;数据段寄存器初始化

MOVDS,AX

MOVAX,WORDPTRNUM1

MOVDX,WORDPTRNUM1+2

DIVNUM2

MOVNUM3,AXMOVNUM4,DX

MOVAH,4CH;正常返回DOS系统

INT21HCODEENDS

ENDSTART

 

(2)编写一个拆字程序。

要求将存放在ARY单元的2位十六进制数X1X2拆为X1和X2两部分,并以0X1和0X2的形式分别存入ARY+1和ARY+2单元中。

 

程序流程图略。

参考源程序:

DATASEGMENTARYDB2AH,?

?

DATAENDS

 

CODESEGMENT

ASSUMEDS:

DATA,CS:

CODESTART:

MOVAX,DATA

MOVDS,AX

MOVSI,OFFSETARY;取ARY的偏移地址

MOVAL,[SI];取16进制数至AL

MOVBL,AL

ANDAL,0F0H;取16进制数的高四位,即X1

SHRAL,4

MOV[SI+1],AL;存0X1

MOVAL,BL

ANDAL,0FH;取16进制数的低四位,即X2

MOV[SI+2],AL;存0X2

MOVAH,4CHINT21H

CODEENDS

ENDSTART

实验二:

分支程序设计实验

 

(1)编写一个字符比较程序,比较3个无符号字节数A,B,C的大小,并根据比较结果对变量K赋值:

如果3个数不相等,则K=0;

如果3个数中有两个相等,则K=1;如果3个数都相等,则K=2。

 

程序流程图略。

参考源程序:

DATASEGMENT;定义待比较数A、B、C,比较结果K

ADB20HBDB20HCDB20HKDB?

DATAENDS

 

CODESEGMENT

ASSUMECS:

CODE,DS:

DATASTART:

MOVAX,DATA

MOVDS,AXMOVAL,A

CMPAL,B;对A、B进行比较,不相等则转到COMP2

JNECOMP2;相等则比较A、C

 

CMPAL,C

JNEK1;A、C不相等则K=1

JMPK2;A、C相等则K=2

 

COMP2:

MOVBL,BCMPBL,C

JEK1;对B、C进行比较,相等则K=1

 

CMPAL,C

JEK1;对A、C进行比较,相等则K=1

 

K0:

MOVK,0

JMPEXITK1:

MOVK,1

JMPEXITK2:

MOVK,2

 

EXIT:

MOVAH,4CH

INT21H

 

CODEENDS

ENDSTART

(2)编写一个能实现下列表达式的程序:

N=⎨

A+B

A≤B

设A,B,C为小于128的正整数。

⎩A−B+C

程序流程图略。

参考源程序:

DATASEGMENT

A>B

ADB22H;定义A、B、C、NBDB10H

CDB01HNDB?

DATAENDS

 

CODESEGMENT

ASSUMECS:

CODE,DS:

DATASTART:

MOVAX,DATA

MOVDS,AX

 

MOVAL,ACMPAL,B

JGCALCUL;A小于或等于B则N=A+B

ADDAL,BJMPEXIT

 

CALCUL:

SUBAL,BADCAL,C

 

EXIT:

MOVN,ALMOVAH,4CHINT21H

CODEENDS

ENDSTART

实验三循环程序设计实验

 

(1)将字符串STRN(以“$”结尾)中的每一个字符均加上偶校验位,并统计有多少个字符因含有奇数个“1”而加上了校验位。

统计结果存于N单元中。

程序流程图略。

参考源程序:

DATASEGMENT

STRNDB'What$';任意定义一个字串,以“$”结尾

COUNTEQU$-STRNNDB?

BUFDBCOUNTDUP(?

)DATAENDS

 

CODESEGMENT

ASSUMECS:

CODE,DS:

DATASTART:

MOVAX,DATA

MOVDS,AXMOVAX,DATAMOVES,AX

 

LEASI,STRNLEADI,BUF

MOVCX,COUNTMOVAL,0

LP1:

MOVBL,[SI];逐个取字符进行判断

ANDBL,BL;自己和自己做与运算

JPNEXT

;根据PF标志位的变化进行跳转

INCAL

ORBL,80HNEXT:

MOV[DI],BL

INCSIINCDILOOPLP1

MOVN,ALMOVAH,4CH

INT21H

CODEENDS

ENDSTART

(2)在FIRST开始的一片连续的数据区中存放着100个数据,编写一个程序,统计第1

个数据‘0’之前的数据个数。

程序流程图略。

参考源程序:

DATASEGMENT

FIRSTDB10H,24H,34H,73H,20H,44H,03H,36H,41H;任取9个数做演示

COUNTEQU$-FIRSTNUMDB?

DATAENDS

 

CODESEGMENT

ASSUMECS:

CODE,DS:

DATASTART:

MOVAX,DATA

MOVDS,AX

MOVDL,0;计数值初始为0

MOVCX,COUNT

MOVBX,OFFSETFIRST

LP1:

MOVAL,[BX];每次取一个数,与0比较

CMPAL,00HJNENEXT

JMPEXIT;找到0则退出

NEXT:

INCDL;没找到0则计数值加1

INCBXLOOPLP1

 

EXIT:

MOVNUM,DLMOVAH,4CHINT21H

CODEENDS

ENDSTART

实验四:

子程序设计实验

 

将BUF开始的10个单元中两位十六进制数转换成ASCII码,并在屏幕上显示出来。

要求码型转换通过子程序HEXASC实现,参数传送采用寄存器传送方式。

程序流程图略。

参考源程序:

(1)实现方法一:

远过程调用DATASEGMENT

BUFDB10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2H

COUNTEQU$-BUF;定义任意长度的一段BUFDATAENDS

 

STACK1SEGMENTSTACK

DB100DUP(?

);设置足够深度的栈区

STACK1ENDS

 

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1

START:

MOVAX,DATAMOVDS,AX

 

MOVSI,OFFSETBUFMOVCX,COUNT

AGAIN:

MOVAL,[SI];逐个取数

MOVBL,AL

 

SHRAL,4

ANDAL,0FH;先对高字节部分转换(寄存器AL传参)

CALLFARPTRHEXASC;调用子程序

MOVDL,AL

MOVAH,02H;显示高字节部分对应的字符

INT21H

 

MOVAL,BL

ANDAL,0FH;再对低字节部分转换(寄存器AL传参)

CALLFARPTRHEXASC;调用子程序

MOVDL,AL

MOVAH,02H;显示低字节部分对应的字符

INT21H

 

MOVDL,20H

MOVAH,02H;显示空格

INT21H

INCSI

LOOPAGAIN

 

MOVAH,4CHINT21H

CODEENDS

 

CODEBSEGMENTASSUMECS:

CODEB

HEXASCPROCFAR

CMPAL,09H;判断是不是数字

JAHEXATOF;是字母则转到HEXATOF

ADDAL,30H;是数字则对应到数字的ASCII码

JMPENDHEX

HEXATOF:

ADDAL,37H;是字母则对应到字母的ASCII码

ENDHEX:

RETHEXASCENDPCODEBENDS

ENDSTART

(2)实现方法二:

近过程调用

DATASEGMENT

BUFDB10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2H

COUNTEQU$-BUF;定义任意长度的一段BUFDATAENDS

 

STACK1SEGMENTSTACK

DB100DUP(?

);设置足够深度的栈区

STACK1ENDS

 

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1

START:

MOVAX,DATAMOVDS,AX

 

MOVSI,OFFSETBUFMOVCX,COUNT

AGAIN:

MOVAL,[SI];逐个取数

MOVBL,AL

 

SHRAL,4

ANDAL,0FH;先对高字节部分做转换

CALLHEXASC

MOVDL,AL;显示高字节部分对应的字符

MOVAH,02HINT21H

 

MOVAL,BL

ANDAL,0FH;再对低字节部分做转换

CALLHEXASC

MOVDL,AL;显示低字节部分对应的字符

MOVAH,02HINT21H

MOVDL,20H;显示空格

MOVAH,02HINT21H

INCSI;继续循环或退出

LOOPAGAIN

 

MOVAH,4CHINT21H

 

HEXASCPROCNEARCMPAL,09H

JAHEXATOFADDAL,30HJMPENDHEX

HEXATOF:

ADDAL,37HENDHEX:

RET

HEXASCENDP

 

CODEENDS

ENDSTART

实验五:

DOS中断调用实验

 

(1)如果从键盘上依次输入的是一个数字和一个字母,则输出“RIGHT”标记后结束程序,否则输出标记“ERROR”后转向原出错处重做。

试编程实现该功能。

程序流程图略。

参考源程序:

DATASEGMENT

MSGDB0AH,0DH,'RIGHT',0AH,0DH,'$'WRNDB0AH,0DH,'ERROR',0AH,0DH,'$'

DATA

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

当前位置:首页 > 初中教育 > 中考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1