Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2013, 22:24   #1
dosha1302
 
Регистрация: 09.12.2012
Сообщений: 4
По умолчанию ошибка Forward reference needs override

помогите пожалуйста исправить ошибку.Язык ассемблер.Итак,у меня такое задание,которое называется РАЗДЕЛЬНАЯ ТРАНСЛЯЦИЯ.Ее надо провести с помощью extrn и pгblik.Я разделила программу на 2 модуля.Но проблема в том,что при трансляции 2го модуля возникает такая ошибка в 40 строке Forward reference needs override (см.фото)Я понимаю,что это из-за атрибутов дальности...Но как исправить не знаю.Вообще я новичок,и в принципе не шарю...иногда даже не понимаю.Поэтому прикладываю файлы с кодом.Пишите о моих косяках,буду рада!!!
ПЕРВЫЙ МОДУЛЬ
Код:
.model small					
   cdata segment para	common "data"	;общий сегмент данных							
message2 db 'Stroka1:$'			;выводимое приглашение для ввода символа
message5 db 'Result1:$'			;выводимая строка-результат
FullData STRUC					;описание структуры даных для хранения символов
	stroka1 db 12 dup(0)
FullData ENDS

FD FullData 1 dup(<>)			;выделяем память для структуры
.stack 256h						;размер стека 256h байт
   cdata ends
.code							;описание сегмента кода
assume ds:cdata,es:cdata
extrn  OUTPUT:far
extrn  INPUT:far
extrn  NEWSTR:far
extrn  PROCEDURE:far
main:
mov ax,@data				;загрузка адреса
	mov ds,ax					;сегмент данных
	

	lea dx, message2			;загрузка эффективного адреса сообщения в регистр DX
	call OUTPUT					;вызов процедуры вывода
	mov cx,10					;максимальный размер строки 10
	lea bx,FD.stroka1			;загрузка эффективного адреса в регистр BX
	call INPUT					;вызов процедуры ввоода
	
	call NEWSTR					;вызов процедуры перехода на новую строку
	lea dx, message5			;загрузка эффективного адреса сообщения в регистр DX
	call OUTPUT					;вызов процедуры вывода
	lea bx, FD.stroka1			;загрузка эффективного адреса в регистр BX
	call PROCEDURE				;вызов процедуры работы над строками
	lea bx,FD.stroka1			;загрузка эффективного адреса в регистр DX
	mov cx,[bx+10]
	xor si,si
@m1:
	mov dl,[bx+si]
	mov ah,02h
	int 21h
	inc si
	loop @m1
	
	mov ah,0					;ввод символа без эха
	int 16h						;прерывание BIOS
	mov ah,4ch					;функция для выхода в ОС
	int 21h						;прерывание DOS
code ends
end main						;

Последний раз редактировалось dosha1302; 04.03.2013 в 22:27.
dosha1302 вне форума Ответить с цитированием
Старый 04.03.2013, 22:25   #2
dosha1302
 
Регистрация: 09.12.2012
Сообщений: 4
По умолчанию

А вот второй модуль в котором ошибка в 40 строке
Код:
.model small                    
     cdata segment para	common "data"   ;общий сегмент данных                           
message2 db 'Stroka1:$'         ;выводимое приглашение для ввода символа
message5 db 'Result1:$'         ;выводимая строка-результат
FullData STRUC                  ;описание структуры даных для хранения символов
    stroka1 db 12 dup(0)
FullData ENDS
 
FD FullData 1 dup(<>)           ;выделяем память для структуры
.stack 256h                     ;размер стека 256h байт
     cdata ends
.code                           ;описание сегмента
assume ds:cdata,es:cdata

INPUT proc far                  ;процедура для ввода символов
    xor di,di                   ;обнуляем di-счетчик символов
    
m1: 
    mov ah,00h                  ;функция 00h - ввод символа без эха
    int 16h                     ;прерыванием BIOS
    cmp al,32                   ;если код символа <32
    jl m2                       ;переходим к m2
    cmp di,cx                   ;сравниваем значение di и cx
    je m1                       ;переходим к m1
    cmp al,126                  ;если код символа >126
    jg m1                       ;переходим к m3
    jmp m5                      ;иначе переходим к m5
    
