注册 登录
编程论坛 汇编论坛

把bx中的16进制以16进制的形式输出出来

筐筐的橙 发布于 2011-06-13 21:18, 525 次点击
DATAS SEGMENT
    ;此处输入数据段代码  
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV BX,23ABH


                MOV DX,BX
    AND DX,0F000H
    ROR DL,1
    ROR DL,1
    ROR DL,1
    CMP DL,9
    JA JIA3
    ADD DL,30H
    JMP JIAA3
JIA3:ADD DL,37H
JIAA3:MOV AH,2
    INT 21H
                MOV DX,BX
    AND DX,0f00H
    ROR DL,1
    ROR DL,1
    CMP DL,9
    JA JIA2
    ADD DL,30H
    JMP JIAA2
JIA2:ADD DL,37H
JIAA2:MOV AH,2
    INT 21H
            MOV DX,BX
    AND DX,00F0H
    ROR DL,1
    CMP DL,9
    JA JIA1
    ADD DL,30H
    JMP JIAA1
JIA1:ADD DL,37H
JIAA1:MOV AH,2
    INT 21H
            MOV DX,BX
    AND DX,000FH
    CMP DL,9
    JA JIA
    ADD DL,30H
    JMP JIAA
JIA:ADD DL,37H
JIAA:MOV AH,2
   INT 21H  
 
    ;此处输入代码段代码
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

比较麻烦,因为寄存器不够用没用循环,思路就是分别把各位16进制移到最后,判断在a之前还是之后,转换成ascii然后输出,结果输出的结果是四只乱码。。。求前辈们帮改下。
2 回复
#2
ansic2011-06-13 23:32
这是将DX里的数值以十六进制显示出来的子程序。供楼主参考。

程序代码:

;input:dx
disphex proc uses dx
        mov cx,4
d0:     push cx
        mov cl,4
        rol dx,cl
        push dx
        and dx,0fh
        cmp dl,10
        jb d1
        add dl,37h
        mov ah,2
        int 21h
        jmp jx
d1:
        add dl,30h
        mov ah,2
        int 21h
jx:
        pop dx
        pop cx
        loop d0

        ret
disphex endp
;
#3
obstratiker2011-06-16 22:50
那个 ror 是位移二进制数的,用一次相当于除以 2
所以你要让 dx 中的数移一位,得用四次,合计 12 次 (第一次位移)
另外你不应该 ROR DL,1   那 dh 中的数不是没位移了吗
直接 ror dx,1 好了
方法是对的(方法不好), ror 的次数不够
   
1