Выдает ошибку 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д