m2:
    cmp di,0                    ;сравниваем значение di с нулем
    je m1                       ;переходим к m1
    cmp al,8                    ;если нажата клавиша BSpace
    je m4                       ;перходим к m4
    cmp al,13                   ;если нажата клавиша Enter
    je m3                       ;переходим к m3
    jmp m1                      ;иначе переходим к m1
    
 
m3:                             ;Enter
    call NEWSTR                 ;вызов процедуры перехода на новую строку
    jmp quit                    ;переход к метке quit
    
m4:                             ;BSpace
    mov dl,al                   ;запись символа в dl для вывода на экран
    mov ah,02h                  ;вывод символа на экран                 
    int 21h                     ;прерывание DOS
    push dx                     ;сохраняем введенный символ в стеке
    mov dl,' '                  ;стирание символа под курсором(пробел)
    mov ah,02h                  ;вывод символа на экран
    int 21h                     ;прерывание DOS
    pop dx                      ;извлечение dx из стека
    mov ah,02h                  ;вывод символа на экран
    int 21h                     ;прерывание DOS
    dec di                      ;декремент значение di
    jmp m1                      ;переход к m1
    
m5:
    mov [bx+di],al              ;запись в bx со смещением символы
    inc di                      ;инкремент di
    mov dl,al                   ;запись символа в dl для вывода на экран
    mov ah,02h                  ;вывод символа на экран
    int 21h                     ;прерывание DOS
    jmp m1                      ;переход к m1
    
quit:
    ;mov al,di                  ;запись в al значение 36
    mov[bx+10],di               ;запись в bx со смещением символал
    ret                         ;возврат из подпрограммы
INPUT endp
 
OUTPUT proc far             ;процедура вывода
    mov ah,09h                  ;функция 09h - вывод строки на экран
    int 21h                     ;прерывание DOS
    ret                         ;возврат из подпрограммы
OUTPUT endp
 
PROCEDURE proc far              ;процедура работы со строками   
mp1:
    xor si,si                   ;обнуление счетчика
    xor cx,cx
    mov cx,[byte ptr bx+10]
 
mp2:
    mov al,[bx+si]              ;занести в al значение ячейки регистра bx
    cmp cx,si                   ;сравнить значение al с 36
    je quitp                        
    cmp al,48                   ;сравниваем значение ah со значением 48
    jl mp3
    cmp al,57
    jg mp3
    inc si                      ;инкрементируем si
    jmp mp2                     ;переход к m1
    
mp3:
    mov al,[bx+si+1]
    mov [bx+si],al
    inc si
    cmp cx,si
    je mp4
    jmp mp3
mp4:
    mov [bx+si],' '
    dec cx
    mov [bx+10],cl
    jmp mp1
        
quitp:
    ret                         ;возврат из подрограммы
PROCEDURE endp
 
NEWSTR proc far            ;процедура перехода на новую строку
    push dx                     ;сохранение значений регистров dx
    push ax                     ;и ax в стеке
    mov dl,10                   ;10 - перевод на новую строку
    mov ah,2                    ;функция 2 - вывод символа на экран
    int 21h                     ;прерыванием DOS
    mov dl,13                   ;13 - возврат курсора на начало строки
    mov ah,2                    ;функция 2 - вывод символа на экран
    int 21h                     ;прерыванием DOS
    pop ax                      ;возвращение значений регистров ax
    pop dx                      ;и dx из стека
    ret                         ;возврат из подпрограммы
NEWSTR endp
public INPUT
public OUTPUT
public PROCEDURE
public NEWSTR
end
dosha1302 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
пишет ошибка invalid procedure or function reference Emilg18 Паскаль, Turbo Pascal, PascalABC.NET 2 13.05.2012 17:20
ошибка линкера: indefined reference to 'EnumPrintersW@28' agronomchek Помощь студентам 5 04.03.2012 16:38
Ошибка при подключении к базе данных Object reference not set to an instance of an object. lowercase ASP.NET 1 20.11.2011 22:48
Ошибка "Circular unit reference to". Вадим Буренков Общие вопросы Delphi 4 05.07.2009 12:04