要求:
已知某密码由英文字母A、B、C……Z组成且以ASCII码形式存放在以CIPHER为首地址的存储区中,试统计各字母在此密码中出现的次数并依次存入以CHAR为首地址的26个字节中,最后将字母出现的次数以十六进制形式显示出来(设出现的次数≤255),显示格式为:
A XXH
B XXH
Z XXH
要求:
将“8位二进制数转换成十六进制数并显示出来”的功能用子程序完成。
program:
jidseg segment
chipher db 'AASDFGHJKLMNBVCXZQWERTYUIOPJSDLFSDLFSDJFOFWOOEWJWTRETJGFVNLFLFJLWUIEWWFSFSFKF'
len = $-chipher
char db 26 dup(0)
dseg ends
cseg segment
assume cs:cseg ,ds:dseg
start:
mov ax,dseg
mov ds,ax
mov si,0
next: mov bl,chipher[si]
mov bh,0
inc si
cmp si,len
ja count
sub bl,'A'
add char[bx],1
jmp next
count:
mov si,0
count1: mov bl,char[si]
mov bh,0
inc si
cmp si,25
ja done
mov dx,si
add dx,40h
mov ah,2
int 21h
mov dl,':'
mov ah,2
int 21h
call deal
jmp count1
done: mov ah,4ch
int 21h
deal proc
push ax
push bx
push cx
push dx
mov dx,0
mov di,2
mov cl,4
sign: shl bx,cl
cmp di,0
je exit
dec di
cmp bh,9
ja word
add bh,30h
mov dl,bh
mov bh,0
mov ah,2
int 21h
jmp sign
word:
mov dl,bh
add dl,37h
mov bh,0
mov ah,2
int 21h
jmp sign
exit:
mov dl,'h'
mov ah,2
int 21h
mov dl,' '
mov ah,2
int 21h
pop dx
pop cx
pop bx
pop ax
ret
deal endp
cseg ends
end start
评论