回 帖 发 新 帖 刷新版面

主题:谁能帮我注释一下啊!

Decihex             segment
assume             cs:decihex

main        proc        far
        push        ds
        sub        ax,ax
        push        ax
repeat:             call        decibin
        call        crlf
        call        binihex
        call        crlf
        jmp        repeat
        ret
main        endp

Decibin             proc        near
        mov        bx,0
newchar:             mov        ah,1
        int        21h
        sub        al,30h
        jl        exit
                  cmp                al,1d
        jg        exit
        cbw
                  shl     bx,1
        add        bx,ax
        jmp        newchar
exit:        ret
Decibin             endp

binihex             proc        near
        mov        ch,4
rotate:             mov        cl,4
        rol        bx,cl
        mov        al,bl
        and        al,0fh
        add        al,30h
        cmp        al,3ah
        jl        printit
        add        al,7h
printit:             mov        dl,al
        mov        ah,2
        int        21h
        dec        ch
        jnz        rotate
        ret
binihex              endp

crlf        proc        near
        mov        dl,0dh
        mov        ah,2
        int        21h
                   mov               dl,0ah
        mov        ah,2
        Int        21h
        ret
crlf        endp
decihex    ends
    end    main    
[size=2]1[/size]

回复列表 (共2个回复)

沙发

Decihex             segment;code segement
assume             cs:decihex;push cs

main        proc        far
        push        ds
        sub        ax,ax
        push        ax
repeat:             call        decibin;start run
        call        crlf
        call        binihex
        call        crlf
        jmp        repeat
        ret
main        endp

Decibin             proc        near
        mov        bx,0
newchar:             mov        ah,1
        int        21h
        sub        al,30h
        jl        exit
                  cmp                al,1d
        jg        exit
        cbw
                  shl     bx,1
        add        bx,ax
        jmp        newchar
exit:        ret
Decibin             endp

binihex             proc        near
        mov        ch,4
rotate:             mov        cl,4
        rol        bx,cl
        mov        al,bl
        and        al,0fh
        add        al,30h
        cmp        al,3ah
        jl        printit
        add        al,7h
printit:             mov        dl,al
        mov        ah,2
        int        21h
        dec        ch
        jnz        rotate
        ret
binihex              endp

crlf        proc        near
        mov        dl,0dh
        mov        ah,2
        int        21h
                   mov               dl,0ah
        mov        ah,2
        Int        21h
        ret
crlf        endp
decihex    ends
    end    main    
1;finish

板凳


Decihex        segment
assume      cs:decihex

main    proc    far
        push        ds        ;有意义吗?
        sub            ax, ax    ;???????
        push        ax        ;???????

repeat: call        decibin    ;从键盘中读取 2 进制数
        call        crlf
        call        binihex    ;输出读入的2进制数的16进制形式
        call        crlf
        jmp            repeat  ;再依次
        ret                    ;???????
main    endp

Decibin proc    near    ;从键盘读取 2 进制字符串,转换为机器数存放在 bx 中
        mov            bx, 0
newchar:mov            ah, 1
        int            21h        ;从键盘中读取一个字符
        sub            al, 30H
        jl            exit    ;是否小于 '0'
        cmp         al, 1d    
        jg            exit    ;是否大于 1
        cbw
        shl            bx, 1    ;bx 左移一位
        add            bx, ax    ;加上输入的数字
        jmp            newchar    ;下一个字符
exit:   ret
Decibin endp

binihex proc    near    ;把 bx 中机器数以 16 进制模式输出
        mov            ch, 4
rotate:    mov            cl, 4
        rol            bx, cl    ;循环左移 4 位
        mov            al, bl
        and            al, 0fh ;四位 2 进制数转换为一位 16 进制数
        add            al, 30h ;暂时转换为 ASCII 码数字
        cmp            al, 3ah ;是否大于了 '9'
        jl            printit
        add            al, 7h    ;转换为字母
printit:mov            dl, al
        mov            ah, 2
        int            21h        ;输出转换后的字符
        dec            ch        ;下 4 位
        jnz            rotate
        ret
binihex endp

crlf    proc    near    ;回车
        mov        dl,0dh
        mov        ah,2
        int        21h
        mov        dl,0ah
        mov        ah,2
        Int        21h
        ret
crlf    endp

decihex    ends
    end    main

我来回复

您尚未登录,请登录后再回复。点此登录或注册