Выдает ошибку Undefined symbol - Assembler

Узнай цену своей работы

Формулировка задачи:

Суть программы в том, что после того, как в заданном массиве будет обнаружен 0, все следующие элементы будут приравнены 0 На строках 51 и 59 он выдает ошибку Undefined symbol: PRINT_NUMBER, хотя до этого эта функция работала
Dseg Segment
;  индивидуальные данные - начало
   N dw 10
   A dw -2,3,4,-8,0,1,6,-15,-20,-24
   AI dw ?
   TextMA db 'Массив А: ',10,13,'$'
;  индивидуальные данные - конец
   Prob db '  $'
   Buffer db 6 dup (?),'$'
   NL db 10,13,'$'
Dseg Ends
 
Stacks segment
   dw 128 dup (?)
Stacks ends
 
Codes segment
  Main proc far
    Assume CS:codes, DS:dseg, SS:stacks
    Mov AX,Dseg
    Mov DS,AX
; индивидуальная часть программы - начало
    LEA DX,TextMA       ;блок 1
    CALL PRT        ;напечатать 'Mассив А:'
    LEA BP,A        ;блок 2
    Mov CX,N        ;загрузить в регистр ВР адрес начала массива А
    CALL PRINTMAS       ;печать массива А
    LEA DX,NL       ;перевод строки
    CALL PRT
    Xor AX,AX     ;      I - регистр AX
    Xor BX,BX     ;      J - регистр BX
    MOV SI,N      
BL5:
        Mov DI,AX   ;блок 5
        SAL DI,1
        Mov CX,A[DI]
        CMP CX,0
        JE BL6          ;если A[i] = 0, то на блок 6
        JMP BL7         ;               иначе на блок 7
    BL6:               
        MOV BX,AX
        ADD BX,1
        CMP BX, SI
        JL BL6
        JMP BL10        ; переход на блок 10
    BL7: 
        Mov AI, AX  ;блок 7
        MOV AX, CX
        CALL PRINT_NUMBER
        MOV AX, AI 
        INC AX 
        CMP AX, N         ;  если i=N, то на блок 10
        JE BL10        
        JMP BL5   
    BL8:
        MOV AX,0
        CALL PRINT_NUMBER
        DEC BX
    BL10:
        CMP BX,0
        JG BL8
        CALL PRN            ;  печать полученной суммы
; индивидуальная часть программы - конец    
    Mov AH,4CH
    Int 21h
  Main Endp
 ;****************************************************************
  CONVBA PROC
  CONVBA endp
;****************************************************************
  PRINTMAS PROC              ; процедура печати массива
; процедура печатает по 8 чисел в строке
; адрес начала массива записан в регистре ВР, количество элементов ;массива – в регистре СХ.
push AX
    push BX
    push DX
    push SI
 
    Mov BX,0
    Xor DX,DX
PRMAS1:
          Mov SI,BX
           SAL SI,1
           Mov AX,[DS:BP] [SI]
           push BX
           LEA BX,Buffer
           CALL CONVBA
           POP BX
           push DX
           LEA DX,Buffer
           Mov AH,09h
           Int 21h
           LEA DX,PROB
           Int 21h
           POP DX
           Inc DX
           Inc BX
          Cmp BX,CX
          Jge psmas
           CMP DX,8
           JL PRMAS2
Psmas:
           LEA DX,NL
           Mov AH,09h
           Int 21h
           Xor DX,DX
    PRMAS2:
           CMP BX,CX
           JL PRMAS1
           POP SI
           POP DX
           POP BX
           POP AX
           RET
PRINTMAS endp
;*******************************************************
  PRT PROC  ; процедура печати текста
 
  PRT ENDP
;******************************************************
  PRN PROC  ; процедура печати числа
 
  PRN ENDP
;******************************************************
Codes ends
END MAIN

Решение задачи: «Выдает ошибку Undefined symbol»

textual
Листинг программы
DATA SEGMENT
;individual variable begin
    textA DB 'Enter A : $'
    textD DB 'Enter D : $'
    textCn DB 'Enter Cn : $'
    textCk DB 'Enter Ck : $'
    textDc DB 'Enter step C: $'
    c DW ?
    a DW ?
    d DW ?
    cn DW ?
    ck DW ?
    delc DW ?
    textPA DB 'A=$'
    textPD DB 'D=$'
    textPCn DB 'cn=$'
    textPCk DB 'ck=$'
    textPDc DB 'step=$'
    textPY DB 'Y=$'
    textPC DB 'c=$'
