一、
1. 请任意输入一个字符串,将该串倒序后在屏幕上显示。
DATAS SEGMENT BUF DB 40 DB ?
DB 40 DUP(0) ACC DB 0 CHAR DB ? DATAS ENDS
STACKS SEGMENT DB 100 DUP(0) STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS START:
MOV AX,DATAS MOV DS,AX
MOV AH,0AH LEA DX,BUF
INT 21H ; 输入字符串
MOV AH,0EH MOV AL,0DH
INT 10H MOV AL,0AH
INT 10H ;回车换行
LEA SI,BUF MOV AL,[SI+1] MOV AH,0 MOV ACC,AL INC SI ADD SI,AX
L1: MOV DL,[SI] MOV AH,02H INT 21H DEC SI DEC ACC CMP ACC,0 JNZ L1
MOV AH,4CH INT 21H CODES ENDS END START
2. 请任意输入一个字符串,统计其中空格和A的个数,并将结果显示在屏幕上。
DATA SEGMENT BUF DB 100 DB ?
DB 100 DUP(?) CHAR DB 0 ACC DB 0 SPACE DB 0 CHARA DB 0 DATA ENDS STACK SEGMENT DB 100 DUP(0) STACK ENDS CODE SEGMENT ASSUME
DS:DATA,CS:CODE
MAIN PROC FAR MOV AX,DATA MOV DS,AX
LEA DX,BUF MOV AH,0AH INT 21H ;输入字符串
MOV AH,02H MOV DL,0DH INT 21H MOV DL,0AH INT 21H
LEA SI,BUF
MOV AL,[SI+1] MOV ACC,AL MOV SI,2
L: CMP BUF[SI],' ' JZ LSPACE CMP BUF[SI],'A' JZ LCHARA INC SI DEC ACC CMP ACC,0 JZ SHOW JMP L LSPACE:
INC SPACE INC SI DEC ACC CMP ACC,0 JZ SHOW JMP L LCHARA: INC CHARA INC SI DEC ACC CMP ACC,0 JZ SHOW JMP L SHOW:
CMP SPACE,0AH JAE SHOWS ADD SPACE,30H MOV DL,SPACE MOV AH,2
INT 21H ;若SPACE小于10个,直接输出个数 SHOW1: MOV AH,0EH
MOV AL,0DH INT 10H MOV AL,0AH INT 10H
CMP CHARA,0AH JAE SHOWA ADD CHARA,30H MOV AH,2 MOV DL,CHARA INT 21H ;若A个数小于10,直接输出个数 JMP EXIT SHOWS:
MOV AL,SPACE MOV AH,0 MOV DL,10 DIV DL ADD AH,30H MOV SPACE,AH ADD AL,30H MOV AH,2 MOV DL,AL INT 21H
MOV DL,SPACE INT 21H JMP SHOW1 SHOWA:
MOV AL,CHARA MOV AH,0 MOV DL,10 DIV DL ADD AH,30H MOV CHARA,AH ADD AL,30H MOV AH,2 MOV DL,AL INT 21H
MOV DL,CHARA INT 21H EXIT:
MOV AH,4CH INT 21H MAIN ENDP CODE ENDS END MAIN
3. 请任意输入一个字符串,将其中的空格全部删除,并将结果显示在屏幕上。
DATA SEGMENT BUF DB 100 DB ?
DB 100 DUP(?) INP DB 'Please input a string:','$' CHAR DB 0 ACC DB 0 DATA ENDS STACK SEGMENT DB 100 DUP(0) STACK ENDS CODE SEGMENT ASSUME
DS:DATA,CS:CODE,ES:STACK START:
MOV AX,DATA
MOV DS,AX ; 赋初值
MOV AH,09H LEA DX,INP
INT 21H ; 提示输入
MOV AH,0AH LEA DX,BUF
INT 21H ; 输入字符串
MOV AH,2 MOV DL,0DH INT 21H MOV DL,0AH
INT 21H ; 回车换行
LEA SI,BUF MOV DL,[SI+1] MOV ACC,DL MOV SI,2 LOP:
MOV DL,BUF[SI] MOV CHAR,DL CMP CHAR,' ' JZ LADD MOV AH,2 MOV DL,CHAR INT 21H ;若不是空格则输出 LADD: INC SI DEC ACC CMP ACC,0
JZ EXIT JMP LOP EXIT:
MOV AH,4CH INT 21H CODE ENDS
END START
4. 请任意输入一个字符串,将其中A换成B,并将结果显示在屏幕上。
DATA SEGMENT
INP DB 'Please input a string:','$' CHAR DB 0 ACC DB 0 BUF DB 50 DB ? DB 50 DUP(0) DATA ENDS STACK SEGMENT DB 100 DUP(0) STACK ENDS CODE SEGMENT ASSUME
CS:CODE,DS:DATA START:
MOV AX,DATA MOV DS,AX
MOV AH,9 LEA DX,INP
INT 21H ;提示输入字符串
MOV AH,0AH LEA DX,BUF INT 21H MOV AH,2 MOV DL,0DH INT 21H MOV DL,0AH INT 21H ;输入字符串
LEA SI,BUF MOV DL,[SI+1] MOV ACC,DL ;记录字符串个数
MOV SI,2 MOV AH,2 LA: MOV DL,BUF[SI]
CMP DL,'A' JZ PUTCC INT 21H LAD:INC SI DEC ACC MOV DH,ACC CMP DH,0 JZ EXIT JMP LA PUTCC: MOV DL,'C' INT 21H INT 21H JMP LAD EXIT:
MOV AH,4CH INT 21H CODE ENDS END START
5. 请任意输入一个字符串,将其中A换成CC,并将结果显示在屏幕上。
DATA SEGMENT
INP DB 'Please input a string:','$' CHAR DB 0 ACC DB 0 BUF DB 50 DB ? DB 50 DUP(0) DATA ENDS STACK SEGMENT ASSUME
CS:CODE,DS:DATA START:
MOV AX,DATA MOV DS,AX
MOV AH,9
LEA DX,INP
INT 21H ;提示输入字符串
MOV AH,0AH LEA DX,BUF INT 21H MOV AH,2 MOV DL,0DH INT 21H MOV DL,0AH INT 21H ;输入字符串
LEA SI,BUF MOV DL,[SI+1] MOV ACC,DL ;记
录字符串个数
MOV SI,2 MOV AH,2 LA: MOV DL,BUF[SI] CMP DL,'A' JZ PUTCC INT 21H LAD:INC SI DEC ACC MOV DH,ACC CMP DH,0 JZ EXIT JMP LA PUTCC: INT 21H INT 21H
JMP LAD EXIT:
MOV AH,4CH
INT 21H CODE ENDS END START
6. 请任意输入一个字符串,将其中大写字母换成小写字母,并将结果显示在屏幕上。
DATA SEGMENT
INP DB 'Please input a string:','$' CHAR DB 0 ACC DB 0 BUF DB 50 DB ? DB 50 DUP(0) DATA ENDS STACK SEGMENT DB 100 DUP(0) STACK ENDS CODE SEGMENT ASSUME
CS:CODE,DS:DATA START:
MOV AX,DATA MOV DS,AX
MOV AH,9 LEA DX,INP
INT 21H ;提示输入字符串
MOV AH,0AH LEA DX,BUF INT 21H MOV AH,2 MOV DL,0DH INT 21H MOV DL,0AH INT 21H ;输入字符串
LEA SI,BUF MOV DL,[SI+1] MOV ACC,DL ;记录字符串个数
MOV SI,2 MOV AH,2 LA: MOV DL,BUF[SI]
CMP DL,'A' JB PUT CMP DL,'Z' JBE PUTCHG PUT:INT 21H JMP LAD PUTCHG: ADD DL,32 INT 21H LAD:INC SI DEC ACC MOV DH,ACC CMP DH,0 JZ EXIT JMP LA EXIT:
MOV AH,4CH INT 21H CODE ENDS END START
7. 请任意输入一个字符串,将其中的英文字母全部删除,并将结果显示在屏幕上。
DATA SEGMENT
INP DB 'Please input a CHAR DB 0 ACC DB 0 BUF DB 50 DB ? DB 50 DUP(0) string:','$'
CS:CODE,DS:DATA START:
MOV AX,DATA MOV DS,AX
MOV AH,9 LEA DX,INP
INT 21H ;提示输入字符串
MOV AH,0AH LEA DX,BUF INT 21H MOV AH,2
MOV DL,0DH INT 21H MOV DL,0AH
INT 21H ;输入字符串
LEA SI,BUF MOV DL,[SI+1]
MOV ACC,DL ;记录字符串个数
MOV SI,2 MOV AH,2 LA: MOV DL,BUF[SI] CMP DL,'A'
DATA ENDS STACK SEGMENT
DB 100 DUP(0) STACK ENDS CODE SEGMENT
ASSUME
JB PUT CMP DL,'Z' JBE LAD CMP DL,'a' JB PUT CMP DL,'z' JBE LAD PUT:
INT 21H JMP LAD LAD:INC SI DEC ACC
MOV DH,ACC CMP DH,0 JZ EXIT JMP LA
EXIT:
MOV AH,4CH INT 21H CODE ENDS END START
第二篇:北理工8086汇编语言考试上机试题及答案(一)
1. 请任意输入一个字符串,将该串倒序后在屏幕上显示。
2. 请任意输入一个字符串,统计其中空格和A的个数,并将结果显示在屏幕上。
3. 请任意输入一个字符串,将其中的空格全部删除,并将结果显示在屏幕上。
4. 请任意输入一个字符串,将其中A换成B,并将结果显示在屏幕上。
5. 请任意输入一个字符串,将其中A换成CC,并将结果显示在屏幕上。
data segment
buf1db 100
db ?
db 100 dup(?)
buf2db 100 dup(?)
buf3db '$'
buf4db 0dh,0ah,'$'
data ends
code segment
assumecs:code,ds:data,es:data
mainproc far
movax,data
movds,ax
moves,ax
mov ah,0ah
lea dx,buf1
int 21h
lea si,buf1
lea bx,buf1+2
mov cl,[si+1]
mov ch,0
movsi,cx
decsi
lea di,buf2
again: mov ax,[bx][si]
mov [di],ax
decsi
inc di
dec cl
jnz again
mov al,buf3
mov [di],al
mov ah,9
lea dx,buf4
int 21h
mov ah,9
lea dx,buf2
int 21h
mov ah,4ch
int 21h
mainendp
code ends
end main
data segment
buf1 db 100
db ?
db 100 dup(?)
buf2 db 0dh,0ah,'$' mem1 db 0
mem2 db 0
data ends
code segment
assumecs:code,ds:data,es:data main proc far
movax,data
movds,ax
moves,ax
mov ah,0ah
lea dx,buf1
int 21h
lea di,buf1+2
lea si,buf1+1
mov cl,[si]
mov ch,0
mov bl,0
mov bh,0
again:mov al,[di] cmp al,41h
jnz next
incbl
jmpdisp
next: cmp al,20h jnzdisp
incbh
disp: inc di
dec cl jnz again
mov ah,9 lea dx,buf2 int 21h moval,bl mov ah,0 callprintf
mov ah,9 lea dx,buf2 int 21h moval,bh mov ah,0 callprintf
mov ah,4ch int 21h main endp printfproc near lea si,mem1 mov cl,10 div cl
mov [si],ah add al,30h mov ah,2 movdl,al int 21h mov al,[si] mov ah,0 mov cl,1 div cl add al,30h mov ah,2 movdl,al int 21h ret
printfendp code ends end main
data segment
bufdb 100
db ?
db 100 dup(?) buf1db 0dh,0ah,'$' data ends
code segment
assumecs:code,ds:data,es:data mainproc far
movax,data
movds,ax
moves,ax
mov ah,0ah
leadx,buf
int 21h
lea si,buf+1
mov al,[si]
movcl,al
movch,al
movdh,al
incsi
again: mov al,[si]
cmp al,20h
jnz next
call delete
decch
jmp kaka
next: incsi
kaka: dec cl
jnz again
lea di,buf+2
disp: inc di
decch
jnzdisp
mov ah,24h
mov [di],ah
mov ah,9
lea dx,buf1
int 21h
mov ah,9
lea dx,buf+2
int 21h
mov ah,4ch
int 21h
mainendp
deleteproc near
movdi,si
movdl,dh
again1:mov ah,[di+1] mov [di],ah
inc di
dec dl
jnz again1
ret
deleteendp
code ends
end main
data segment
bufdb 100
db ?
db 100 dup(?)
buf1db 0dh,0ah,'$' count db 0
data ends
code segment
assumecs:code,ds:data,es:data mainproc far
movax,data
movds,ax
moves,ax
mov ah,0ah
leadx,buf
int 21h
lea si,buf+1
mov cl,[si]
movch,[si]
lea si,buf+2
again: mov al,[si]
cmp al,41h
jnz next
call insert
incch
inc count
incsi
next: incsi inc count dec cl jnz again lea di,buf+2 kaka: inc di decch jnz kaka mov al,24h mov [di],al mov ah,9 lea dx,buf1 int 21h mov ah,9 lea dx,buf+2 int 21h mov ah,4ch int 21h mainendp
insertproc near movdh,ch subdh,count movdl,ch lea di,buf+2 mac: inc di dec dl jnz mac
again1:movbl,[di] mov [di+1],bl dec di dec dh jnz again1 mov bh,43h mov [si],bh mov [si+1],bh ret
insertendp
code ends end main
answer5:
data segment
bufdb 100
db ?
db 100 dup(?)
buf1db 0dh,0ah,'$' data ends
code segment
assumecs:code,ds:data,es:data mainproc far
movax,data
movds,ax
moves,ax
mov ah,0ah
leadx,buf
int 21h
lea si,buf+1
mov cl,[si]
mov ch,0
incsi
again: mov al,[si]
cmp al,60h
ja next
mov ah,20h
or al,ah
mov [si],al
next: incsi
loop again
mov bl,24h
mov [si],bl
mov ah,9
lea dx,buf1
int 21h
mov ah,9
lea dx,buf+2
int 21h
mov ah,4ch
int 21h
mainendp
code ends
end main