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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.09.2018, 20:24   #1
Fillimon
Пользователь
 
Регистрация: 16.04.2018
Сообщений: 13
По умолчанию Ошибка в коде (TASM)

Здравствуйте, написал программу, где в подключаемом модуле открывается файл, считывается информация с него и выводится на экран, затем файл закрывается.
Проблема такая, когда модуль отработал, и управление возвращается основной программе, я прошу программу вывести строку "exit_message", а вместо этого она выводит данные из сегмента модуля, т.е. содержимое буфера... видимо я как-то не так настроил сегменты, помогите плз.
Основная программа -
Код:
.model small
stk segment stack
    db 256 dup (0)
stk ends

ldata segment para public "data"
	exit_message db 'Press any key to exit...$';та самая строка, что не выводится
ldata ends

    extrn module:far     ; процедура из модуля
code segment
    assume cs:code, ds:ldata

start:
    mov ax, ldata
	mov ds, ax
		
	call module  ; вызываю процедуру модуля

	mov ah,09h   ;прошу вывести строку
	lea dx,exit_message
	int 21h
	mov ah,1  ;задержка закрытия программы
	int 21h
exit:
    mov ax, 4c00h
	int 21h
	
code ends
end start
Модуль -
Код:
.model small
stk segment stack
    db 256 dup (0)
stk ends

ldata segment para public "data"
    buf       db 20,?,20 dup (' ') ;выводится это и следующие 2 строки (до знака $)
	file_path db 20 dup (0)
    msg_input db 'Enter the path: ',0dh,0ah,'$'
	err1      db 'Error when opening!',0dh,0ah,'$'
	handle    dw ?
	char      db ?
	msg_out   db 0ah,0dh,0ah,0dh,'Press space to show next page.',0dh,0ah,'$'
ldata ends
	 
	
    public module	
code segment
    assume cs:code, es:ldata, ds:ldata

module proc far 
    mov ax, ldata
	mov ds, ax
	mov es, ax
	
    call Enter_the_path
	
	call open_file
	jc exit
	
	call read_file
	
	call close_file
	exit:
	ret	 
module endp
Fillimon вне форума Ответить с цитированием
Старый 04.09.2018, 08:24   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от Fillimon Посмотреть сообщение
Модуль
так это-же не модуль твоей программы, а самостоятельная программа (со-своими секциями). Или собирай этот модуль как бинарник, или перед вызовом его из родителя, сохраняй в родителе DS.

А вообще лучше использовать макросы - напиши один раз библиотеку макросов для каждого случая жизни и подключай её инклудами к своим проектам.
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку в коде (TASM) Fillimon Помощь студентам 3 22.05.2018 22:07
Java. Ошибка. Компилируется, но не запускается. Ошибка duplicate class. Проблема не в коде. nevender Общие вопросы по Java, Java SE, Kotlin 2 13.02.2016 13:24
Где ошибка в этом исходном коде на языке Си? Или ошибка в Excel? ArchiCurtis Помощь студентам 2 07.04.2012 14:16
Ошибка в коде, ошибка в css или это проблема с совместимостью с браузерами? ankris HTML и CSS 5 23.11.2010 16:58
Ошибка со счетчиком адреса (Assembler TASM) Fata1ity Помощь студентам 0 28.05.2010 03:08