输入一串字符串,判断字符串里面是否包含数字,如果包含数字输出把cl的第五位设置为1,否则设置为0
程序运行:
代码:
datas segmentSTRING_maxLength db 0ffhSTRING_Length db ?STRING db 100h dup(?)inputPrompt db 'input a line:$'outputPrompt db 'cl=$'nextLine db 0dh,0ah,'$'datas endsstacks segment stackdb 100h dup(?)stacks endscodes segmentassume cs:codes,ds:datas,ss:stacks
main proc far
start:push dsmov ax,0hpush axmov ax,datas ;初始化dsmov ds,ax;输出输入一行字符lea dx,inputPromptmov ah,9int 21h;输入一行字符lea dx,STRING_maxLengthmov ah,10int 21h;输出换行lea dx,nextLinemov ah,9int 21h;mov dl,cl;call toBinaryPrintmov ch,STRING_Length ;把字符串的长度移至chand cl,11011111b ;初始化cl第5位为0;若字符串长度为0,直接输出clcmp ch,0 jz breakmov bx,0 s:mov al,STRING[bx] ;将STRING中单元移至alcmp al,'0' ;比较al与'0'的大小jl next ;若al<'0',则跳转cmp al,'9' ;否则,比较al与'9'的大小jg next ;若al>'9',则跳转or cl,00100000b ;否则,设置cl的第五位为1jmp break ;跳出循环 next:add bx,type STRING ;STRING索引移至下一个单元dec ch ;计数器减1 cmp ch,0 ;比较ch与0ja s ;若ch>0,则循环继续break:;输出cl的二进制提示lea dx,outputPromptmov ah,9int 21h;输出clmov dl,cl ;将cl移至dlcall toBinaryPrintretmain endptoBinaryPrint proc near;保存寄存器push dspush axpush cxpush dxpush bx;设置ds为cspush cspop 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 binmov binaryArray[bx],'b' ;在二进制字符串后加上二进制单位mov binaryArray[bx+1],'$' ;设置字符串的结束标志;输出目的数的二进制lea dx,binaryArraymov ah,9int 21h;恢复寄存器 pop bx pop dx pop cxpop axpop dsretbinaryArray db 16 dup(?)
toBinaryPrint endp
codes endsend main