回 帖 发 新 帖 刷新版面

主题:做了一天了没错不过没有结果呀!!!!!!!!!

; 帮我呀
;我搞了一天了
;这个是输入十进制转为二进制然后显示出来的程序帮我看呀



.386
DATA SEGMENT 
     input  DB 'input number:$'
     BUF DB 5 DUP(?)
     BIN  DW ?
     CC DB 'B',0dh.0ah,'$'
DATA ENDS
STACK  SEGMENT  STACK
       DB  200   DUP(0)
STACK  ENDS
CODE  SEGMENT 
      ASSUME  CS:CODE,SS:STACK,DS:DATA
START:MOV AX,DATA
      MOV DS,AX
      lea dx,input;提显
      mov ah,09h
      int 21h
      LEA SI,BUF;开始输入
      MOV AH,1
      MOV CX,0
AGAIN:INT 21H
      CMP AL,0DH
      JE CALPRO
      SUB  AL,30H
      MOV  [SI],AL
      INC SI
      INC CX
      JMP  AGAIN
CALPRO:LEA SI,BUF
       LEA DI,BIN
       CALL CHANGE;转换
       mov cx,15  ;在这里放入显示程序 
   L:  BT AX,CX
       JC P
       MOV DL,30H
       JMP Q
  P:   MOV DL,31H
  Q:   MOV AH,2
       INT 21H
       DEC CX
       JGE L
       LEA DX,CC;显示回车
       MOV AH,9
       INT 21H          
       MOV AH,4CH;回到DOS
       INT 21H
CHANGE  PROC  NEAR                ;转换子程序
       PUSH DX
       PUSH BX
       MOV AX,0
       MOV DX,10  
NEXT:PUSH DX
     MUL  DX
     POP  DX
     MOV  BL,[SI]
     MOV  BH,0
     ADD AX,BX
     INC SI
     LOOP  NEXT
     MOV [DI],AX
     POP BX
     POP DX
RET
CHANGE  ENDP
CODE   ENDS
     END START

回复列表 (共8个回复)

沙发

.MODEL SMALL
.386P
INCLUDE\COS\MAC\IO.ASM
DATA    SEGMENT
 BUF         DB 100H DUP(0)
 INFO1     DB 'Input a Dec:',0
 INFO2    DB 'Output a Hex:',0
DATA    ENDS

STACK SEGMENT
    DB 100H DUP(0)
STACKLEN    =    $
STACK ENDS

CODE    SEGMENT 
    ASSUME    CS:CODE,DS:DATA,SS:STACK
START:
  MOV    AX,DATA
  MOV    DS,AX
  MOV    AX,STACK
  MOV    SS,AX
  MOV    SP,STACKLEN
  
  MOV SI,OFFSET INFO1
  DISP_STR SI
    MOV    SI,OFFSET BUF
    GET_STR SI    
    CRLF
    STRD_TO_EAX SI
    MOV SI,OFFSET INFO2
    DISP_STR SI
    DISP_32 EAX
    MOV AH,04CH
    INT    21H
CODE    ENDS 
    END    START

用我发给你的宏写的,我把该宏保存在一个IO.ASM的文件中,我的机子编译运行通过了.
输入一个十进制数,输入一个16进制数~
比如:
INPUT: 255
OUTPUT : 0FFH

板凳

你广西那里的?
我玉林,在桂电读书.
给个QQ,加你.
上面的代码你别直接用,要改一下INCLUDE.
要我帮你看你的代码吗?

3 楼

有几个错误:

一、虽然在DOS下可以访问32位寄存器,但仍然不能使用32位代码,在各段属性中加上use16就可以改回16位代码。例如:

DATA SEGMENT use16

STACK  SEGMENT use16 STACK

CODE  SEGMENT use16

二、转换子程序逻辑错误,请重新设计。

4 楼

显示子程序逻辑错误吗????
   mov cx,15  ;在这里放入显示程序 
   L:  BT AX,CX
       JC P
       MOV DL,30H
       JMP Q
  P:   MOV DL,31H
  Q:   MOV AH,2
       INT 21H
       DEC CX
       JGE L
       LEA DX,CC;显示回车
       MOV AH,9

5 楼

用我发给你的宏写的,我把该宏保存在一个IO.ASM的文件中,我的机子编译运行通过了.
输入一个十进制数,输入一个16进制数~
比如:
INPUT: 255
OUTPUT : 0FFH
[/quote]
我要的是十进制转为二进制然后显示出来

6 楼

[quote]有几个错误:

一、虽然在DOS下可以访问32位寄存器,但仍然不能使用32位代码,在各段属性中加上use16就可以改回16位代码。例如:

DATA SEGMENT use16

STACK  SEGMENT use16 STACK

CODE  SEGMENT use16

二、转换子程序逻辑错误,请重新设计。[/quote]

逻辑错误!!
在哪!
书上的程序哟!

7 楼

不得结果!

8 楼

还是给一个完整的代码你把,该代码没有对输入数据进行检测.在MASM615编译通过
代码:
.MODEL SMALL
.386P
DATA SEGMENT
BUF     DB 100,0,100 DUP(0)
INFO1 DB 'Input a Dec:$'
INFO2 DB 0DH,0AH,'Output a Bin:$'
DATA ENDS
STACK SEGMENT STACK
    DB 100H DUP(0)
STACKLEN    =$
STACK    ENDS

CODE SEGMENT
    ASSUME    CS:CODE,DS:DATA,SS:STACK
START:
        MOV AX,DATA
        MOV DS,AX
        MOV    AX,STACK
        MOV    SS,AX
        MOV    SP,STACKLEN
        
        MOV    DX,OFFSET INFO1
        MOV    AH,09H
        INT    21H
        
        MOV DX,OFFSET BUF
        MOV AH,0AH
        INT 21H

        MOV    CL,BUF+1
        XOR    CH,CH            ;CX是输入的字符个数
        MOV    SI,OFFSET BUF+2 ;字符实际存放的首地址
        XOR    EBX,EBX                        ;转化结果放到EBX中,初始化EBX
        XOR    EAX,EAX                        ;初始化EAX
        .WHILE CX>0
            SHL EBX,1        ;EAX=EAX*2
            LEA EBX,[EBX*4+EBX] ;上面的2个指令实际等于原来EAX的10倍
            LODSB
            SUB AL,'0'
            ADD EBX,EAX 
            DEC CX
        .ENDW
        
    MOV DX,OFFSET INFO2
    MOV    AH,09H
    INT 21H
    
        MOV    CX,32
        .WHILE CX>0
            MOV AL,'0'
            RCL EBX,1
            JNC OUTPUT
             INC AL
            OUTPUT:
                PUSH BX
                MOV    BL,07H
                MOV BH,0
                MOV AH,0EH
                INT 10H
                POP BX
            DEC ECX
        .ENDW
         
        MOV    AX,4C00H
        INT    21H
CODE    ENDS
    END    START

我来回复

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