+ -
当前位置:首页 → 问答吧 → 接收一个十进制数字串,且扩展成10位。

接收一个十进制数字串,且扩展成10位。

时间:2011-01-29

来源:互联网

功能:接收一个十进制数字串,且扩展成10位。
入口参数:DX=缓冲区偏移
出口参数:cf=0,表示成功,cf=1,表示不成功。
getnum proc
mov ah,10 接收一个字符串
int 21h
call newline
call isdnum 判断是否为10进制数字串
jc getnum2
mov si,dx ---->从这里开始下面的代码就看不懂每行是在干什么了,求人给解释。
inc si
mov cl,[si]
xor ch,ch
mov ax,maxlen
std
mov di,si
add di,ax
add si,cx
sub ax,cx
rep movsb
mov cx,ax
jcxz getnum1
xor al,al
rep stosb
getnum1:cld
clc
getnum2:ret
getnum endp

作者: yangxiang1   发布时间: 2011-01-29

getnum proc
mov ah,10 接收一个字符串
int 21h
call newline
call isdnum 判断是否为10进制数字串
jc getnum2
mov si,dx ---->缓冲区首地址给si
inc si 指向缓冲区的第2个字节---实际的字符数
mov cl,[si] 
xor ch,ch 将ch置0,使cx存放实际的字符数
mov ax,maxlen 用ax存放希望输入字符串的最大位数
std 置df,使字符串操作从高地址开始
mov di,si 现在si指向的是字符串前的那个单元,同时让di也执行该单元
add di,ax 让di指向预留下的maxlen个单元的最后一个单元
add si,cx 让si指向字符串最后的那个字符(前一个单元的地址+字符串长度)
sub ax,cx 相减后ax为不足的字符数(最大字符数-实际字符数)
rep movsb 把实际输入的字符串移到maxlen个单元的后面
mov cx,ax
jcxz getnum1 如果不足的字符数是0(就是比maxlen个字符还差0个字符,则结束)
xor al,al 将al置成0
rep stosb 填充到字符串前面,使整个字符串加上前面的0正好是maxlen个
getnum1:cld
clc
getnum2:ret
getnum endp

作者: shzhfu   发布时间: 2011-01-30