回 帖 发 新 帖 刷新版面

主题:[讨论][已解决]【将字符串转换成BCD】很奇怪的现象~~~感兴趣的好心人请进~~LOOP的用法~~

LOOP 返回调用时  LOOP的转移的范围在-128~~+127之间,如果超出了范围,则会出现错误,这个时候可以采用CMP等指令替代即可。嘎嘎,终于解决了!!正确程序在下面!!


题目就是讲一个字符串(0--9)以BCD码的形式输出;
下面我将给出两个程序,两个程序的思路都一样,但是第一个可以通过运行,但是第二个却不能,是不是因为长度太长呢?
第一个程序:
.386
DATA    SEGMENT    USE16
FUB1    DB '012345678901234567890'
COUNT   = $-FUB1
FUB2    DB '0000 ','$'
FUB3    DB '0001 ','$'
FUB4    DB '0010 ','$'
FUB5    DB '0011 ','$'
FUB6    DB '0100 ','$'
FUB7    DB '0101 ','$'
FUB8    DB '0110 ','$'
DATA    ENDS
STACK   SEGMENT    USE16  STACK
        DB 200 DUP(0)
STACK   ENDS
CODE    SEGMENT    USE16
        ASSUME  CS:CODE,SS:STACK,DS:DATA
BEGIN:  MOV   AX,DATA
        MOV   DS,AX
        MOV   SI,OFFSET FUB1
        MOV   CX,COUNT
L0:     MOV   BL,[SI] 
        CMP   BL,30H
        JNZ   L1
        MOV   DX,OFFSET FUB2
        MOV   AH,9
        INT   21H 
        INC   SI
        LOOP  L0
        JMP   EXIT
L1:     CMP   BL,31H
        JNZ   L2
        MOV   DX,OFFSET FUB3
        MOV   AH,9
        INT   21H            
        INC   SI
        LOOP  L0
        JMP   EXIT
L2:     CMP   BL,32H
        JNZ   L3
        MOV   DX,OFFSET FUB4
        MOV   AH,9
        INT   21H            
        INC   SI
        LOOP  L0
        JMP   EXIT
L3:     CMP   BL,33H
        JNZ   L4
        MOV   DX,OFFSET FUB5
        MOV   AH,9
        INT   21H            
        INC   SI
        LOOP  L0
        JMP   EXIT
L4:     CMP   BL,34H
        JNZ   L5
        MOV   DX,OFFSET FUB6
        MOV   AH,9
        INT   21H            
        INC   SI
        LOOP  L0
        JMP   EXIT
L5:     MOV   BL,[SI] 
        CMP   BL,35H
        JNZ   L6
        MOV   DX,OFFSET FUB7
        MOV   AH,9
        INT   21H 
        INC   SI
        LOOP  L0
        JMP   EXIT
L6:     MOV   DX,OFFSET FUB8
        MOV   AH,9
        INT   21H            
        INC   SI
        LOOP  L0
EXIT:   MOV   DL,42H
        MOV   AH,2
        INT   21H
        MOV   AH,4CH
        INT   21H          
CODE    ENDS
        END   BEGIN
第二个程序:(下面)

回复列表 (共3个回复)

沙发

第二个程序:
.386
DATA    SEGMENT    USE16
FUB1    DB '1234567890'
COUNT   = $-FUB1
FUB2    DB '0000 ','$'
FUB3    DB '0001 ','$'
FUB4    DB '0010 ','$'
FUB5    DB '0011 ','$'
FUB6    DB '0100 ','$'
FUB7    DB '0101 ','$'
FUB8    DB '0110 ','$'
FUB9    DB '0111 ','$'
FUB10   DB '1000 ','$'
FUB11   DB '1001 ','$'
DATA    ENDS
STACK   SEGMENT    USE16  STACK
        DB 200 DUP(0)
STACK   ENDS
CODE    SEGMENT    USE16
        ASSUME  CS:CODE,SS:STACK,DS:DATA
BEGIN:  MOV   AX,DATA
        MOV   DS,AX
        MOV   SI,OFFSET FUB1
        MOV   CX,COUNT
L0:     MOV   BL,[SI] 
        CMP   BL,30H
        JNZ   L1
        MOV   DX,OFFSET FUB2
        MOV   AH,9
        INT   21H 
        INC   SI
        LOOP  L0
        JMP   EXIT
L1:     CMP   BL,31H
        JNZ   L2
        MOV   DX,OFFSET FUB3
        MOV   AH,9
        INT   21H            
        INC   SI
        LOOP  L0
        JMP   EXIT
L2:     CMP   BL,32H
        JNZ   L3
        MOV   DX,OFFSET FUB4
        MOV   AH,9
        INT   21H            
        INC   SI
        LOOP  L0
        JMP   EXIT
L3:     CMP   BL,33H
        JNZ   L4
        MOV   DX,OFFSET FUB5
        MOV   AH,9
        INT   21H            
        INC   SI
        LOOP  L0
        JMP   EXIT
L4:     CMP   BL,34H
        JNZ   L5
        MOV   DX,OFFSET FUB6
        MOV   AH,9
        INT   21H            
        INC   SI
        LOOP  L0
        JMP   EXIT
