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

怎么修改啊?

mrcsjie 发布于 2008-10-16 18:33, 1022 次点击
DATA SEGMENT
BDAT DW 0001101000101011B
DATA ENDS
STACK SEGMENT PARA STACK'STACK'
DB 10 DUP(?)
STACK ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA
START:PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV BX,BDAT
MOV CH,4
LP:MOV CL,4
ROL BX,CL
MOV AL,BL
AND AL,0FH
ADD AL,30H
CMP AL,3AH
JL LP1
ADD AL,7
LP1:MOV DL,AL
MOV AH,2
INT 21H
DEC CH
JNZ LP
RET
MAIN ENDP
CODE ENDS
END START




以上程序是把二进制数转换为十六制数,若要将其转换为十进制数应该如何修改呢?请把原程序po出来,谢谢了!
4 回复
#2
zklhp2008-10-16 19:14
转10进制就得用除法了……
#3
zklhp2008-10-16 19:58
;MASMPlus 代码模板 - 纯 DOS 程序

.model small
.stack 200h
.data
    bdata  dw 0001101000101011B
    buffer db 4 dup(' '),'$'
.CODE
START:
    mov ax,@data
    mov ds,ax
    xor dx,dx
    mov ax,WORD ptr [bdata]
    mov cx,10d
    lea di,buffer
    add di,4
loop1:
    div cx
    add dl,30h
    mov BYTE ptr ds:[di],dl
    xor dx,dx
    dec di
    or ax,ax
    jnz loop1
    int 3h
    mov ax,4c00h
    int 21h
END START

Debug32 - Version 1.0 - Copyright (C) Larson Computing 1994

CPU = 686, Virtual 8086 Mode, Id/Step = 06FD, A20 enabled
-g
AX=0000  BX=0000  CX=000A  DX=0000  SP=0200  BP=0000  SI=0000  DI=000A
DS=208C  ES=207A  SS=208D  CS=208A  IP=0022  NV UP DI PL ZR NA PE NC
208A:0022 CC               INT     3
Instruction Breakpoint
-d ds:0
208C:0000 75 F2 CC B8 00 4C CD 21-2B 1A 20 36 36 39 39 00  urL8.LM!+. 6699.
208C:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
***Duplicate Line(s)***
208C:0070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
#4
zklhp2008-10-16 20:02
偶直接给你写了个新的 呵呵

这个其实就是除10取余 只不过 10进制要用除法 16进制可以用移位

对dos输出不熟 偶就写个算法 输出你自己弄吧

突然发现偶的机子没debug 郁闷!!!
#5
zklhp2008-10-16 20:03
下面那是运行后的结果 不知道怎么输出好 就这么看吧

其他数据没试……
1