汇编语言(十四)之判断字符串是否包含数字
输入一串字符串,判断字符串里面是否包含数字,如果包含数字输出把cl的第五位设置为1,否则设置为0
程序运行:
代码:
datas segment
STRING_maxLength db 0ffh
STRING_Length db ?
STRING db 100h dup(?)
inputPrompt db 'input a line:$'
outputPrompt db 'cl=$'
nextLine db 0dh,0ah,'$'
datas ends
stacks segment stack
db 100h dup(?)
stacks ends
codes segment
assume cs:codes,ds:datas,ss:stacks
main proc far
start:
push ds
mov ax,0h
push ax
mov ax,datas ;初始化ds
mov ds,ax
;输出输入一行字符
lea dx,inputPrompt
mov ah,9
int 21h
;输入一行字符
lea dx,STRING_maxLength
mov ah,10
int 21h
;输出换行
lea dx,nextLine
mov ah,9
int 21h
;mov dl,cl
;call toBinaryPrint
mov ch,STRING_Length ;把字符串的长度移至ch
and cl,11011111b ;初始化cl第5位为0
;若字符串长度为0,直接输出cl
cmp ch,0
jz break
mov bx,0
s:
mov al,STRING[bx] ;将STRING中单元移至al
cmp al,'0' ;比较al与'0'的大小
jl next ;若al<'0',则跳转
cmp al,'9' ;否则,比较al与'9'的大小
jg next ;若al>'9',则跳转
or cl,00100000b ;否则,设置cl的第五位为1
jmp break ;跳出循环
next:
add bx,type STRING ;STRING索引移至下一个单元
dec ch ;计数器减1
cmp ch,0 ;比较ch与0
ja s ;若ch>0,则循环继续
break:
;输出cl的二进制提示
lea dx,outputPrompt
mov ah,9
int 21h
;输出cl
mov dl,cl ;将cl移至dl
call toBinaryPrint
ret
main endp
toBinaryPrint proc near
;保存寄存器
push ds
push ax
push cx
push dx
push bx
;设置ds为cs
push cs
pop ds
;把目的数dl转换成二进制字符串
mov cx,8 ;设置循环次数
mov bx,0 ;设置binaryArray下标
bin:
shl dl,1 ;左移一位
jnc zero ;移除的位不为1(即0),跳转
mov binaryArray[bx],'1' ;若移除的位为1,则设置binaryArray[bx]为‘1’
jmp next ;跳转至
zero:
mov binaryArray[bx],'0' ;若移除的位为0,则设置binaryArray[bx]为‘0’
next:
add bx,type binaryArray ;binaryArray数组下标移至下一个元素
loop bin
mov binaryArray[bx],'b' ;在二进制字符串后加上二进制单位
mov binaryArray[bx+1],'$' ;设置字符串的结束标志
;输出目的数的二进制
lea dx,binaryArray
mov ah,9
int 21h
;恢复寄存器
pop bx
pop dx
pop cx
pop ax
pop ds
ret
binaryArray db 16 dup(?)
toBinaryPrint endp
codes ends
end main