L5:     MOV   BL,[SI] 
        CMP   BL,35H
        JNZ   L6
        MOV   DX,OFFSET FUB7
        MOV   AH,9
        INT   21H 
        INC   SI
        LOOP  L0
        JMP   EXIT
L6:     CMP   BL,36H
        JNZ   L7
        MOV   DX,OFFSET FUB8
        MOV   AH,9
        INT   21H            
        INC   SI
        LOOP  L0
        JMP   EXIT
L7:     CMP   BL,37H
        JNZ   L8
        MOV   DX,OFFSET FUB9
        MOV   AH,9
        INT   21H            
        INC   SI
        LOOP  L0
        JMP   EXIT
L8:     CMP   BL,38H
        JNZ   L9
        MOV   DX,OFFSET FUB10
        MOV   AH,9
        INT   21H            
        INC   SI
        LOOP  L0
        JMP   EXIT
L9:     MOV   DX,OFFSET FUB11
        MOV   AH,9
        INT   21H            
        INC   SI
        LOOP  L0
EXIT:   MOV   DL,42H
        MOV   AH,2
        INT   21H
        MOV   AH,4CH
        INT   21H          
CODE    ENDS
        END   BEGIN

板凳

.386
DATA    SEGMENT    USE16
FUB     DB 'PLEASE INPUT 0--9:  $'
FUB1    DB 80
        DB ?
        DB 80 DUP(0)
PTRC    DB  0AH,0DH,'$'
FUB2    DB '0000 ','$'
FUB3    DB '0001 ','$'
FUB4    DB '0010 ','$'
FUB5    DB '0011 ','$'
FUB6    DB '0100 ','$'
FUB7    DB '0101 ','$'
FUB8    DB '0110 ','$'
FUB9    DB '0111 ','$'
FUB10   DB '1000 ','$'
FUB11   DB '1001 ','$'
DATA    ENDS
STACK   SEGMENT    USE16  STACK
        DB 200 DUP(0)
STACK   ENDS
CODE    SEGMENT    USE16
        ASSUME  CS:CODE,SS:STACK,DS:DATA
BEGIN:  MOV   AX,DATA
        MOV   DS,AX
        MOV   DX,OFFSET FUB
        MOV   AH,9
        INT   21H
        MOV   DX,OFFSET PTRC
        MOV   AH,9
        INT   21H
        MOV   DX,OFFSET FUB1
        MOV   AH,10
        INT   21H
        MOV   DX,OFFSET PTRC
        MOV   AH,9
        INT   21H
        LEA   SI,FUB1+2
        MOV   CL,FUB1+1
        MOVZX CX,CL
        CALL  RAXIT
        MOV   AH,4CH
        INT   21H

3 楼

RAXIT   PROC
L0:     MOV   BL,[SI] 
        CMP   BL,30H
        JNZ   L1
        MOV   DX,OFFSET FUB2
        MOV   AH,9
        INT   21H 
        INC   SI
        DEC   CX
        CMP   CX,0
        JNZ   L0
        JMP   EXIT
L1:     CMP   BL,31H
        JNZ   L2
        MOV   DX,OFFSET FUB3
        MOV   AH,9
        INT   21H            
        INC   SI
        DEC   CX
        CMP   CX,0
        JNZ   L0
        JMP   EXIT
L2:     CMP   BL,32H
        JNZ   L3
        MOV   DX,OFFSET FUB4
        MOV   AH,9
        INT   21H            
        INC   SI
        DEC   CX
        CMP   CX,0
        JNZ   L0
        JMP   EXIT
L3:     CMP   BL,33H
        JNZ   L4
        MOV   DX,OFFSET FUB5
        MOV   AH,9
        INT   21H            
        INC   SI
        DEC   CX
        CMP   CX,0
        JNZ   L0
        JMP   EXIT
L4:     CMP   BL,34H
        JNZ   L5
        MOV   DX,OFFSET FUB6
        MOV   AH,9
        INT   21H            
        INC   SI
        DEC   CX
        CMP   CX,0
        JNZ   L0
        JMP   EXIT  
L5:     CMP   BL,35H
        JNZ   L6
        MOV   DX,OFFSET FUB7
        MOV   AH,9
        INT   21H            
        INC   SI
        LOOP  L0
        JMP   EXIT 
L6:     CMP   BL,36H
        JNZ   L7
        MOV   DX,OFFSET FUB8
        MOV   AH,9
        INT   21H            
        INC   SI
        DEC   CX
        CMP   CX,0
        JNZ   L0
        JMP   EXIT   
L7:     CMP   BL,37H
        JNZ   L8
        MOV   DX,OFFSET FUB9
        MOV   AH,9
        INT   21H            
        INC   SI
        DEC   CX
        CMP   CX,0
        JNZ   L0
        JMP   EXIT       
L8:     CMP   BL,38H
        JNZ   L9
        MOV   DX,OFFSET FUB10
        MOV   AH,9
        INT   21H            
        INC   SI
        DEC   CX
        CMP   CX,0
        JNZ   L0
        JMP   EXIT                                   
L9:     MOV   DX,OFFSET FUB11
        MOV   AH,9
        INT   21H            
        INC   SI
        DEC   CX
        CMP   CX,0
        JNZ   L0
EXIT:   MOV   DL,42H
        MOV   AH,2
        INT   21H
        RET
RAXIT   ENDP     
CODE    ENDS
        END   BEGIN

我来回复

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