1.请任意输入一个字符串,将其中A换成CC,并将结果显示在屏幕上。
DATAS SEGMENT
strings DB 100 DUP('$')
DATAS ENDS
STACKS SEGMENT
DB 256 dup(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX;代码段的设置
MOV DX,0
MOV BX,0
input_loop:
PUSH AX;显示需要使用al寄存器,因此push进行保护
MOV SI,0;这里si是字符串的指针
input_read:
MOV AH,01H
INT 21H;输入方法并非按照09h字符串输入,而是按照一个一个字符输入
CMP AL,0DH;如果是回车就结束输入
je output
CMP AL,41H;判断与'A'是否相等,相等的话就跳转到交换函数进行交换
je swap
add si,1
mov [bx+si],al;这里是将每个输入的字符放入另一个空间,方便操作
jmp input_read
swap:
mov byte PTR [bx+si+1],'C'
mov byte PTR [bx+si+2],'C'
add si,2;当输入是A的时候将空间多出来一个
jmp input_read
output:
MOV CX,1
POP AX
push dx
CMP CX,0
je input_loop
mov di,0
output_loop:
CMP DI,SI;当首指针等于尾指针的时候停止输出
je end_main
inc di
MOV DL,[BX+DI];这里就是将存入的空间一个个放出来
mov ah,02h
INT 21H
jmp output_loop
end_main:
MOV AH,4CH;结束
INT 21H
CODES ENDS
END START
2.请任意输入一个字符串,将其中大写字母换成小写字母,并将结果显示在屏幕上。
DATAS SEGMENT
strings DB 100 DUP('$')
DATAS ENDS
STACKS SEGMENT
DB 256 dup(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV DX,0
MOV BX,0
input_loop:
PUSH AX
MOV SI,0
input_read:
MOV AH,07H
INT 21H
CMP AL,0DH
je output
push dx;显示要用到dl 所以保护dx
mov dl,al;显示
mov ah,02h
int 21h
pop dx
CMP AL,41H
jna noswap
CMP AL,5AH
jnb noswap
or al,01100000b
add si,1
mov [bx+si],al
jmp input_read
noswap:
add si,1
mov [bx+si],al
jmp input_read
output:
MOV CX,1
POP AX
push dx
mov dl,13;显示回车
mov ah,02h
int 21h
mov dl,10;显示换行
mov ah,02h
int 21h
pop dx
CMP CX,0
je input_loop
mov di,0
output_loop:
CMP DI,SI
je end_main
inc di
MOV DL,[BX+DI]
mov ah,02h
INT 21H
jmp output_loop
end_main:
MOV AH,4CH
INT 21H
CODES ENDS
END START
3.请任意输入一个字符串,将其中的英文字母全部删除,并将结果显示在屏幕上。
DATAS SEGMENT
strings DB 100 DUP('$')
DATAS ENDS
STACKS SEGMENT
DB 256 dup(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV DX,0
MOV BX,0
input_loop:
MOV SI,0
input_read:
MOV AH,01H
INT 21H
CMP AL,0DH
je output
CMP AL,5BH
je nodelete
CMP AL,5CH
je nodelete
CMP AL,5DH
je nodelete
CMP AL,5EH
je nodelete
CMP AL,5FH
je nodelete
CMP AL,60H
je nodelete
;防止中间一些ASCII码混入
CMP AL,41H
jb nodelete
CMP AL,7AH
ja nodelete
jmp input_read
nodelete:
add si,1
mov [bx+si],al
jmp input_read
output:
MOV CX,1
CMP CX,0
je input_loop
mov di,0
output_loop:
CMP DI,SI
je end_main
inc di
MOV DL,[BX+DI]
mov ah,02h
INT 21H
jmp output_loop
end_main:
MOV AH,4CH
INT 21H
CODES ENDS
END START
4.现有一组字符串为data,name,time,file,code,path,user,exit,quit,text,请编写程序从键盘输入4个字符的字符串,若存在将其修改为disk, 并将结果在显示器上显示。
DATAS SEGMENT
char DB 100 DUP('$')
strings DB 'data,name,time,file,code,path,user,exit,quit,text','$'
DATAS ENDS
STACKS SEGMENT
DB 256 dup(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV DX,0
MOV BX,0
input_loop:
PUSH AX
MOV SI,0
input_read:
MOV AH,01H
INT 21H
CMP AL,0DH
je output
mov [bx+si],al
add si,1
jmp input_read
output:
MOV CX,1
POP AX
CMP CX,0
je input_loop
push ax
mov di,0
mov si,0
jmp swap_loop1
sl_loop:
sub di,si
mov si,0
add di,5
swap_loop1:
CMP di,50
je output_loop
mov al,[bx]
cmp strings[di],al
je swap_loop2
add di,5
jmp swap_loop1
swap_loop2:
mov al,[bx+si]
CMP strings[di],al
jne sl_loop
inc si
inc di
CMP SI,4
je swap
jmp swap_loop2
swap:
mov byte ptr strings[di-4],'d'
mov byte ptr strings[di-3],'i'
mov byte ptr strings[di-2],'s'
mov byte ptr strings[di-1],'k'
end_loop:
pop ax
output_loop:
MOV DX,offset strings
mov ah,09h
INT 21H
end_main:
MOV AH,4CH
INT 21H
CODES ENDS
END START
5.现有一组字符串为data,name,time,file,code,path,user,exit,quit,text,请编写程序从键盘输入4个字符的字符串,若存在将其删除, 并在显示器上显示
DATAS SEGMENT
char DB 100 DUP('$')
strings DB 'data,name,time,file,code,path,user,exit,quit,text','$'
string2 DB 50 DUP('$')
flag dw 100
DATAS ENDS
STACKS SEGMENT
DB 256 dup(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV DX,0
MOV BX,0
input_loop:
PUSH AX
MOV SI,0
input_read:
MOV AH,01H
INT 21H
CMP AL,0DH
je output
mov [bx+si],al;将输入的字符都存入到[bx+si]当中
add si,1
jmp input_read
output:
MOV CX,1
POP AX
CMP CX,0
je input_loop
push ax
mov di,0
mov si,0
jmp swap_loop1
sl_loop:
sub di,si
mov si,0
add di,5
;这里是当首字母相同,后续字母不相同时继续进行比较
swap_loop1:
CMP di,50
je dl_loop
mov al,[bx]
cmp strings[di],al;对首字母比较,相同则继续比较;不相同则加五与其他首字母比较
je swap_loop2
add di,5
jmp swap_loop1
swap_loop2:
mov al,[bx+si]
CMP strings[di],al
jne sl_loop
inc si
inc di
CMP SI,4
je swap
jmp swap_loop2
swap:
sub di,4
mov flag,di
dl_loop:
mov di,0
mov si,0
next:
cmp flag,di
je delete
cmp di,50
je end_loop
mov al,strings[di]
mov string2[si],al
inc si
inc di
jmp next
delete:
add di,5
jmp next
end_loop:
pop ax
mov si,0
output_loop:
cmp string2[si],'$'
je end_main
mov dl,string2[si]
mov ah,02h
int 21h
inc si
jmp output_loop
end_main:
MOV AH,4CH
INT 21H
CODES ENDS
END START