微机原理整理后.docx
《微机原理整理后.docx》由会员分享,可在线阅读,更多相关《微机原理整理后.docx(4页珍藏版)》请在冰点文库上搜索。
微机原理整理后
微机原理整理后
2012微机原理14道题目 1.在XXX单元中存放一个数x(0≤x≤15),请用查表法的方法计算x的平方,并将结果保存到YYY单元中。
课本197页 2.已知数组100个字组成,存放在数据段中以偏移地址为ARY开始的内存中,试编写程序求出这个数组元数之和,结果存放在的数据段中以偏移地址为SUM开始的内存中。
课本184页 3.试编写一程序,将数据段中偏移地址为BUF1开始的100个数据传送到偏移地址为BUF2开始的连续内存单元中去。
STACKSEGMENTSTACK’STACK’ DW 100DUP(?
) STACKENDS DATASEGMENT BUF1DB 100DUP(?
) BUF2DB 100DUP(?
) SRCADRDW ?
DSTADRDW ?
LENDW ?
DATAENDS CODESEGMENT ASSUME CS:
CODE,DS:
DATA,SS:
STACK,ES:
DATA MAINPROC START:
MOV AX,DATA MOV DS,AX MOV ES,AX LEA AX,BUF1 MOV SRCADR,AX MOV LEN,100 CALL MVDAT MOV AX,4CH INT 21H MAINENDP MVDATPROC MOV SI,SRCADR MOV DI,DSTADR MOV CX,LEN CLD CMP SI,DI JA DONE STD ADD SI,CX DEC SI ADD DI,CX DEC DI DONE:
REP MOVSB RET MVDATENDP CODEENDS END START 4.编写一个程序,实现SUM=a1+a2+?
?
+a20。
已知a1~a20依次存放在以BUF为首址的数据区,每个数据占两个字节,SUM也是两个字节。
DATASEGMENT DATDW 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 SUMDW ?
DATAENDS CODESEGMENT MAINPROC FAR ASSUME CS:
CODE,DS:
DATA START:
MOV AX,DATA MOV DS,AX MOV AX,0 MOV SUM,AX MOV SI,OFFSETDAT MOV CX,20 LP1:
ADD AX,[SI] INC SI INC SI LOOP LP1 MOV SUM,AX MOV AH,4CH INT 21H MAINENDP CODEENDS END START 5.试编写一程序,将AX中的各位去反,然后统计出AX中“0”的个数,将结果存到CL中。
CODESEGMENT MAINPROC FAR ASSUME CS:
CODE START:
MOV AX,0E001H MOV DL,0 MOV CL,16 NOT AX RETEST:
AND AX,AX JS SKIP INC DL SKIP:
SHL AX,1 LOOP RETEST MOV CL,DL EXIT:
MOV AH,4CH INT 21H MAINENDP CODEENDS END START 6.在内存数据段存储器中,从ADDR单元开始存有一个字符串,它以“$”符号作为结束标志,试编写程序统计该字符串的长度,并把长度值存入LETH字单元。
DATASEGMENT ADDRDB ’LIUBIN$’ LETHDW ?
DATAENDS STACKSEGMENTPARASTACK’STACK’ DB 100DUP(?
) STACKENDS CODESEGMENT ASSUME CS:
CODE,DS:
DATA,SS:
STACK START:
MOV AX,DATA MOV DS,AX MOV BX,OFFSETADDR MOV CX,0 LP:
MOV AL,[BX] CMP AL,’$’ JE DONE INC CX INC BX JMP LP DONE:
MOV ADDR,CX MOV AH,4CH INT 21H CODEENDS END START 7.试编写一程序,要求实现将ASCII码表示的两位十进制数转换为一字节二进制数,其中高地址单元存放十位数。
课本200页 8.编程在显示器上输出你自己的汉语拼音姓名的子程序。
课本155页 .9将数据0-63置入到内存中以BUF为首址的连续64个字节单元中。
课本198页 10.试编写一程序,把数组STRING中存放的20个8位二进制数分成正数数组和负数数组,并统计正数、负数和零的个数,结果分别存放到P、M、Z三个单元。
DATASEGMENT STRING DW 2 DUP(3045H,0FD34H,0D3DH,9899H,0,3DF2H,0,0FFDEH,93FDH,0DE6CH) PDW 20DUP(?
) MDW 20DUP(?
) ZDW 20DUP(?
) DATAENDS CODESEGMENT ASSUME CS:
CODE,DS:
DATA START:
MOV AX,DATA MOV DS,AX XOR BP,BP LEA SI,P ;正数 LEA DI,M ;负数 LEA BP,Z ;零 PUSH SI PUSH DI PUSH BP LEA BX,STRING MOV CX,20 LL:
MOV AX,[BX] PUSH AX ADD AX,AX JZ L1 POP AX PUSH AX SAL AX,1 JC L2 POP AX MOV [SI],AX ADD SI,2 JMP LA LA:
ADD BX,2 LOOP LL XOR MOV POP MOV SUB SHR MOV POP MOV SUB SHR MOV POP MOV SUB SHR MOV MOV INT L1:
POP MOV ADD JMP L2:
POP MOV ADD CX,CXCX,2AXDX,BPDX,AXDX,CL[BP],DXAXDX,DIDX,AXDX,CL[DI],DXAXDX,SIDX,AXDX,CL[SI],DXAH,4CH21HAX[BP],AXBP,2LAAX[DI],AXDI,2
JMP LA CODENDS END START 11、试编写一程序,完成10个一位十进制数累加,累加结果以分离式BCD码形式存放于AH、AL寄存器中。
DATASSEGMENT TABDB 41H,42H,43H,44H,45H,46H BINDB ’1101101110011110’ BUFDB 4DUP(?
) DATASENDS CODESSEGMENT ASSUME CS:
CODES,DS:
DATAS START:
MOV AX,DATAS MOV DS,AX LEA BX,TAB LEA SI,BIN LEA DI,BUF MOV CX,4 LP1:
MOV AX,[SI+2] PUSH CX XOR CX,CX MOV CL,8 ROR AX,CL SUB AX,3030H MOV DX,[SI] ROR DX,CL SUB DX,3030H SHL AH,1 ADD AH,AL MOV CL,2 SHL DL,CL MOV CL,3 SHL DH,CL ADC DH,DL ADC AH,DH CMP AH,0AH JB LP2 SUB AH,0AH MOV AL,AH XLAT LP3:
MOV [DI],AL ADD DI,1 ADD SI,4 POP CX LOOP LP1 MOV AH,4CH INT 21H LP2:
ADD AH,30H MOV AL,AH JMP LP3 CODESENDS END START 12、试编写一程序,将2个字节二进制数,变换成用ASCII码表示的四位十六进制数。
DATASSEGMENT TABDB 41H,42H,43H,44H,45H,46H BINDB ’1101101110011110’ BUFDB 4DUP(?
) DATASENDS CODESSEGMENT ASSUME CS:
CODES,DS:
DATAS START:
MOV AX,DATAS MOV DS,AX LEA BX,TAB LEA SI,BIN LEA DI,BUF MOV CX,4 LP1:
MOV AX,[SI+2] PUSH CX XOR CX,CX MOV ROR SUB MOV ROR SUB SHL ADD MOV SHL MOV SHL ADC ADC CMP JB SUB MOV XLAT LP3:
MOV ADD ADD POP LOOP MOV INT LP2:
CL,8AX,CLAX,3030HDX,[SI]DX,CLDX,3030HAH,1AH,ALCL,2DL,CLCL,3DH,CLDH,DLAH,DHAH,0AHLP2AH,0AHAL,AH[DI],ALDI,1SI,4CXLP1AH,4CH21H ADD AH,30H MOV AL,AH JMP LP3 CODESENDS END START 13.试用串操作指令SCAS,在10个字节的数据块BLOCK中,搜索与2EH相等的数,若找到,则将该数地址存放于ADR中,并在SIGNAL单元中做标记0FFH;否则,SIGNAL单元中为00H。
DATASEGMENT BLOCKDB NDUP(0) SINGALDB 00H ADRDB 00H DATAENDS CODESEGMENT ASSUME DS:
DATA,CS:
CODE,ES:
DATA START:
MOV DIOFFSETBLOCK CLD MOV CX,10 MOV SL,IEH REPNISCASB JNZ AAA MOV SIGNAL,0FFH MOV ADR,IEH AAA:
MOV SIGNAL,00H CODEENDS END START 14.编写一程序,计算100个16位正整数之和,如果和不超过16位值的范围,则保存其和到SUM,如果超过则显示“Overflow”。
DATSEGMENT DAT1DW 25DUP(2D4EH,5611H,1234H,7891H) BUFDW ?
STR1DB ’overflow!
!
’,0DH,0AH,’$’ DATENDS CODSEGMENT ASSUME CS:
COD,DS:
DAT START:
MOV AX,DAT MOV DS,AX MOV SI,OFFSETDAT1 MOV BX,OFFSETBUF MOV CX,100 XOR AX,AX L1:
ADD JC LOOP MOV MOV INT DISPPROC MOV MOV INT MOV INT DISPENDP CODENDS END AX,[SI]DISPL1 [BX],AXAH,4CH21HNEAR DX,OFFSETSTR1AH,921H AH,4CH21HSTART