微机原理与接口技术课后答案 黄玉清版(4)

2019-01-18 19:31

MOV BX,OFFSET MINUS_D MOV CX, N ;数据个数送CX GOON: MOV AL,[SI] TEST AL, 80H JNZ JMIUS ;为负数,转 INC PLUS ;正数个数加一 MOV [DI],AL ;传正数 INC DI

JMP AGAIN JMIUS: INC MINUS ;负数个数加一 MOV [BX],AL INC BX AGAIN: INC SI DEC CX JNZ GOON

4.13 编写一个子程序将AX中的十六进制数,转换成ASCII码, 存于ADR开始的四个单元中。

提示:1)、AX中的数从左到右,转换成ASCII码,用循环左移ROL和AND指令,把提出的一个十六进制数置BL中;

2)、0 ~ 9 的ASCII码:30 ~ 39H,A ~ F 的ASCII码:41H ~ 46H。

( 先把每个数加30H,判断是否为数字0 ~ 9?若是A ~ F,再加07H,得字母的ASCII码。) 【答】 参考程序: DATA SEGMENT

ADR DB 5 DUP(?) DATA ENDS

CODE SEGMENT MAIN PROC FAR

ASSUME CS:CODE,DS:DATA START: MOV AX,7EC3H ;假设ax中存放7ec3h

LEA SI,ADR MOV DL,4

AGAIN:

MOV BX,AX AND BX,000FH ADD BL,30H CMP BL,'9' JG ADUST JMP STORE

ADUST: ADD BL ,07H STORE: MOV [SI],BL

INC SI MOV CL,4 ROL AX,CL DEC DL JNZ AGAIN

MAIN ENDP CODE ENDS

END START

4.14 编写一个子程序将AX中的2进制数,转换成10进制ASCII码, 存于ADR开始的五个单元中。 【答】算法分析:

(1)一个16位2进制数,其值最大为65535。采用除10取余数方法,即可得到各个位。

A)十进制数a5a4a3a2a1,除以10,余数a1为个位;商a5a4a3a2 B)a5a4a3a2再除以10,余数a2为十位; C)以此类推,得到百位、千位、万位。

(2)再将其加上30H则得到ASCII码,以便输出显示。

(3)若数据为负数,用0减去该数,可得绝对值,再将符号位记录下来即可。 参考程序:

DATA SEGMENT

BIN DW -1988 ;带符号二进制数

ADR DB 6 DUP(0),'$' ;十进制数以ASCII码存储

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

TRAN PROC FAR

MOV AX,DATA MOV DS,AX MOV AX,BIN LEA DI,ADR

CALL BINASCII ;十六位二进制数转换为十进制ascii码 MOV AH,4CH INT 21H ;返回DOS

TRAN ENDP

;子程序BINASCII功能:将16位二进制数转换为ASCII码,存于ADR开始的连续6个单元,并显示 ;入口参数:AX=待转换的数, 预定义一个缓存区ADR,7个字节,最末字节为‘$’字符。 ;出口参数:DI=转换好的ASCII码首地址,显示该十进制数据 BINASCII PROC

PUSH BX PUSH CX PUSH DX TEST AX,8000H ;判断数据的符号 JNS PLUS

MINUS: MOV BYTE PTR[DI],'-' ;将符号存储

NEG AX ;如是负数,取相反数去掉符号位 JMP GO

PLUS: MOV BYTE PTR[DI],'+' ;将符号码存储 GO: ADD DI,5 ;DI指向个位

MOV CX,5 MOV BX,10

LP: MOV DX,0

DIV BX ;算法为a/10 ,余数为一个低位十进制数 ADD DL,30H ;转换为ASCII码 MOV BYTE PTR[DI],DL ;从个位开始存储 DEC DI LOOP LP MOV DX,DI MOV AH,09H INT 21H ;显示 POP DX POP CX POP BX RET

BINASCII ENDP CODE ENDS

END TRAN

4.15 编写一个子程序,对AL中的数据进行偶校验,并将经过校验的结果放回AL中。 【答】参考程序:

JIAOYAN PROC FAR

MOV AL,1001110B OR AL, AL JNP NEXT MOV AL,0 JMP DONE

NEXT: MOV AL,1

DONE: MOV AH,04CH

INT 21H

JIAOYAN ENDP

4.16 从2000H单元开始的区域,存放100个字节的字符串,其中有几个$符号(ASCII 码为24),找出第一个$符号,送AL中,地址送BX。 【答】参考程序:

SEARCH PROC FAR

MOV DI,2000H MOV CX,100 MOV AL,24H CLD

REPNZ SCASB JNZ STOP DEC DI MOV BX,DI MOV AL,[DI]

STOP: RET SEARCH ENDP

4.17 用串操作指令实现:先将100H个数从2170H单元处搬到1000H单元处,然后从中检索等于AL中字符的单元,并将此单元换成空格字符。 【答】参考程序:

