内存自source开始有20个数字、大写字母、小写字母的混合串(比如:1234567890abceFGHIJ)编程将其中的数字符号挑选出来存储到dst开始的内存中,并将结果显示到CRT上。
(扩展A:做一个菜单,选1,2,3,4分别输出数字、大写、小写及退出; 扩展B:同时输出数字、大写、小写的个数)
data segment
menu db "1 print num",0dh,0ah
db "2 print upper case",0dh,0ah
db "3 print lower case",0dh,0ah
db "4 exit",0dh,0ah,'$'
choice db "please choice 1 2 3 4: ",0dh,0ah,'$'
source db "1234567890abceFGHIJ"
count equ $-source
dst db 20 dup(?)
crlf db 0aH,0dH,"$";回车换行
data ends
code segment
assume cs:code,ds:data,es:data
start:
mov ax,data
mov ds,ax
mov dx,offset menu
mov ah,9
int 21h
mov dx,offset choice
mov ah,9
int 21h
mov ah,1
int 21h
cmp al,'1'
je num
cmp al,'2'
je upper
cmp al,'3'
je lower
jmp exit
num:
mov bx, offset source
mov si, offset dst ;指针
mov cl, count
num1:
mov al,[bx]
cmp al,30h ;30h-39h为数字
jb num2
cmp al,39h
ja num2
mov [si],al
inc si
num2:
inc bx
dec cl
jnz num1
jmp finally
upper:
mov bx, offset source
mov si, offset dst
mov cl, count
upper1:
mov al,[bx]
cmp al,41h ;41h-5ah为大写
jb upper2
cmp al,5ah
ja upper2
mov [si],al
inc si
upper2:
inc bx
dec cl
jnz upper1
jmp finally
lower:
mov bx, offset source
mov si, offset dst
mov cl, count
lower1:
mov al,[bx]
cmp al,61h;61h-7ah
jb lower2
cmp al,7ah
ja lower2
mov [si],al
inc si
lower2:
inc bx
dec cl
jnz lower1
jmp finally
finally:
mov byte ptr[si],'$'
lea dx,crlf
mov ah,9
int 21h
mov dx,offset dst
mov ah,9
int 21h
lea dx,crlf
mov ah,9
int 21h
jmp start
exit:
mov ah, 4cH
int 21H
code ends
end start