;individual variable end
    y DW ?
    userString db 10,11 dup (?)
    error10 DB 'String out of lenght',10,13,'$'
    error20 DB 'Number out of range',10,13,'$'
    error30 DB 'Incorrect sumbol - '
    symbol DB ' ',10,13,'$'
    error40 DB 'Try again',10,13,'$'
    newLine DB 10,13,'$'
    input_data DB 'Input Data: ',10,13,'$'
    buffer DB 6 DUP (?),'$'
    answer DB 'Result : ',10,13,'$'
    Pr1 DB '  $'
DATA ENDS
STACKS segment
    DW 100 DUP (?)
STACKS ends
CODE segment
    MAIN PROC far
    Assume CS:CODE, DS:DATA, SS:STACKS
        Mov AX,DATA
        Mov DS,AX
        ;individual programm begin
        LEA DX,TextA
        CALL PRINT_TEXT      
        CALL INPUT
        Mov A,AX
        CALL New_Line
        LEA DX,TextD
        CALL PRINT_TEXT      
        CALL INPUT
        Mov d,AX
        CALL New_Line       
        LEA DX,TextCn
        CALL PRINT_TEXT     
        CALL INPUT
        Mov cn,AX
        CALL New_Line     
        LEA DX,TextCk
        CALL PRINT_TEXT       
        CALL INPUT
        Mov ck,AX
        CALL New_Line  
        LEA DX,TextDc
        CALL PRINT_TEXT   
        CALL INPUT
        Mov delc,AX
        CALL New_Line   
        LEA DX,input_data
        CALL PRINT_TEXT     
        LEA DX,TextPA
        CALL PRINT_TEXT      
        Mov AX,A
        CALL PRINT_NUMBER
        CALL New_Line       
        LEA DX,TextPD
        CALL PRINT_TEXT       
        Mov AX,d
        CALL PRINT_NUMBER
        CALL New_Line    
        LEA DX,TextPCn
        CALL PRINT_TEXT       
        Mov AX,cn
        CALL PRINT_NUMBER
        CALL New_Line   
        LEA DX,TextPCk
        CALL PRINT_TEXT     
        Mov AX,ck
        CALL PRINT_NUMBER
        CALL New_Line    
        LEA DX,TextPDc
        CALL PRINT_TEXT        
        Mov AX,delc
        CALL PRINT_NUMBER
        CALL New_Line    
        LEA DX, answer
        CALL PRINT_TEXT        
    BLOK_2:    
        Mov AX,cn      
        Mov c,AX
    BLOK_3:
        Mov AX,d   
        ADD AX,c
        CMP AX,0
        JL BLOK_4       
    BLOK_5: 
        Mov AX,c   
        ADD AX,a
        IMUL a           
        Mov Y,AX      
        JMP BLOK_6           
    BLOK_4:
        Mov BX,100
        Mov AX,d
        ADD AX,c
        CMP AX,0
        JL UPD
        Mov CX,AX
        Mov AX,BX
        CWD
        IDIV CX  
        Mov Y,AX   
    BLOK_6:   
        LEA DX,TextPY
        CALL PRINT_TEXT      
        Mov AX,Y       
        CALL PRINT_NUMBER
        CALL SPACE  
        LEA DX,TextPC
        CALL PRINT_TEXT    
        Mov AX,c 
        CALL PRINT_NUMBER
        CALL New_Line  
    BLOK_7:
        Mov AX,c           
        Add AX,delc
        Mov c,AX
    BLOK_8: 
        CMP AX,ck
        JG FIN
        JMP BLOK_3 
    UPD:
        NEG AX 
        Mov CX,AX
        Mov AX,BX
        CWD
        IDIV CX  
        Mov Y,AX
        JMP BLOK_6
    FIN:
        mov ah,1
        int 21h
        Mov AH,4CH
        Int 21h
    ;individual programm end
    MAIN ENDp
    CONVERTBIN2ASCII PROC
        push CX
        push DX
        push SI
        push AX
        Mov CX,6
    C10:
        Mov byte PTR [BX],' '
        Inc BX
        Loop C10
        Mov SI,10
        OR AX,AX
        JNS C20
        NEG AX
    C20:
        xor DX,DX
        Div SI
        Add DX,30h
        Dec BX
        Mov [BX],DL
        OR AX,AX
        JNZ C20
        POP AX
        OR AX,AX
        JNS C30
        Dec BX
        Mov byte PTR [BX],'-'
    C30:
        POP SI
        POP DX
        POP CX
        RET
    CONVERTBIN2ASCII ENDp
    READ_KEYS PROC
        push AX
        LEA DX,userString
        Mov AH,0AH
        Int 21h
        Sub CH,CH
        Mov CL,userString+1
        Add DX,2
        POP AX
        RET
    READ_KEYS ENDp
    INPUT PROC
    Inp:
        CALL READ_KEYS
        Mov BX,DX
        CALL ASCII_BIN
        JNC Valid
        CMP DI,00FFH
        JNE Inv_Char
        OR AX,AX
        JNZ Range_Er
        LEA DX,error10
        Mov AH,09h
        Int 21h
        JMP Povtor
    Range_Er:
        LEA DX,error20
        Mov AH,09h
        Int 21h
        JMP Povtor
    Inv_Char:
        LEA DX,error30
        Mov AL,[DI]
        Mov symbol,AL
        Mov AH,09h
        Int 21h
    Povtor:
        LEA DX,error40
        Mov AH,09h
        Int 21h
        JMP Inp
    Valid:   ;Sub AX,303
        RET
    INPUT ENDp
    ASCII_BIN PROC
        push BX
        push CX
        Sub AX,AX
        Sub DX,DX
        Mov DI,00FFH
        CMP CX,7
        JG No_Good
    Blanks:
        CMP byte PTR[BX],' '
        JNE Chk_Neg
        Inc BX
        Loop Blanks
        Chk_Neg:CMP byte PTR[BX],'-'
        JNE Chk_Pos
        Inc BX
        Dec CX
        CALL CONVERTASCII2BIN
        JC Thru
        CMP AX,32768
        JA No_Good
        Neg AX
        JS Good
    Chk_Pos:
        CMP byte PTR[BX],'+'
        JNE Go_Conv
        Inc BX
        Dec CX
    Go_Conv:
        CALL CONVERTASCII2BIN
        JC Thru
        CMP AX,32767
        JA No_Good
    Good:
        CLC
        JNC Thru
    No_Good:
        STC
    Thru:
        POP CX
        POP BX
        RET
    ASCII_BIN ENDP
    CONVERTASCII2BIN PROC
        push BP
        push BX
        push SI
        Mov BP,BX
        Sub BX,BX
    Chk_Pt:
        CMP DX,0
        JNZ Range
        CMP byte PTR DS:[BP],'.'
        JNE Range
        Dec CX
        Mov DX,CX
        JZ End_Conv
        Inc BP
    Range:
        CMP byte PTR DS:[BP],'0'
        JB Non_Dig
        CMP byte PTR DS:[BP],'9'
        JBE Digit
    Non_Dig:
        Mov DI,BP
        STC
        JC End_Conv
    Digit:
        Mov SI,10
        push DX
        MUL SI
        POP DX
        Mov BL,DS:[BP]
        And BX,0FH
        Add AX,BX
        JC End_Conv
        Inc BP
        LOOP Chk_Pt
        CLC
    End_Conv:
        POP SI
        POP BX
        POP BP
        RET
   CONVERTASCII2BIN ENDp
   PRINT_TEXT proc
        PUSH ax
        MOV ah,09h
        int 21h
        POP ax
        RET
    PRINT_TEXT ENDp
    PRINT_NUMBER proc
        PUSH bx
        PUSH dx
        PUSH ax
        LEA bx,buffer
        CALL CONVERTBIN2ASCII
        MOV dx,bx
        MOV ah,09h
        int 21h
        POP ax
        POP dx
        POP bx
        RET
    PRINT_NUMBER ENDp
    New_Line proc
        push dx
        lea dx,newLine
        CALL PRINT_TEXT
        pop dx
        ret
    New_Line ENDp
    SPACE proc
        push dx
        lea dx,pr1
        CALL PRINT_TEXT
        pop dx
        ret
    SPACE ENDp
CODE ENDs
END MAIN

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5
Похожие ответы