Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Модульное программирование

29K
25 декабря 2008 года
Rifler
24 / / 12.05.2008
Здраствуйте уважаемые.
Вобщем задача состоит в конкатенации двух строк, одна в главном модуле, другая соответственно во вспомогательном.
Насколько я вижу задачу - в гл. проге в сегменте данных определена строка предположим s1 db 'Hello ',0, а также буфер file_buf db 256 dup(0) (куда мы обе строки будем соединять). Ну и еще пару переменных по вкусу.
В модуле в сегменте данных тоже строка, например s2 db 'world!',0

Как мне передать строку из модуля в гл. прогу и записать в буфер? Чтото в инете порыскал-порыскал насчет этого, ничего не нашел
261
25 декабря 2008 года
ahilles
1.5K / / 03.11.2005
DOS или Windows?
29K
25 декабря 2008 года
Rifler
24 / / 12.05.2008
Dos
TAsm
5
25 декабря 2008 года
hardcase
4.5K / / 09.08.2005
[Offtop]
Под CIL будет вообще тривиально.
Код:
.method private hidebysig static void  Main() cil managed
{
  .entrypoint
  // Code size       22 (0x16)
  .maxstack  2
  .locals init ([0] string str1,
           [1] string str2,
           [2] string result)
  IL_0000:  nop
  IL_0001:  ldstr      "Hello "
  IL_0006:  stloc.0
  IL_0007:  ldstr      "world!"
  IL_000c:  stloc.1
  IL_000d:  ldloc.0
  IL_000e:  ldloc.1
  IL_000f:  call       string [mscorlib]System.String::Concat(string,
                                                              string)
  IL_0014:  stloc.2
  IL_0015:  ret
} // end of method Program::Main
1.6K
25 декабря 2008 года
Vov4ick
476 / / 01.02.2007
hardcase А теперь пожалуйста тривиально найдите\напишите точкасеть интерпретатор для ДОС.
Rifler Используйте волшебное слово public:
public <название переменной или функции>
в том модуле, где она определена, а в модуле, для которого она внешняя, слово extrn:
extrn <название переменной или функции> : <размер>
где размер - byte, word, dword и т. д.
29K
25 декабря 2008 года
Rifler
24 / / 12.05.2008
Цитата: Vov4ick
Rifler Используйте волшебное слово public:
public <название переменной или функции>
в том модуле, где она определена, а в модуле, для которого она внешняя, слово extrn:
extrn <название переменной или функции> : <размер>
где размер - byte, word, dword и т. д.


За это спасибо, но загвоздка не в том - как из модуля в модуль передать данные? Через стек?

у меня сейчас такая структура
Модуль:

Код:
public proc1
dts segment
soob2 db "world","$"; вторая часть строки
dts ends
cods segment
assume cs:cods
proc1 proc far
;пока пустая
ret
proc1 endp
cods ends
end



Главная
Код:
extrn proc1: far
sst segment stack "stack"
dw 10 dup (?)
sst ends

dats segment
soob1 db "Hello ","$"; первая часть строки
file_buf db 256 dup(0); эт буфер чтобы конка.. кароче соединить две
                              ;строки
sizes dw 0; эт тоже понадобится :)
dats ends

cods segment
assume ss:sst, ds:dats, cs:cods
nn: mov ax, dats
mov ds, ax
; загоняем первую строку в буфер
mov cx,256
mov si,0
lea dx,soob1
l1: mov dl, soob1[si]
    cmp dl,"$"
    je l2
    mov file_buf[si], dl
loop l1
l2: mov sizes, si; сохраним размер первой строки, чтобы знать куда
                    ;дописывать вторую
call proc1
mov ah, 4ch
int 21h
cods ends
end nn


Как теперь строку из модуля загнать в этот буфер?
1.6K
25 декабря 2008 года
Vov4ick
476 / / 01.02.2007
А чем передача данных между модулями отличается от передачи в процедуру внутри модуля? В регистрах, в памяти, в стеке. Все ресурсы машины к вашим услугам. В чём сложность?
Используй один сегмент данных на оба модуля, ни к чему их много. Просто называй одним названием. Нужные переменные объявляй как общие, как я выше написал, вот и всё.
29K
25 декабря 2008 года
Rifler
24 / / 12.05.2008
Вроде разобрался
Не подскажешь как скомпилировать модуль вмсете с главной программой?
Что там писать tasm ??? и tlink ???
Я помню что их нужно как то вместе компилить, а не по отдельности. А вот синтаксис забыл
1.6K
25 декабря 2008 года
Vov4ick
476 / / 01.02.2007
tasm ключи модуль1.asm
tasm ключи модуль2.asm
tlink ключи модуль1.obj модуль2.obj
Запускай без параметров и читай, что пишут. Назначение всех параметров хорошо описано.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог