当前位置:文档之家› 《计算机硬件技术基础》实验答案程序

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

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

程序流程图略。

参考源程序:DATASEGMENTNUM1 DD 2A8B7654H NUM2 DW 5ABCH NUM3 DW ? NUM4 DW ?DATAENDSCODESEGMENTASSUME DS:DATA, CS:CODESTART: MOV AX,DATA;数据段寄存器初始化MOV DS,AXMOV AX, WORD PTR NUM1 MOV DX, WORD PTR NUM1+2 DIV NUM2 MOV NUM3,AX MOV NUM4,DX MOV AH,4CH ;正常返回DOS 系统INT 21HCODEENDS END START(2)编写一个拆字程序。

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

程序流程图略。

参考源程序:DATA SEGMENTARY DB 2AH,?,?DATA ENDSCODESEGMENTASSUME DS:DATA, CS:CODESTART: MOV AX,DATAMOV DS,AXMOV SI,OFFSET ARY ;取ARY 的偏移地址 MOV AL,[SI];取16进制数至ALMOV BL,ALAND AL,0F0H ;取16进制数的高四位,即X1SHR AL,4MOV [SI+1],AL ;存0X1MOV AL,BLAND AL,0FH ;取16进制数的低四位,即X2MOV [SI+2],AL ;存0X2MOV AH,4CHINT 21HCODE ENDSEND START实验二:分支程序设计实验(1)编写一个字符比较程序,比较3 个无符号字节数A,B,C 的大小,并根据比较结果对变量K 赋值:如果3 个数不相等,则K=0;如果3 个数中有两个相等,则K=1;如果3 个数都相等,则K=2。

程序流程图略。

参考源程序:DATA SEGMENT ;定义待比较数A、B、C,比较结果KA DB 20HB DB 20HC DB 20HK DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AL,ACMP AL,B ;对A、B进行比较,不相等则转到COMP2JNE COMP2 ;相等则比较A、CCMP AL,CJNE K1 ;A、C不相等则K=1JMP K2 ;A、C相等则K=2COMP2: MOV BL,BCMP BL,CJE K1 ;对B、C进行比较,相等则K=1CMP AL,CJE K1 ;对A、C进行比较,相等则K=1K0: MOV K,0JMP EXITK1: MOV K,1JMP EXITK2: MOV K,2EXIT: MOV AH,4CHINT 21HCODE ENDSEND START(2)编写一个能实现下列表达式的程序:⎧N = ⎨A + B A ≤B设A,B,C 为小于128 的正整数。

⎩A −B +C程序流程图略。

参考源程序:DATA SEGMENTA > BA DB 22H ;定义A、B、C、NB DB 10HC DB 01HN DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AL, ACMP AL, BJG CALCUL ;A 小于或等于B 则N=A+BADD AL,BJMP EXITCALCUL: SUB AL, BADC AL, CEXIT: MOV N, ALMOV AH,4CHINT 21HCODE ENDSEND START实验三循环程序设计实验(1)将字符串STRN(以“$”结尾)中的每一个字符均加上偶校验位,并统计有多少个字符因含有奇数个“1”而加上了校验位。

统计结果存于N单元中。

程序流程图略。

参考源程序:DA TA SEGMENTSTRN DB 'What$' ;任意定义一个字串,以“$”结尾COUNT EQU $-STRNN DB ?BUF DB COUNT DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX, DATAMOV DS, AXMOV AX, DATAMOV ES, AXLEA SI, STRNLEA DI, BUFMOV CX, COUNTMOV AL, 0LP1: MOV BL, [SI] ;逐个取字符进行判断AND BL, BL ;自己和自己做与运算JP NEXT;根据PF 标志位的变化进行跳转INC ALOR BL, 80HNEXT: MOV [DI], BLINC SIINC DILOOP LP1MOV N, ALMOV AH, 4CHINT 21HCODE ENDSEND START(2)在FIRST 开始的一片连续的数据区中存放着100 个数据,编写一个程序,统计第1个数据‘0’之前的数据个数。

程序流程图略。

参考源程序:DA TA SEGMENTFIRST DB 10H,24H,34H, 73H,20H,44H,03H,36H,41H ;任取9 个数做演示COUNT EQU $-FIRSTNUM DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DL, 0 ;计数值初始为0MOV CX,COUNTMOV BX, OFFSET FIRSTLP1: MOV AL, [BX] ;每次取一个数,与0 比较CMP AL, 00HJNE NEXTJMP EXIT ;找到0 则退出NEXT: INC DL ;没找到0 则计数值加1 INC BXLOOP LP1EXIT: MOV NUM, DLMOV AH, 4CHINT 21HCODE ENDSEND START实验四:子程序设计实验将BUF开始的10个单元中两位十六进制数转换成ASCII码,并在屏幕上显示出来。

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

