汇编语言(十四)之判断字符串是否包含数字

汇编语言(十四)之判断字符串是否包含数字

输入一串字符串,判断字符串里面是否包含数字,如果包含数字输出把cl的第五位设置为1,否则设置为0

程序运行:

www.zeeklog.com  - 汇编语言(十四)之判断字符串是否包含数字

代码:


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