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

不知道贴长代码会不会有人看。。但我实在不知道哪里出错了,请各位帮忙看下吧~

霖海听涛 发布于 2011-10-22 15:15, 589 次点击
代码如下:
DATA SEGMENT
MESSAGE  DB 'INPUT STRINGS:',13,10,'$'
DATA1    DB 100 DUP(?)

DATA3    DB 'RESULT=',13,10,'$'
CR       DB 13,10,'$'
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
    MOV BX,0
    MOV CX,0
    MOV DX,OFFSET MESSAGE
    MOV AH,09H
    INT 21H
    MOV SI,OFFSET DATA1
L1:     
    MOV AH,01H
    INT 21H
    CMP AL,0DH
    JMP NEXT
    MOV [SI+BX],AL
    INC BX
   
    CMP AL,'0'
    JB L1
    CMP AL,'9'
    JA L1
    INC CX
   
JMP L1
NEXT:   
    MOV DX,OFFSET DATA3
    MOV AH,09H
    INT 21H
        
    DEC BX
    MOV CX,BX
    MOV SI,OFFSET DATA1
L2:   
    MOV AH,02H
    MOV DL,[SI]
    ADD DL,30H
    INT 21H
    INC SI
LOOP L2
    MOV AH,4CH
    INT 21H
CODE ENDS
END  START
运行结果是,先输出INPUT:
然后随便输入一个字符都会跳出一大段乱码。
请问哪里出问题了?
8 回复
#2
obstratiker2011-10-22 15:29
    CMP AL,0DH
    JMP NEXT
这里应该是
    CMP AL,0DH
    JZ NEXT

#3
霖海听涛2011-10-22 15:38
回复 2楼 obstratiker
饿,这个没发现。。
从键盘输入一个字符串然后显示出来,对其中的数字进行计数
要怎么改才能实现呢?
#4
霖海听涛2011-10-22 16:02
回复 3楼 霖海听涛
DATA SEGMENT
MESSAGE  DB 'INPUT STRINGS:',13,10,'$'
DATA1    DB 100 DUP(?)

DATA3    DB 'RESULT','=','$'
CR     DB 13,10,'$'
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
    MOV BX,0
    MOV CX,0
    MOV DX,OFFSET MESSAGE
    MOV AH,09H
    INT 21H
    MOV SI,OFFSET DATA1
L1:     
    MOV AH,01H
    INT 21H
    CMP AL,0DH
    JZ NEXT
    MOV [SI+BX],AL
    INC BX
   
    CMP AL,'0'
    JB L1
    CMP AL,'9'
    JA L1
    INC CX
   
JMP L1
NEXT:
    MOV DX,OFFSET CR
    MOV AH,09H
    INT 21H
    MOV DX,OFFSET DATA3
    MOV AH,09H
    INT 21H
    MOV AH,02H
    MOV DL,CL
    INT 21H
    MOV DX,OFFSET CR
    MOV AH,09H
    INT 21H
        
    MOV CX,BX
   
L2:   
    MOV AH,02H
    MOV DL,[SI]
    INT 21H
    INC SI
LOOP L2
    MOV AH,4CH
    INT 21H
CODE ENDS
END  START
程序我改了下,能够输出键入的字符串,但是计数器的数输出不了,能帮忙看下是怎么回事吗?
#5
霖海听涛2011-10-22 16:03
回复 2楼 obstratiker
DATA SEGMENT
MESSAGE  DB 'INPUT STRINGS:',13,10,'$'
DATA1    DB 100 DUP(?)

DATA3    DB 'RESULT','=','$'
CR     DB 13,10,'$'
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
    MOV BX,0
    MOV CX,0
    MOV DX,OFFSET MESSAGE
    MOV AH,09H
    INT 21H
    MOV SI,OFFSET DATA1
L1:     
    MOV AH,01H
    INT 21H
    CMP AL,0DH
    JZ NEXT
    MOV [SI+BX],AL
    INC BX
   
    CMP AL,'0'
    JB L1
    CMP AL,'9'
    JA L1
    INC CX
   
JMP L1
NEXT:
    MOV DX,OFFSET CR
    MOV AH,09H
    INT 21H
    MOV DX,OFFSET DATA3
    MOV AH,09H
    INT 21H
    MOV AH,02H
    MOV DL,CL
    INT 21H
    MOV DX,OFFSET CR
    MOV AH,09H
    INT 21H
        
    MOV CX,BX
   
L2:   
    MOV AH,02H
    MOV DL,[SI]
    INT 21H
    INC SI
LOOP L2
    MOV AH,4CH
    INT 21H
CODE ENDS
END  START
程序我改了下,能够输出键入的字符串,但是计数器的数输出不了,能帮忙看下是怎么回事吗?
#6
obstratiker2011-10-22 17:38
中断中的dl是字符的ASCII值,所以
        MOV DL,CL
加入    add cl,30h
        INT 21H
不过话说这只能输出0~9的数字
如果要完全满足还得改改
#7
霖海听涛2011-10-22 17:50
咳咳。求指点~
#8
obstratiker2011-10-22 18:22
一般来说是把数字转换成字符串,然后再显示
不过你也可以这样
    cmp cl,9
    je s
s:  inc ch
......

然后add cx,3030h
然后把ch,cl依次输出就行
这样可以容纳99个输入的数字
对一般情况来说够用了
就不用使用数字转换成字符串这么麻烦的方法
#9
霖海听涛2011-10-22 18:34
回复 8楼 obstratiker
用div求商和余数能转换吗?
1