bit21电信微机原理上机题库(1-5)

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值