北京理工大学汇编上机试题和代码(修改版)
1. 请任意输入一个字符串,将该串倒序后在屏幕上显示。 DATAS SEGMENT BUF1 DB 0FFH DB ?
DB 0FFH DUP(?)
BUF2 DB 0DH,0AH,0FDH DUP(?) DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS START:
MOV AX,DATAS MOV DS,AX LEA DX,BUF1 MOV AH,0AH INT 21H MOV AX,0
MOV AL,BUF1[1] LEA SI,BUF1[1] ADD SI,AX LEA DI,BUF2[2] MOV CX,0
MOV CL,BUF1[1] L:
MOV AL,[SI] MOV [DI],AL DEC SI INC DI LOOP L
MOV BYTE PTR [DI],'$' LEA DX,BUF2 MOV AH,09H INT 21H
MOV AH,4CH INT 21H CODES ENDS END START
取巧:
DATA SEGMENT
DB 512 DUP('$') ;定义可输入的字符个数 BUF DB '$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX
MOV BX,OFFSET BUF ;指针指向待显示字符串尾部 AGAIN:
MOV AH,01 ;输入字符 INT 21H
CMP AL,0DH ;是回车吗 JE DISP ;是,转显示 DEC BX ;指针减1
MOV [BX],AL ;存入输入的字符 JMP AGAIN ;继续输入
DISP:
MOV DX,BX ;定位待显示字符串首地址 MOV AH,09 INT 21H ;显示
MOV AH,4CH ;DOS返回 INT 21H CODE ENDS END START
2. 请任意输入一个字符串,统计其中空格和A的个数,并将结果显示在屏幕上。
DATA SEGMENT BUF DB 0FFH DB ? DB 0FFH DUP (?) OUTPUT DB 0DH,0AH,' A =000' DB 0DH,0AH,'SPACE=000','$' DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,BUF
MOV AH,0AH INT 21H
LEA SI,BUF[2] MOV CX,0
MOV CL,BUF[1] L:
CMP BYTE PTR[SI],'A' JNE NOTA
CMP OUTPUT[10],'9' JE CAR1
INC OUTPUT[10] JMP NEXT CAR1:
CMP OUTPUT[9],'9' JE CAR2
MOV OUTPUT[10],'0' INC OUTPUT[9] JMP NEXT CAR2:
MOV OUTPUT[10],'0' MOV OUTPUT[9],'0' INC OUTPUT[8] JMP NEXT NOTA:
CMP BYTE PTR[SI],' ' JNE NEXT
CMP OUTPUT[21],'9' JE CSR1
INC OUTPUT[21] JMP NEXT CSR1:
CMP OUTPUT[20],'9' JE CSR2
MOV OUTPUT[21],'0' INC OUTPUT[20] JMP NEXT CSR2:
MOV OUTPUT[21],'0' MOV OUTPUT[20],'0' INC OUTPUT[19] JMP NEXT NEXT: INC SI LOOP L
LEA DX,OUTPUT MOV AH,09H INT 21H MOV AX,4C00H INT 21H CODE ENDS END
3. 请任意输入一个字符串,将其中的空格全部删除,并将结果显示在屏幕上。 DATA SEGMENT BUF1 DB 0FFH DB ? DB 0FFH DUP('?') BUF2 DB 0DH,0AH,0FDH DUP('?') DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,BUF1 MOV AH,0AH INT 21H MOV CX,0 MOV CL,BUF1[1] LEA SI,BUF1[2] LEA DI,BUF2[2] L: CMP BYTE PTR [SI],' ' JE M MOV AL,[SI] MOV [DI],AL INC DI M: INC SI LOOP L MOV BYTE PTR [DI],'$' LEA DX,BUF2 MOV AH,09H INT 21H MOV AX,4C00H INT 21H CODE ENDS
END
4. 请任意输入一个字符串,将其中A换成B,并将结果显示在屏幕上。 DATA SEGMENT BUF DB 0FFH DB ? DB 0FFH DUP('?') DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,BUF MOV AH,0AH INT 21H MOV CX,0 MOV CL,BUF[1] LEA SI,BUF[2] L: CMP BYTE PTR [SI],'A' JNE M MOV BYTE PTR [SI],'B' M: INC SI LOOP L MOV WORD PTR [SI],0D0AH MOV BYTE PTR [SI+2],'$' LEA DX,BUF[2] MOV AH,09H INT 21H MOV AX,4C00H INT 21H CODE ENDS END
5. 请任意输入一个字符串,将其中A换成CC,并将结果显示在屏幕上。 DATA SEGMENT BUF1 DB 0FFH DB ? DB 0FFH DUP('?') BUF2 DB 0DH,0AH,0FDH DUP('?')