资源描述
综合版—程序设计 欢迎使用KNKJ2012DXZY系统
《微机原理及接口技术》学科复习综合版—程序设计
1、通过键盘输入一串不长于100个字符的字符串,以回车键为结束符,统计该字符串中的小写字母数存放于CX寄存器中
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
MAIN PROC FAR
MOV CX,6400H
NEXT: MOV AH,1
INT 21H
CMP AL,0DH
JE EXIT
CMP AL,‘a’
JB NEXT1
CMP AL,‘z’
JA NEXT1
INC CL
NEXT1: DEC CH
JNZ NEXT
EXIT: MOV CH,0
MOV AH,4CH
INT 21H
MAIN ENDP
CSEG ENDS
END MAIN
2、统计从01000H内存单元开始的100个字(WORD)型带符号数中的正数、负数和零的字个数。
设正数个数存放于BX中,负数个数存放于DI中,零的个数存放于DX中
MOV AX,0100H JZ ZERO
MOV DS,AX JL NEGAT
MOV BX,0 INC BX
MOV DX,0 JMP NEXT1
MOV DI,0 ZERO: INC DX
MOV SI,0 JMP NEXT1
MOV CX,100 NEGAT: INC DI
NEXT: MOV AX,[SI] NEXT1: ADD SI,2
CMP AX,0 LOOP NEXT
3、将LM开始到LM+100的内存区中的一组数据按与原来相反的次序送到PM到PM+100的内存区。
MOV SI,OFFSET LM
MOV DI,OFFSET PM+100
MOV CX,101
LOP: MOV AL,[SI]
MOV [DI],AL
INC SI
DEC DI
LOOP LOP
4、从ARY开始存放着100个字型带符号数,寻找其中的最大值,结果放在MAX单元。
MOV CX,100 LOP1: ADD SI,2
MOV AX,[SI] LOOP LOP
LOP: CMP AX,[SI] MOV [MAX],AX
JGE LOP1
5、实现两个十六位二进制数的加法。要求加数放在FIRST开始单元,被加数放在SECOND开始单元,和数放在SUM单元。
MOV AX,FIRST
ADD AX,SECOND
MOV SUM,AX
6、编写一汇编语言程序,实现将数据段中首地址为1000H(偏移地址)的100个连续存放的字节型数据搬移至该段内首地址为1050H(偏移地址)的连续的100个内存单元中
MOV AX,DS MOV DI,1050H+99
MOV ES,AX STD
MOV CX,100 REP MOVSW
MOV SI,1000H+99
7、编写一个完整的8086汇编语言程序,从附加段中首地址为ADR1(变量名)连续存放的100个字型无符号整数中找出最大数,并将此数及其偏移地址分别放入变量MAX和MAXM中
DATA SEGMENT
ADR1 DW 100 DUP(?)
MAX DW ?
MAXM DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
MAIN PROC FAR
MOV AX,DATA
MOV ES,AX
MOV SI,OFFSET ADR1
MOV CX,100
MOV ES:[MAXM],SI
MOV AX,ES:[SI]
LOP1: CMP AX,ES:[SI]
JAE LOP3
MOV AX,ES:[SI]
MOV ES:[MAXM],SI
LOP3: ADD SI,2
LOOP LOP1
MOV ES:[MAX],AX
MOV AH,4CH
INT 21H
MAIN ENDP
CODE ENDS
END MAIN
8、有一个首地址为ARRAY的N个字的数组,请编程序使该数组中的数按照从大到小的次序排序。(采用冒泡排序算法)
DATA SEGMENT
ARRAY DW A1,A2,A3,…,AN
DATA ENDS
PROG SEGMENT
ASSUME DS:PROG,DS:DATA
MAIN PROC FAR
START: PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV CX,N
DEC CX
LOOP1: MOV DI,CX
MOV BX,0
LOOP2: MOV AX,ARRAY[BX]
CMP AX,ARRAY[BX+2]
JGE CONTINUE
XCHG AX,ARRAY[BX+2]
MOV ARRAY[BX],AX
CONTINUE:ADD BX,2
LOOP LOOP2
MOV CX,DI
LOOP LOOP1
RET
MAIN ENDP
PROG ENDS
END START
9、已知在N到N+I的存储区中有一组ASCII码字符串(共I+1个),试编写一个汇编语言程序,将此字符传送到NI到NI+I单元中,并使字符串的顺序与原来的顺序相反。
MOV AX,DS MOVE:CLD
MOV ES,AX LODSB
LEA SI,N STD
LEA DL,NI STOSB
ADD DI,I LOOP MOVE
MOV CX,I+1 HLT
10、现有一个不超过255个大写英文字母组成的字符串,要求编写一个完整的程序,统计A-Z各字符串出现的次数,并分别存入字符串后的以RESULT为首地址的26个字节单元中。
DATA SEGMENT NEXT: MOV AL,STRING[SI]
STRING DB'……$' SUB AL,41H
RESULT DB 26 DUP(0) MOV DI,AX
DATA ENDS INC RESULT[DI]
CODE SEGMENT INC SI
ASSUME CS:CODE,DS:DATA LOOP NEXT
START:MOV DX,DATA MOV AH,4CH
MOV DS,DX INT 21H
MOV CX,255 CODE ENDS
MOV AH,0 END START
MOV SI, 0
展开阅读全文