Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массив строк, как его реализовать? 
:(
    Опции темы
TP@MB@Y
Дата 11.3.2005, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 18.12.2004
Где: Москва

Репутация: 2
Всего: 4



Я последовательно ввожу строки с консоли. Мне нужно их сохранить в памяти, для дальнейшего использования.
Я пытаюсь делать что то типа этого:

Код

mas db 256 dup (?)
....
....
mov si,0
AA:
  <ввод строки s>
 add mas,si
 mov mas,s //нелегальная адресация =)
 inc si
 cmp si,word ptr count_f
 jb AA

Как правильно это сделать?

Это сообщение отредактировал(а) TP@MB@Y - 11.3.2005, 18:23
PM   Вверх
Chingachguk
Дата 12.3.2005, 03:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Напиши сначала тот же код на Паскале или СИ, а то так непонятно, что ты хочешь сделать ;)


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Akina
Дата 12.3.2005, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



Код

buffer db сколько-то dup 0
...
lds dx,buffer
repeat:
mov byte ptr ds:dx,79d
mov ah, 0Ah
int 21h ; ввод очередной строки
add dx,byte ptr ds:dx
inc dx
...
; если надо продолжать то
jmp repeat



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
TP@MB@Y
Дата 12.3.2005, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 18.12.2004
Где: Москва

Репутация: 2
Всего: 4



Akina Спасибо.

Chingachguk
Код

var mas:array[1..256] of string;
....
....
for i:=1 to n do
 readln(mas[i]);


я сделал так:

Код

mov si,0
BB:
 readln [objects+si]
 inc si
 cmp si,word ptr count_f
 jb BB


где

Код

readln macro s
 push ax
 push dx
 push bx
 push cx
 mov ah,3fh
 mov bx,0
 mov cx,len
 mov dx,offset s
 int 21h
 mov bx,ax
 mov [s+bx],'$'
 pop cx
 pop bx
 pop dx
 pop ax
endm


Правда еще не проверял правильность работы, но прога компилиться =))

Это сообщение отредактировал(а) TP@MB@Y - 12.3.2005, 16:19
PM   Вверх
TP@MB@Y
Дата 12.3.2005, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 18.12.2004
Где: Москва

Репутация: 2
Всего: 4



Код

objects db 256 dup (0)
....
mov si,0
BB:
 readln objects[si]
 inc si
 cmp si,count_f
 jb BB
 
; дальше я проверяю то что ввел

 mov si,0
CC:
 write objects[si]
 inc si
 cmp si,count_f
jb CC


Результат: выводится сначала последняя введенная строка, а потом абракадабра.

PS
Код

; вывод строки s
write macro s
 push ax
 push dx
 mov ah,9
 mov dx,OFFSET s
 int 21h
 pop dx
 pop ax
endm


; ввод строки
readln macro s
 push ax
 push dx
 push bx
 push cx
 mov ah,3fh
 mov bx,0
 mov cx,len
 mov dx,offset s
 int 21h
 mov bx,ax
 mov [s+bx],'$'
 pop cx
 pop bx
 pop dx
 pop ax
endm


Что не так?
PM   Вверх
Chingachguk
Дата 12.3.2005, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Этот перевод на asm не верен, так как ты не переходишь на следующую строку массива верно, или я не понимаю смысла "objects".

Код

  len: word;
  mas: array[1..3] of string; { Each string is 255 bytes data + 1 byte length }
begin
  writeln;
  writeln('Start !');

  len:=sizeof(string);
  asm
    { String in Pascal: Length (BYTE) + DATA }
    mov  si,offset mas
    mov  di,0 { Number of string }

@@GetNextString:

    mov  ah,3fh
    mov  bx,0
    mov  cx,len
    dec  cx
    lea  dx,[si+1]
    int  21h
    mov  bx,ax
    mov  byte ptr [si+bx+1],'$'
    mov  [si],al { Length of string }

    add  si,len
    inc  di
    cmp  di,3
    jb   @@GetNextString

  end;
  writeln(mas[1]);
  writeln(mas[2]);
  writeln(mas[3]);


Каждая строка в языке Паскаль длиной 255 байт плюс 1 - ее длина (первый байт). Однако если бы я написал string[33], то у меня была бы строка длиной 32 байта плюс 1 байт на длину.

Поэтому len у меня - длина элемента (каждой строки) массива.


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
TP@MB@Y
Дата 13.3.2005, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 18.12.2004
Где: Москва

Репутация: 2
Всего: 4



Chingachguk
Я понял то, что ты делаешь, но у меня вопросы есть smile

1)Я предпологал, что каждый элемент (байт) массива objects db 256 dup (?) будет указателем на начало каждой строки, которые будут храниться где то в памяти =)

2)Было бы хорошо еслибы у тебя вывод элементов был бы тоже на асме.

3)А не проще ли эту задачу решить с помощью записи в файл и потом просто читать из него?
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.