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

2018-11-27 10:09

INCDX

OTHER:INCSI

LOOPNEXT

CODEENDS

ENDBEGIN

4.12统计数据块中正数与负数的个数,并将正数与负数分别送到两个缓冲区。 【答】参考程序:

BLOCKDB-1,-3,5,6,-2,0,20,10 PLUS_DDB8DUP(?);正数缓冲区 MINUS_DDB8DUP(?);负数缓冲区 PLUSDB0 MINUSDB0

MOVSI,OFFSETBLOCK MOVDI,OFFSETPLUS_D MOVBX,OFFSETMINUS_D MOVCX,8;数据个数送CX

GOON:LODSB;AL←[SI]

TESTAX,80H

JNZJMIUS;为负数,转 INCPLUS;正数个数加一 STOSB;[DI]←AL,传正数 JMPAGAIN

JMIUS:INCMINUS;负数个数加一

XCHGBX,DI

STOSB;送负数到缓冲区 XCHGBX,DI

AGAIN:DECCX

JNZGOON

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码。) 【答】参考程序: DATASEGMENT ADRDB4DUP(?) DATAENDS

CODESEGMENT MAINPROCFAR

ASSUMECS:CODE,DS:DATA

START:MOVAX,7EC3H;假设ax中存放7ec3h

LEASI,ADR MOVDL,4

AGAIN:

MOVBX,AX ANDBX,000FH ADDBL,30H CMPBL,'9' JGADUST JMPSTORE

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

INCSI MOVCL,4 ROLAX,CL DECDL JNZAGAIN

MAINENDP CODEENDS

ENDSTART

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

BINEQU5555H;假设二进制数为5555H DATASEGMENT

ADRDB4DUP(?)

DATAENDS

STACKSEGMENT

STADB100DUP(?)

TOPEQULENGTHSTA

STACKENDS CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

START:MOVAX,DATA

MOVDS,AX

MOVAX,STACK MOVSS,AX MOVAX,TOP MOVSP,AX MOVAX,BIN LEABX,ADR

MOVCX,10000D CALLBINTODEC MOVCX,1000D CALLBINTODEC MOVCX,100D CALLBINTODEC MOVCX,10D

CALLBINTODEC MOVCX,01D

CALLBINTODEC

MOVAX,04CH;返回DOS INT21H

MAINENDP

;十进制转二进制,完成一位运算,十进制存于ax中,结果存于bx所指向的地址中 BINTODECPROCNEAR

MOVDX,0 DIVCX

ADDAL,30H MOV[BX],AL MOVAX,DX INCBX RET

BINTODECENDP

CODEENDS

ENDSTART

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

MOVAL,1001110B ORAL,AL JNPNEXT MOVAL,0 JMPDONE

NEXT:MOVAL,1 DONE:MOVAH,04CH

INT21H

JIAOYANENDP

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

SEARCHPROCFAR

MOVDI,2000H MOVCX,100 MOVAL,24H CLD

REPNZSCASB JNZSTOP DECDI

MOVBX,DI MOVAL,[DI]

STOP:RET SEARCHENDP

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

MOVAL,24H MOVSI,2170H MOVDI,1000H MOVCX,100H CLD

DO:REPMOVSB

MOVDI,1000H MOVCX,100H CLD

REPNZSCASB DECDI

MOV[DI],20H INCDI CMPCX,0 JNZDO HLT

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

DATA1DB0,1,2,3,4,5,6,7,8,9; DATAENDS

STACKSEGMENT

STADB20DUP(?)

TOPEQULENGTHSTA STACKENDS CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

START:MOVAX,DATA

MOVDS,AX

MOVAX,STACK MOVSS,AX MOVAX,TOP MOVSP,AX MOVCX,10 MOVAL,0

LEABX,DATA1

AGAIN:CMPAL,[BX]

JGENEXT;大于等于转移

MOVAL,[BX]

NEXT:INCBX

LOOPAGAIN MOVAH,4CH INT21H

CODEENDS

ENDSTART

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

TABDB'8095554'

N=$-TAB

OKDB0DH,0AH,'OK!$' DATAENDS

STACKSEGMENT STADB20DUP(?)

TOPEQULENGTHSTA STACENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

STAR:MOVAX,DATA

MOVDS,AX;初始化数据段 MOVAX,STACK MOVSS,AX MOVAX,TOP MOVSP,AX CALLARRAY

DO:MOVAH,4CH

INT21H;返回DOS

ARRAYPROCNEAR

PUSHAX PUSHBX PUSHCX PUSHDX

MOVDL,N-1;置外循环次数 MOVDH,1;设有交换标志 XORBX,BX

UPPER:ORDH,DH;

JZDISP;无交换,已排好序,退出 MOVDH,0;无交换 MOVCX,N-1

SUBCX,BX;CX=CX-I内循环次数 MOVSI,0;指向表首

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

INCSI;指向下个字符

CMPAL,TAB[SI];比较表中相邻字符 JBEDON;小于

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

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

INCBX;一次内循环完成,加一 DECDL;外循环次数减一 CMPDL,0

JNZUPPER;外循环次数非零,继续

DISP:MOVDX,OFFSETTAB

MOVAH,09H

INT21H;显示排好序的字符

POPDX POPCX POPBX POPAX RET

ARRAYENDP CODEENDS

ENDSTAR

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

【答】参考程序: DATASEGMENT

TABLEDB7,5,9,1,3,6,8,0,2,4;密码表 BUFFDB10DUP(?),'$'存放转换数字的缓冲区 DATAENDS

STACKSEGMENT

STADB20DUP(?)

TOPEQULENGTHSTA STACKENDS CODESEGMENT

MOVAX,STACK MOVSS,AX

MOVDI,OFFSETBUFF LEABX,TABLE MOVCX,0DH

RE1:MOVAH,1;从键盘输入

INT21H

CMPAL,0DH JZDONE SUBAL,30H XLAT

ADDAL,30H MOV[DI],AL INCDI LOOPRE1

DONE:MOVDX,OFFSETBUFF

MOVAH,09H INT21H

MOVAH,4CH INT21H

CODEENDS

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

【答】算法:先将输入的十六进制数保存到BX中,BX中的数范围在+32767~-32768之间,先检查BX 中的符号位,以决定输出“+”还是“-”;若是负数,应先求补,得到原码后即可与正数作统一处理。 转换方法为将被转换的二进制数先除;以10000,商即为万位数,再将余数除以1000,商为千位数,依 此类推,求出百、十位数,剩的为个位数。最后,将各个数加上30H,即成为对应字符。 DATASEGMENT

OUT_ASC_SUMdb6dup(?),'$' DATAENDS

STACKSEGMENT

STADB20DUP(?)

TOPEQULENGTHSTA STACKENDS CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK START:MOVAX,DATA

MOVDS,AX


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

下一篇:《国际私法(本科必修)》2014年7月期末试题及答案

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

马上注册会员

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