自考《微型计算机原理及应用》课和习题答案(3)

2018-12-20 10:39

自考

MOV AL,[SI] MOV BL,[SI] LP1: INC SI

CMP AL,[SI] JB NEXT1 CMP BL,[SI] JA NEXT2 JMP NEXT NEXT1: MOV AL,[SI] JMP NEXT NEXT2: MOV BL,[SI] NEXT: LOOP LP1

MOV MAX,AL MOV MIN,BL MOV AX,4CH INT 21H CODE ENDS

END START

4-10 将有符号数组中的正数、负数分别存储,并统计其正数和负数的个数。

【解答】DATA SEGMENT

ARRAY DW -3,6,-89,99,-50,11,3,34,68,127,-128,1,4,6,100,-100,-2,-5,0,3 N EQU ($-ARRAY)/2 PLUS DW N DUP(?) NEGA DW N DUP(?) NP DB 0 NN DB 0 DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA BX,ARRAY LEA SI,PLUS LEA DI,NEGA MOV CX,N LP: MOV AX,[BX] CMP AX,0 JGE LP1

MOV [DI],AX ADD DI,2 INC NN JMP NEXT LP1: MOV [SI],AX ADD SI,2 INC NP NEXT: INC BX INC BX LOOP LP

MOV AX,4CH INT 21H CODE ENDS

END START

4-11 编写程序使该字符串能符合偶校验的要求。

【解答】DATA SEGMENT

STRING DB 'ABCDEFGHIJKLMNOPQ','$' N EQU $-STRING DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX

第11页【本课后解答题共32页】

自考

LEA BX,STRING MOV CX,N LP: MOV AL,[BX] AND AL,AL JP NEXT OR AL,80H MOV [BX],AL NEXT: INC BX LOOP LP

MOV AX,4CH INT 21H CODE ENDS

END START

4-12 编写程序把CHAR、CHAR1和CHAR2中的英文字母字符数据按英文字母次序排列。

【解答】DATA SEGMENT

CHAR DB 'H67JFDF61235--==65KJ8922' CHAR1 DB '8fggYYUF89Aljkj'

CHAR2 DB 'HWOPY65bxnmbcvb??URYT\\#$56@$' N EQU $-CHAR BUFFER DB N DUP(?) DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA SI,CHAR LEA DI,BUFFER MOV BX,0 MOV CX,N LP: MOV AL,[SI] CMP AL,'A' JB LP1 CMP AL,'Z' JA LP2

LP3: MOV [DI],AL INC DI INC BX JMP LP1 LP2: CMP AL,'a' JB LP1 CMP AL,'z' JA LP1 JMP LP3 LP1: INC SI LOOP LP

MOV CX,BX DEC CX

LOOP1: MOV DI,CX MOV SI,0

LOOP2: MOV AL,BUFFER[SI] CMP AL,BUFFER[SI+1] JBE COTINUE

XCHG AL,BUFFER[SI+1] MOV BUFFER[SI],AL COTINUE:INC SI

LOOP LOOP2 MOV CX,DI LOOP LOOP1 MOV AX,4CH INT 21H CODE ENDS

END START

第12页【本课后解答题共32页】

自考

4-13 BUF1和BUF2都有一个4字节无符号数据,存放次序为低位在前,编写程序进行求和,并将结果存入SUM中,需计及可能产生的进位。

【解答】DATA SEGMENT

BUF1 DD 8899AABBH BUF2 DD 90123456H SUM DW 3 DUP(?) DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV BX,0

MOV AX,WORD PTR BUF1 ADD AX,WORD PTR BUF2 MOV SUM,AX

MOV AX,WORD PTR BUF1+2 ADC AX,WORD PTR BUF2+2 MOV SUM+2,AX ADC BX,0

MOV SUM+4,BX MOV AX,4CH INT 21H CODE ENDS

END START

4-14 如上题,但数据为压缩BCD制数。

【解答】DATA SEGMENT

BUF1 DD 89457812H BUF2 DD 90123456H SUM DB 5 DUP(?) DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV BX,0 LEA SI,BUF1 LEA DI,BUF2

XOR AH,AH ;AH清零备处理最高位进位时用,同时初始化清零CF。 MOV CX,4

NEXT: MOV AL,BYTE PTR [SI] ADC AL,BYTE PTR [DI] DAA

