;子程序名: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 阅读(145) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理