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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2009, 22:44   #1
depocomp
Пользователь
 
Аватар для depocomp
 
Регистрация: 12.05.2009
Сообщений: 14
По умолчанию Не получается использовать макрос GetStr(Assembler)

Здравствуйте!

Есть ПРОТОТИП ПРОГРАММЫ(ниже), нужно дополнить своими строками чтобы работала.
Я добавил туда две свои строки: GetStr AX,8 и OutStr Buf - не работает!
Пишет:
**Error** in-out.asm (11) GetStr(23)Illegal immediate
**Error** in-out.asm (12) OutStr(7)Undefined symbol: Buf
Хотя если просто GetChar и OutChar, без параметров задаю- работает.

Код:
----------------------------------------------------------------
; Прототип программы с использованием модели small
include macros.inc		; подключение библиотеки макросов
.model small
.stack   100h
.data
   string db 256 dup (‘$’)
.code
  start:	
mov  ax,@data
	mov  ds,aх			; загрузка сегментного регистра DS
	GetStr AX,8          	; здесь должен быть размещен Ваш код
	OutStr Buf                  ; здесь должен быть размещен Ваш код
	
	mov  ah,4ch			; выход из
	int  21h	             	; программы 
end start
--------------------------------------------------------------------

Что я делаю не так?

P.S. Программа должна показать введенную с клавиатуры строку

Последний раз редактировалось Stilet; 14.05.2009 в 12:10.
depocomp вне форума Ответить с цитированием
Старый 14.05.2009, 12:10   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Может
Код:
invoke GetStr AX,8          	; здесь должен быть размещен Ваш код
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.05.2009, 12:50   #3
depocomp
Пользователь
 
Аватар для depocomp
 
Регистрация: 12.05.2009
Сообщений: 14
По умолчанию

Нет, к сожалению не то.
Теперь картина такая:
depocomp вне форума Ответить с цитированием
Старый 14.05.2009, 13:19   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А-а-а это турбоасм...
Кстати проверь по первой ошибке нет ли русских букв в mov ds,ax
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.05.2009, 13:54   #5
depocomp
Пользователь
 
Аватар для depocomp
 
Регистрация: 12.05.2009
Сообщений: 14
По умолчанию

Да, первую ошибку исправил, спасибо, дело в этом.
А что насчет GetStr?

Последний раз редактировалось depocomp; 14.05.2009 в 14:36. Причина: скриншот
depocomp вне форума Ответить с цитированием
Старый 14.05.2009, 19:58   #6
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Вы забыли прописать путь к макросу, поэтому у вас ошибка при линковке:
Цитата:
include macros.inc ; подключение библиотеки макросов
А должно быть:
Код:
 include \masm32\include\macros.inc
Короче, вам нужно прописать полный путь к макросу!
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 14.05.2009, 22:23   #7
depocomp
Пользователь
 
Аватар для depocomp
 
Регистрация: 12.05.2009
Сообщений: 14
По умолчанию

Нет, дело не в этом.
macros.inc лежит в той же рабочей папке, что и tasm, что и мучаемый мной файл in-out.asm
На всякий случай проверил вашу теорию: создал новую папку и прописал путь к ней - результат тот же.

Еще я тут подумал: может с описанием макроса в makros.inc что-то не так?

Вот этот кусок оттуда:

Цитата:
; GetStr Buf,MaxLen ################################### #########################
; Ввод строки произвольной длины (функция 0ah int 21h).
; На входе:
; Buf+1 - адрес строки куда будет помещен ввод
; MaxLen - максимальная длина вводимой строки
; На выходе - введенная строка по адресу Buf
; ax - длина введенной строки

GetStr macro Buf,MaxLen
local m,TmpBuf
jmp m
TmpBuf label byte ;временный буфер форматом для функции 0ah (int 21h)
rept MaxLen+3 ;доп. три байта - служебная информация
db ' '
endm
m:
SaveReg <ds,es,dx,cx>
xor cx,cx
mov cs:TmpBuf,MaxLen+1
mov ah,0ah
push ds
pop es
push cs
pop ds
lea dx,cs:TmpBuf
int 21h
mov al,cs:TmpBuf+1 ;пересылка TmpBuf в Buf со сдвигом влево (для удаления служебного символа)
mov cl,al
xor ah,ah
inc cl ;длина введенной строки
inc al ;длина введенной строки
lea si,cs:TmpBuf+2 ;откуда - ds:si
lea di,buf ;куда - esi
rep movsb
LoadReg <cx,dx,es,ds>
endm

Последний раз редактировалось depocomp; 14.05.2009 в 22:27. Причина: скриншот
depocomp вне форума Ответить с цитированием
Старый 15.05.2009, 23:20   #8
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Собственно:
1. Undefined symbol: Buf
Где этот самой символ Buf ?
2. invoke не нужен, вы же не функцию вызываете, а макрос.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 16.05.2009, 15:12   #9
depocomp
Пользователь
 
Аватар для depocomp
 
Регистрация: 12.05.2009
Сообщений: 14
По умолчанию

Всем спасибо, разобрался.
Код:
GetStr string,254 
OutStr string
Рабочий код:
Цитата:
include macros.inc ; подключение библиотеки макросов
.model small
.stack 100h
.data
string db 256 dup ('$')
.code
start:
mov ax,@data
mov ds,ax ; загрузка сегментного регистра DS
; здесь должен быть размещен Ваш код
GetStr string,254
OutStr string
NextLine
OutStr string


mov ah,4ch ; выход из
int 21h ; программы
end start
depocomp вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос постоянно обрабатывает события. При открытии другой книги макрос обрывается. Ples Microsoft Office Excel 8 17.12.2016 18:15
Хочу написать макрос, не получается. Прошу помощи kzld Microsoft Office Excel 8 14.04.2009 09:51
СSS не получается Droid HTML и CSS 3 26.10.2008 14:06
не получается программирование COM Nikuzkin Общие вопросы Delphi 9 11.06.2008 14:23
Не получается..... Delpher HTML и CSS 2 25.12.2007 13:17