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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2009, 19:32   #1
Crivel
Delphi\C++
Форумчанин
 
Аватар для Crivel
 
Регистрация: 18.06.2008
Сообщений: 277
По умолчанию Обращение к char

Вот такая задача, есть str db 'abc123',0 и ch db '',0
Нужно в ch записать байт(ну символ т.е char) из str в позиции 2. Как на дельфи, то знаю -
Код:
ch := str[2];
А как в фасме ума не приложу
Crivel вне форума Ответить с цитированием
Старый 30.07.2009, 19:37   #2
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Что-то типа этого?
Код:
mov al,[str+1] ; отсчет от 0
mov [ch],al
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 30.07.2009, 19:55   #3
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Цитата:
mov [ch],al
плохое имя ch компилятор может выдать ошибку неверного обращения к памяти, посчитав его регистром...
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 30.07.2009, 20:23   #4
Crivel
Delphi\C++
Форумчанин
 
Аватар для Crivel
 
Регистрация: 18.06.2008
Сообщений: 277
По умолчанию

Goodwin98, спасибо большое, а вот ещё вопрос, как узнать длину строки? т.е как я понимаю тут нужно что-то типа цикла.
Код:
cmp ; проверка конец ли строки
jmp loop
loop:
mov al,[str+1]
mov [ch],al
Но как узнать когда строка кончется? а то ошибку выдаст...
Crivel вне форума Ответить с цитированием
Старый 30.07.2009, 20:25   #5
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Цитата:
плохое имя ch компилятор может выдать ошибку неверного обращения к памяти, посчитав его регистром...
Да и вправду. Не подумал об этом
str кстати тоже не стоит писать.
Цитата:
Но как узнать когда строка кончется? а то ошибку выдаст...
Под виндой обычно (но не всегда. В паскале, например, длина строки, вроде, хранится в ее первом байте) в конце строки стоит 0.
Если строка задается прямо в коде програмы, то считать ее длину не надо можно просто прописать примерно так.
Код:
string      db 'сама строка',0
strLen     equ $-string ; ее длина
Но если динамически, то можно и так
Код:
     lea     edi,string
     xor     ecx,ecx
     xor     al,al
@@:
     inc     ecx 
     scasb
     jnz     @b
; в ecx будет длина строки
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 30.07.2009 в 21:20.
Goodwin98 вне форума Ответить с цитированием
Старый 31.07.2009, 13:50   #6
SynEnergizer
Пользователь
 
Регистрация: 14.07.2009
Сообщений: 51
По умолчанию

Код:
string      db 'сама строка',0
strLen     equ $-string ; ее длина
Но если динамически, то можно и так
Код:
     lea     edi,string
     xor     ecx,ecx
     xor     al,al
@@:
     inc     ecx 
     scasb
     jnz     @b
Это если строка нулем заканчивается, а не $.
А так после scasb добавить cmp al,'$'
SynEnergizer вне форума Ответить с цитированием
Старый 31.07.2009, 14:00   #7
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Цитата:
Это если строка нулем заканчивается, а не $.
А так после scasb добавить cmp al,'$'
Если статически, то без разницы, а если динамически, то надо вместо xor al,al писать mov al,'$'. Scasb срaвнивает байт в [edi] c тем, который в al и увиличивает edi.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка cannot convert from 'char *' to 'char [100]' Stellvertreter Общие вопросы C/C++ 5 30.05.2010 00:02
FastString::FastString(const char *psz) : m_psz(new char [strlen(psz) + 1]) { strcpy(m_psz, psz); } lebedun Общие вопросы C/C++ 3 27.03.2009 03:43
отличие char* str ="..." от char ...[]="..." StarWorm Общие вопросы C/C++ 2 20.11.2008 08:48
Обращение Акашаев Нурлан Общие вопросы Delphi 5 26.06.2008 16:02
Есть таблица - В ней три поля int, char, char нужно чтобы данные заносились в таблицу Mysql Muahahaha PHP 8 27.03.2008 11:17