MOV AL,24H MOV SI,2170H MOV DI,1000H MOV CX,100H CLD

DO: REP MOVSB

MOV DI,1000H MOV CX,100H CLD

REPNZ SCASB DEC DI MOV [DI],20H INC DI CMP CX,0 JNZ DO

HLT

4.18 从60H个元素中寻找一个最大的值,并放到AL中,假设这60个元素放在BUF开始的单元中。 【答】参考程序: DATA SEGMENT

BUF DB 0,1,2,3,4,5,6,7,8,9 ; DATA ENDS

STACK SEGMENT

STA DB 20 DUP (?) TOP EQU $- STA STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START: MOV AX,DATA

MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV CX,10 MOV AL,0 LEA BX,BUF

AGAIN: CMP AL,[BX]

JGE NEXT ;大于等于转移 MOV AL,[BX]

NEXT : INC BX

LOOP AGAIN MOV AH,4CH INT 21H

CODE ENDS

END START

4.19 排序程序设计: 把表中元素按值的大小升序排列。要求显示排序前和排序后的数据。 【答】参考程序: DATA SEGMENT

TAB DB '8095554'

N=$-TAB

OK DB 0DH,0AH,'OK!$' DATA ENDS

STACK SEGMENT STA DB 20 DUP(?) TOP EQU $-STA STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

STAR: MOV AX,DATA

MOV DS,AX ;初始化数据段 MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX CALL ARRAY

DO: MOV AH,4CH

INT 21H ;返回DOS

ARRAY PROC NEAR

PUSH AX PUSH BX PUSH CX PUSH DX MOV DL,N-1 ;置外循环次数 MOV DH,1 ;设有交换标志 XOR BX, BX

UPPER: OR DH,DH ;

JZ DISP ;无交换,已排好序,退出 MOV DH,0 ;无交换 MOV CX,N-1 SUB CX,BX ;CX=CX-I内循环次数 MOV SI,0 ;指向表首

INNER: MOV AL,TAB[SI] ;字符送AL

INC SI ;指向下个字符 CMP AL,TAB[SI] ;比较表中相邻字符 JBE DON ;小于

XCHG AL,TAB[SI] ;否则交换,大字符下 MOV TAB[SI-1],AL ;小字符上浮 MOV DH,1 ;有交换,DH=1

DON: LOOP INNER ;内循环结束?CX-1

INC BX ;一次内循环完成,加一 DEC DL ;外循环次数减一 CMP DL,0 JNZ UPPER ;外循环次数非零,继续

DISP: MOV DX,OFFSET TAB

MOV AH,09H INT 21H ;显示排好序的字符 POP DX POP CX

POP BX POP AX RET

ARRAY ENDP CODE ENDS

END STAR

4.20 编写一段程序,接收从键盘输入的10个数,输入回车符表示结束,然后将这些数加密后存于BUFF缓冲区中。加密表为:输入数字: 0,1,2,3,4,5,6,7,8,9;密码数字:7,5,9,1,3,6,8,0,2,4。

【答】参考程序: DATA SEGMENT

TABLE DB 7,5,9,1,3,6,8,0,2,4;密码表 BUFF DB 10 DUP(?) ,'$'存放转换数字的缓冲区 DATA ENDS

STACK SEGMENT

STA DB 20 DUP(?)

TOP EQU LENGTH STA STACK ENDS

CODE SEGMENT

MOV AX,STACK MOV SS,AX

MOV DI , OFFSET BUFF LEA BX , TABLE MOV CX,0DH

INPUT: MOV AH , 1 ;从键盘输入

INT 21H CMP AL,0DH ;0DH为回车符 JZ DONE SUB AL,30H XLAT ADD AL,30H MOV [DI] , AL INC DI LOOP INPUT

DONE: MOV DX , OFFSET BUFF

MOV AH , 09H INT 21H MOV AH,4CH INT 21H

CODE ENDS

4.21 编程序从键盘接收一个4位16进制数,转换为10进制数后,送显示。

【答】算法:(1)先将输入的十六进制数的ASCII码,处理成16进制数保存到BX中,BX中的数范围在+32767~-32768之间;(2)先检查BX中的符号位,以决定输出“+”还是“-”;若是负数,应先求补,得到原码后即可与正数作统一处理。转换方法可以调用题4.14中的BINASCII子程序。 DATA SEGMENT

ADR DB 6 DUP(0),'$' ;十进制数以ASCII码存储 DATA ENDS

STACK SEGMENT

STA DB 20 DUP(0) TOP EQU $- STA STACK ENDS

CODE SEGMENT

ASSUME CS :CODE,DS:DATA,SS:STACK main proc far START: MOV AX,DATA

MOV DS,AX MOV AX,STACK MOV SS,AX


微机原理与接口技术课后答案 黄玉清版(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:湘教版美术六上《丰盛的大餐》教案设计

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

马上注册会员

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