MOV SUM[BX],AL INC BX INC SI INC DI

LOOP NEXT ADC AH,0

MOV SUM[BX],AH MOV AX,4CH INT 21H CODE ENDS

END START

4-15 DATA数组中有100个有符号字节数组,编写程序求出它们的平均值存入AVE单元中。

【解答】DATA SEGMENT

ARRAY DB 10,-89,111,126,-100,-1,90,67,2,110,90 DUP(8) AVE DB ? ;平均值 YUSHU DB ? ;余数 DATA ENDS

第13页【本课后解答题共32页】

自考

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA SI,ARRAY MOV AX,0 MOV CX,100 NEXT: MOV BL,[SI] MOV BH,0 XCHG AX,BX CBW

XCHG AX,BX ADD AX,BX INC SI

LOOP NEXT MOV BL,100 IDIV BL

MOV AVE,AL MOV YUSHU,AH MOV AX,4CH INT 21H CODE ENDS

END START

4-16 编写程序实现两个32位无符号数相乘的计算,原始数据和结果乘积都在数据段中,可自行定义。 【程序分析】8086/8088指令系统中只有16×16位乘法指令。因此32位乘法的算法是:将32位乘法拆开成4次的16位乘法,再将4个部分积按下图所示次序相加,得到64位乘积。设被乘数分为高16位为A,低16位为B,乘数分为高16位为C,低16位为D。

【 32位×32位乘法操作示意图】 31 16 15 0 被乘数 A B C D 乘数 ×)

31 0

B× D 部分积1

47 16

A× D 部分积2

B× C 部分积3

63 32 A× C 累加) 部分积4 63 0 AB× CD 乘积

【解答】

DATA SEGMENT

MULNUM1 DW 2B6AH, 04D8H ;32位被乘数B,A MULNUM2 DW 0C298H,2147H ;32位乘数D,C MRST DW 4 DUP(?) ;64位乘积 DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX

LEA SI,MULNUM1 ;SI指向MULNUM1(被乘数) LEA DI,MULNUM2 ;DI指向MULNUM2(乘数) LEA BX,MRST ;BX指向MRST(乘积)

第14页【本课后解答题共32页】

自考

MOV AX,[SI] ;AX?B MUL WORD PTR [DI] ;B×D

MOV [BX+2],DX ;保存部分积1(高16位) MOV [BX],AX ;保存部分积1(低16位) MOV AX,[SI+2] ;AX?A MUL WORD PTR [DI] ;A×D

ADD [BX+2],AX ;部分积1(高16位)和部分积2(低16位)相加 ADC DX,0 ;进位加入部分积2 高位 MOV [BX+4],DX ;部分积2高位保存 MOV AX,[SI] ;AX?B MUL WORD PTR [DI+2] ;B×C

ADD [BX+2],AX ;部分积3低位加入部分积之和 ADC [BX+4],DX ;部分积3高位加入部分积之和 PUSHF ;保存进位 MOV AX,[SI+2] ;AX?A MUL WORD PTR [DI+2] ;A×C POPF ;弹出进位

ADC DX,0 ;先将部分积3求和时的进位加到部分积4的高位上 ADD [BX+4],AX ;部分积4低位加入部分积之和 ADC DX,0 ;进位加入部分积4高位

MOV [BX+6],DX ;部分积4高位加入部分积之和 MOV AX,4CH INT 21H CODE ENDS

END START

4-17 编写程序把PACKED中的16位压缩BCD数(共占8字节)变成非压缩BCD数存入UNPACKED中。

【解答】DATA SEGMENT

PACKED DB 32H,45H,78H,33H,99H,58H,90H,21H;16位压缩BCD数 UNPACKED DB 16 DUP(?) ;存放16位非压缩BCD数的缓冲区 DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA SI,PACKED LEA DI,UNPACKED MOV CX,8 NEXT: MOV AL,[SI] MOV BL,AL PUSH CX MOV CL,4 SHR BL,CL MOV [DI],BL AND AL,0FH MOV [DI+1],AL INC SI INC DI INC DI POP CX

LOOP NEXT MOV AH,4CH INT 21H CODE ENDS

END START

第15页【本课后解答题共32页】


自考《微型计算机原理及应用》课和习题答案(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中国西乐器制造市场竞争现状及发展战略分析报告2018-2023年(目录

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: