;子程序名:AS2BIN
;输入参数:DX=字符串的偏移量,CX=字符串的字符个数
;输出参数:CF=0,则AX=二进制数。CF=1,则字符串非法,AX=0
;使用寄存器:SI,BX
AS2BIN PROC FAR
PUSH CX
PUSH DX
PUSH SI
MOV SI,DX ;DX存到SI中
CMP CX,6
JA ERR ;为高于/不低于等于的转移指令;字符串的字符个数大于6则出错
CLD ;置DF=0
MOV AL,[SI] ;查符号
CMP AL,'-'
JNE CHK
MOV MINU,1
JMP DECS
CHK:
CMP AL,'+'
JNE CLRD
DECS:
DEC CX
INC SI
CLRD:
SUB DX,DX ;DX清零,放结果
NEXT:
CALL CHE ;乘十
JC ERR
LODSB ;读下一个字符到AL
CMP AL,'0'
JB ERR
CMP AL,'9'
JA ERR ;大于9或者小于0都出错
AND AX,000FH ;转换成二进制数
ADD DX,AX
JC ERR ;累加和超过65535出错;CF=1时出错
LOOP NEXT
MOV AX,DX ;结果送入AX
CMP MINU,1 ;负数求补
JNE EXIT
NEG AX
JMP EXIT
ERR:
STC
MOV AX,0
EXIT:
POP SI
POP DX
POP CX
RET
CHE PROC NEAR ;乘10子程序
PUSH BX
MOV BX,DX
SHL DX,1
SHL DX,1
ADD DX,BX
SHL DX,1
POP BX
RET
CHE ENDP
AS2BIN ENDP