回 帖 发 新 帖 刷新版面

主题:最后一次再这求教!!

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




DATA SEGMENT 
BUF0   DB 'PLEASE INPUT NMUBER:',0DH,0AH,'$'
BUFI          db 7
              db  ?
              db   7 dup(0)  ;输入缓冲区
BUFER  DB 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,BUF0        ;提显
       mov AH,9
       int 21h
     lea  DX,BUFI ;-------开始输入--------------------
     MOV AH,10
     INT   21H
     MOV CH,BUFI+1;输入的个数      
       lea  DI,BUFI+2 ;的偏移地址
       CALL CHANGE;转换 
       lea dx,bufer
       mov ah,9  
       int 21h    
       CALL DISPBXB  ;显示二进制子程序      
       MOV AH,4CH
       INT 21H
CHANGE  PROC  NEAR;------转换子程序----------------------
        ;push  ds
        ;mov ax,0
        ;push ax       ;保护现场
        ;mov  ax,data
       ; mov  ds,ax     ;送段地址
           lea  di,BUFI+2;instr的偏移地址    
           mov ax,0
    next:  mov bl,[di];送要转换数的数
           SUB BL,30H
           mov bh,0
           mov si,ax
           MOV CL,3
           shl ax,CL  ;*8
           shl si,1   ;*2
           add ax,si  ;10*p
           add ax,bx  ;10*p+Q
           dec CH;下一个个数
           jz exit;退出子程序
           inc di;指向下一个数
           jmp next
exit:     ret
CHANGE endp
DISPBXB  PROC  NEAR;----------显示二进制-----------------
    MOV CX,16
LP: ROL AX,1
    JC Data1
    MOV DL,30H
    JMP OUTP
Data1:MOV DL,31H
 OUTP:mov AH,2
      INT 21H
      LOOP LP
     MOV  DL,'B' ;-----显示B-------
     MOV AH,2
     INT 21H
     RET
DISPBXB  ENDP 
  
CODE   ENDS
     END START

回复列表 (共7个回复)

沙发

有两个地方错了.
一个是ROL指令,应该改为RCL
一个是对AX的数值没有保存,两个地方都应该保存AX
一个地方是
OUTP:mov AH,2
      INT 21H
      LOOP LP
一个地方是在:
 CALL CHANGE;转换 
       lea dx,bufer
       mov ah,9  
       int 21h    
       CALL DISPBXB  ;显示二进制子程序    
修改后程序正确.

板凳

ytyt谢谢你
太谢谢你
我看看

3 楼

WQ 你能不能帮我修改看
我搞了一天了呀
求你了!!
谢谢

4 楼

修改后的代码,睡觉了.
DATA SEGMENT 
BUF0   DB 'PLEASE INPUT NMUBER:',0DH,0AH,'$'
BUFI          db 7
              db  ?
              db   7 dup(0)  ;输入缓冲区
BUFER  DB 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,BUF0        ;提显
       mov AH,9
       int 21h
     lea  DX,BUFI ;-------开始输入--------------------
     MOV AH,10
     INT   21H
     MOV CH,BUFI+1;输入的个数      
       lea  DI,BUFI+2 ;的偏移地址
       CALL CHANGE;转换 
      PUSH AX
       lea dx,bufer
       mov ah,9  
       int 21h    
      POP AX
       CALL DISPBXB  ;显示二进制子程序      
       MOV AH,4CH
       INT 21H
CHANGE  PROC  NEAR;------转换子程序----------------------
        ;push  ds
        ;mov ax,0
        ;push ax       ;保护现场
        ;mov  ax,data
       ; mov  ds,ax     ;送段地址
           lea  di,BUFI+2;instr的偏移地址    
           mov ax,0
    next:  mov bl,[di];送要转换数的数
 
           SUB BL,30H
           mov bh,0
           mov si,ax
           MOV CL,3
           shl ax,CL  ;*8
           shl si,1   ;*2
           add ax,si  ;10*p
           add ax,bx  ;10*p+Q
           dec CH;下一个个数
           jz exit;退出子程序
           inc di;指向下一个数
           jmp next
           exit: 
               ret
CHANGE endp

DISPBXB  PROC  NEAR;----------显示二进制-----------------
    MOV CX,16
LP: RCL AX,1
    JC Data1
    MOV DL,30H
    JMP OUTP
Data1:MOV DL,31H
 OUTP:
             PUSH AX
             mov AH,2
      INT 21H
      POP AX
      LOOP LP
     MOV  DL,'B' ;-----显示B-------
     MOV AH,2
     INT 21H
     RET
DISPBXB  ENDP 
  
CODE   ENDS
     END START

5 楼

太激动了
行了!!
谢谢你了!!!

6 楼

上次都叫你留个QQ了,为什么不留呢~

7 楼

4位BCD码十进制转二进制子程序,仅供参考:
A=(a3*10+a2)*100+(a1*10+a0)
DTOB:    CLR OPR1+2
    CLR OPR1+3
    LDA OPR1
    JSR SR0
    LDX #100
    LDA OPR1+3
    MUL
    STA OPR1+3
    TXA 
    ADC OPR1+2
    STA OPR1+2
    LDA OPR1+1
    JSR SR0
    RTS
SR0:    PSHX
    PSHA
    LSRA
    LSRA
    LSRA
    LDX #10
    MUL
    ADD OPR1+3
    STA OPR1+3
    PULA
    AND #$0F
    ADD OPR1+3
    STA OPR1+3
    CLRA
    ADC OPR1+2
    STA OPR1+3
    CLRA
    ADC OPR1+2
    STA OPR1+2
    PULX
    RTS

我来回复

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