子程序名:AS2BIN

; 子程序名: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
    
Posted on 2010-11-01 10:58 JimmyZhang 阅读(38) 评论(0)   编辑  收藏 引用

你可能感兴趣的:(子程序名:AS2BIN)