微机原理后.docx
《微机原理后.docx》由会员分享,可在线阅读,更多相关《微机原理后.docx(14页珍藏版)》请在冰豆网上搜索。
微机原理后
2012微机原理14道题目
1.在XXX单元中存放一个数x(0≤x≤15),请用查表法的方法计算x的平方,并将结果保存到YYY单元中。
课本197页2.已知数组由100个字组成,存放在数据段中以偏移地址为ARY开始的存中,试编写程序求出这个数组元数之和,结果存放在的数据段中以偏移地址为SUM开始的存中。
课本184页
3.试编写一程序,将数据段中偏移地址为BUF1开始的100个数据传送到偏移地址为BUF2开始的连续存单元中去。
STACKSEGMENTSTACK'STACK'
DW100DUP(?
)
STACKENDS
DATASEGMENT
BUF1DB100DUP(?
)
BUF2DB100DUP(?
)
SRCADRDW?
DSTADRDW?
LENDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK,ES:
DATA
MAINPROC
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
LEAAX,BUF1
MOVSRCADR,AX
MOVLEN,100
CALLMVDAT
MOVAX,4CH
INT21H
MAINENDP
MVDATPROC
MOVSI,SRCADR
MOVDI,DSTADR
MOVCX,LEN
CLD
CMPSI,DI
JADONE
STD
ADDSI,CX
DECSI
ADDDI,CX
DECDI
DONE:
REPMOVSB
RET
MVDATENDP
CODEENDS
ENDSTART
4.编写一个程序,实现SUM=a1+a2+……+a20。
已知a1~a20依次存放在以BUF为首址的数据区,每个数据占两个字节,SUM也是两个字节。
DATASEGMENT
DATDW2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
SUMDW?
DATAENDS
CODESEGMENT
MAINPROCFAR
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,0
MOVSUM,AX
MOVSI,OFFSETDAT
MOVCX,20
LP1:
ADDAX,[SI]
INCSI
INCSI
LOOPLP1
MOVSUM,AX
MOVAH,4CH
INT21H
MAINENDP
CODEENDS
ENDSTART
5.试编写一程序,将AX中的各位去反,然后统计出AX中“0”的个数,将结果存到CL中。
CODESEGMENT
MAINPROCFAR
ASSUMECS:
CODE
START:
MOVAX,0E001H
MOVDL,0
MOVCL,16
NOTAX
RETEST:
ANDAX,AX
JSSKIP
INCDL
SKIP:
SHLAX,1
LOOPRETEST
MOVCL,DL
EXIT:
MOVAH,4CH
INT21H
MAINENDP
CODEENDS
ENDSTART
6.在存数据段存储器中,从ADDR单元开始存有一个字符串,它以“$”符号作为结束标志,试编写程序统计该字符串的长度($字符不计入长度),并把长度值存入LETH字单元。
DATASEGMENT
ADDRDB'LIUBIN$'
LETHDW?
DATAENDS
STACKSEGMENTPARASTACK'STACK'
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVBX,OFFSETADDR
MOVCX,0
LP:
MOVAL,[BX]
CMPAL,'$'
JEDONE
INCCX
INCBX
JMPLP
DONE:
MOVADDR,CX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
7.试编写一程序,要现将ASCII码表示的两位十进制数转换为一字节二进制数,其中高地址单元存放十位数。
课本200页
8.编程在显示器上输出你自己的汉语拼音的子程序。
课本155页
.9将数据0-63置入到存中以BUF为首址的连续64个字节单元中。
课本198页
10.试编写一程序,把数组STRING中存放的20个8位二进制数分成正数数组和负数数组,并统计正数、负数和零的个数,结果分别存放到P、M、Z三个单元。
DATASEGMENT
STRINGDW2DUP(3045H,0FD34H,0D3DH,9899H,0,3DF2H,0,0FFDEH,93FDH,0DE6CH)
PDW20DUP(?
)
MDW20DUP(?
)
ZDW20DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
XORBP,BP
LEASI,P;正数
LEADI,M;负数
LEABP,Z;零
PUSHSI
PUSHDI
PUSHBP
LEABX,STRING
MOVCX,20
LL:
MOVAX,[BX]
PUSHAX
ADDAX,AX
JZL1
POPAX
PUSHAX
SALAX,1
JCL2
POPAX
MOV[SI],AX
ADDSI,2
JMPLA
LA:
ADDBX,2
LOOPLL
XORCX,CX
MOVCX,2
POPAX
MOVDX,BP
SUBDX,AX
SHRDX,CL
MOV[BP],DX
POPAX
MOVDX,DI
SUBDX,AX
SHRDX,CL
MOV[DI],DX
POPAX
MOVDX,SI
SUBDX,AX
SHRDX,CL
MOV[SI],DX
MOVAH,4CH
INT21H
L1:
POPAX
MOV[BP],AX
ADDBP,2
JMPLA
L2:
POPAX
MOV[DI],AX
ADDDI,2
JMPLA
CODENDS
ENDSTART
11、试编写一程序,完成10个一位十进制数累加,累加结果以分离式BCD码形式存放于AH(高位)、AL(低位)寄存器中。
DATASSEGMENT
TABDB41H,42H,43H,44H,45H,46H
BINDB'11110'
BUFDB4DUP(?
)
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
LEABX,TAB
LEASI,BIN
LEADI,BUF
MOVCX,4
LP1:
MOVAX,[SI+2]
PUSHCX
XORCX,CX
MOVCL,8
RORAX,CL
SUBAX,3030H
MOVDX,[SI]
RORDX,CL
SUBDX,3030H
SHLAH,1
ADDAH,AL
MOVCL,2
SHLDL,CL
MOVCL,3
SHLDH,CL
ADCDH,DL
ADCAH,DH
CMPAH,0AH
LP2
SUBAH,0AH
MOVAL,AH
XLAT
LP3:
MOV[DI],AL
ADDDI,1
ADDSI,4
POPCX
LOOPLP1
MOVAH,4CH
INT21H
LP2:
ADDAH,30H
MOVAL,AH
JMPLP3
CODESENDS
ENDSTART12、试编写一程序,将2个字节二进制数,变换成用ASCII码表示的四位十六进制数(用四字节表示)。
DATASSEGMENT
TABDB41H,42H,43H,44H,45H,46H
BINDB'11110'
BUFDB4DUP(?
)
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
LEABX,TAB
LEASI,BIN
LEADI,BUF
MOVCX,4
LP1:
MOVAX,[SI+2]
PUSHCX
XORCX,CX
MOVCL,8
RORAX,CL
SUBAX,3030H
MOVDX,[SI]
RORDX,CL
SUBDX,3030H
SHLAH,1
ADDAH,AL
MOVCL,2
SHLDL,CL
MOVCL,3
SHLDH,CL
ADCDH,DL
ADCAH,DH
CMPAH,0AH
LP2
SUBAH,0AH
MOVAL,AH
XLAT
LP3:
MOV[DI],AL
ADDDI,1
ADDSI,4
POPCX
LOOPLP1
MOVAH,4CH
INT21H
LP2:
ADDAH,30H
MOVAL,AH
JMPLP3
CODESENDS
ENDSTART
13.试用串操作指令SCAS,在10个字节的数据块BLOCK中,搜索与2EH相等的数,若找到,则将该数地址存放于ADR中,并在SIGNAL单元中做标记0FFH;否则,SIGNAL单元中为00H。
DATASEGMENT
BLOCKDBNDUP(0)
SINGALDB00H
ADRDB00H
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE,ES:
DATA
START:
MOVDIOFFSETBLOCK
CLD
MOVCX,10
MOVSL,IEH
REPNISCASB
JNZAAA
MOVSIGNAL,0FFH
MOVADR,IEH
AAA:
MOVSIGNAL,00H
CODEENDS
ENDSTART
14.编写一程序,计算100个16位正整数之和,如果和不超过16位值的围,则保存其和到SUM,如果超过则显示“Overflow”。
DATSEGMENT
DAT1DW25DUP(2D4EH,5611H,1234H,7891H)
BUFDW?
STR1DB'overflow!
!
',0DH,0AH,'$'
DATENDS
CODSEGMENT
ASSUMECS:
COD,DS:
DAT
START:
MOVAX,DAT
MOVDS,AX
MOVSI,OFFSETDAT1
MOVBX,OFFSETBUF
MOVCX,100
XORAX,AX
L1:
ADDAX,[SI]
JCDISP
LOOPL1
MOV[BX],AX
MOVAH,4CH
INT21H
DISPPROCNEAR
MOVDX,OFFSETSTR1
MOVAH,9
INT21H
MOVAH,4CH
INT21H
DISPENDP
CODENDS
ENDSTART