程序流程图略。

参考源程序:(1)实现方法一:远过程调用DA TA SEGMENTBUF DB 10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2HCOUNT EQU $-BUF ;定义任意长度的一段BUFDA TA ENDSSTACK1 SEGMENT STACKDB 100 DUP(?) ;设置足够深度的栈区STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATAMOV DS,AXMOV SI,OFFSET BUFMOV CX,COUNTAGAIN: MOV AL,[SI] ;逐个取数MOV BL,ALSHR AL,4AND AL,0FH ;先对高字节部分转换(寄存器AL 传参)CALL FAR PTR HEXASC ;调用子程序MOV DL,ALMOV AH,02H ;显示高字节部分对应的字符INT 21HMOV AL,BLAND AL,0FH ;再对低字节部分转换(寄存器AL 传参)CALL FAR PTR HEXASC ;调用子程序MOV DL,ALMOV AH,02H ;显示低字节部分对应的字符INT 21HMOV DL,20HMOV AH,02H ;显示空格INT 21HINC SILOOP AGAINMOV AH,4CHINT 21HCODE ENDSCODEB SEGMENTASSUME CS:CODEBHEXASC PROC FARCMP AL,09H ;判断是不是数字JA HEXATOF ;是字母则转到HEXATOFADD AL,30H ;是数字则对应到数字的ASCII 码JMP ENDHEXHEXATOF:ADD AL,37H ;是字母则对应到字母的ASCII 码ENDHEX: RETHEXASC E NDPCODEB ENDSEND START(2)实现方法二:近过程调用DA TA SEGMENTBUF DB 10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2HCOUNT EQU $-BUF ;定义任意长度的一段BUFDA TA ENDSSTACK1 SEGMENT STACKDB 100 DUP(?) ;设置足够深度的栈区STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATAMOV DS,AXMOV SI,OFFSET BUFMOV CX,COUNTAGAIN: MOV AL,[SI] ;逐个取数MOV BL,ALSHR AL,4AND AL,0FH ;先对高字节部分做转换CALL HEXASC.MOV DL,AL ;显示高字节部分对应的字符MOV AH,02HINT 21HMOV AL,BLAND AL,0FH ;再对低字节部分做转换CALL HEXASCMOV DL,AL ;显示低字节部分对应的字符MOV AH,02HINT 21HMOV DL,20H ;显示空格MOV AH,02HINT 21HINC SI ;继续循环或退出LOOP AGAINMOV AH,4CHINT 21HHEXASC PROC NEARCMP AL,09HJA HEXATOFADD AL,30HJMP ENDHEXHEXATOF:ADD AL,37HENDHEX: RETHEXASC ENDPCODE ENDSEND START.实验五:DOS 中断调用实验(1)如果从键盘上依次输入的是一个数字和一个字母,则输出“RIGHT”标记后结束程序,否则输出标记“ERROR”后转向原出错处重做。

试编程实现该功能。

程序流程图略。

参考源程序:DA TA SEGMENTMSG DB 0AH,0DH,'RIGHT',0AH,0DH,'$'WRN DB 0AH,0DH,'ERROR',0AH,0DH,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX,DATAMOV DS,AXAGAIN: MOV AH,01H ;等待用户输入1 个字符并显示INT 21HCMP AL,39HJA EMSGCMP AL,30HJB EMSG ;判断输入是否是数字,不是则报错MOV AH,01H ;等待用户输入1 个字符并显示INT 21HCMP AL,'A'JB EMSGCMP AL,'Z' ;判断输入是否是大写字母,不是则继续JB EXIT ;判断是不是小写字母CMP AL,'a'JB EMSGCMP AL,'z'JB EXIT ;不是字母则报错,是字母则转到EXITEMSG: LEA DX,WRNMOV AH,09HINT 21HJMP AGAINEXIT: MOV DX,OFFSET MSGMOV AH,09H ;显示“RIGHT”并退出INT 21HMOV AH,4CH.INT 21HCODE ENDSEND START(2)编写一程序分类统计字符个数:即接收键入的一串字符(字符个数不超过50个,该字符串用回车作为结束),并按数字、字母和其它字符分类计数,然后将结果存入digit、letter 和other 3个存储单元中,并显示结果。

相关主题