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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2012, 00:06   #1
galaxyblazer
Пользователь
 
Регистрация: 16.03.2012
Сообщений: 16
По умолчанию Проверка строки

Мне дана переменная lit1 и ее значение - from-sql-active , задание следующее: Проверить 1-й символ: если его 5-й розряд единица , то сделать цыкличное смещение на 3 байта и поместить результат в строку lit2; иначе поменять символ "-" на "_". Ясно что задание некоректное , поетому предположу что мне нужно проверить строку lit1 (а точнее ёе 5 елемент ) потом , если етот елемент имеет значение 1 , мне нужно сделать смещение и записать все ето в строку lit2 , в другом случае мне нужно поменять символи .

А теперь к делу..... асемблер только недавно начал учить и еще не все понятно .... смещение и запись в другую строку я сделаю , почти понятно как поменять "-" на "_" ...но не полностью поетому не откажусь от идей . И совсем не ясно как проверить именно 5-й символ строки. Буду рад любой помощи.
Я НЕ ПРОШУ ПИСАТЬ ВСЁ ЗАДАНИЕ! МНЕ БУДЕТ ДОСТАТОЧНО ФРАГМЕНТА КОДА КОТОРЫЙ ПОМОЖЕТ МНЕ ПРОВЕРИТЬ ИМЕННО 5-Й СИМВОЛ МОЕЙ СТРОКИ.

Последний раз редактировалось galaxyblazer; 17.03.2012 в 01:32.
galaxyblazer вне форума Ответить с цитированием
Старый 17.03.2012, 08:35   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Ясно что задание некоректное
Совсем нет - всё вполне корректно и понятно. Каждый символ = байт информации в котором 8 разрядов. соответственно нам нужно проверить значение 5 бита первого символа. Если у вас в al будет содержаться ваш символ, то код проверки будет следующий:
Код:
test al,00010000b
jz if_no ; переход на обработку если разряд нулевой
...... ; здесь обрабатываем когда разряд содержит 1
jmp end_if
if_no:
..... ;здесь нужно обработать когда разряд содержит 0
end_if:
.... ; здесь дальнейший код программы
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 17.03.2012, 23:00   #3
galaxyblazer
Пользователь
 
Регистрация: 16.03.2012
Сообщений: 16
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
Совсем нет - всё вполне корректно и понятно. Каждый символ = байт информации в котором 8 разрядов. соответственно нам нужно проверить значение 5 бита первого символа. Если у вас в al будет содержаться ваш символ, то код проверки будет следующий:
Код:
test al,00010000b
jz if_no ; переход на обработку если разряд нулевой
...... ; здесь обрабатываем когда разряд содержит 1
jmp end_if
if_no:
..... ;здесь нужно обработать когда разряд содержит 0
end_if:
.... ; здесь дальнейший код программы
в al должна быть вся строка я правильно понимаю?
galaxyblazer вне форума Ответить с цитированием
Старый 17.03.2012, 23:07   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
в al должна быть вся строка я правильно понимаю?
судя по вопросу, вам нужно для начала почитать что-либо об основах ассемблера: Абеля, Нортона или т.п. Учебников и сайтов много...
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 18.03.2012, 11:45   #5
galaxyblazer
Пользователь
 
Регистрация: 16.03.2012
Сообщений: 16
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
судя по вопросу, вам нужно для начала почитать что-либо об основах ассемблера: Абеля, Нортона или т.п. Учебников и сайтов много...
кое что почитал... понял что задал дурацкий вопрос.. но раз мне нужно проверить 5-й розряд , то сдесь test al, ... мне нужно написать 00001000b а не 00010000b.
galaxyblazer вне форума Ответить с цитированием
Старый 18.03.2012, 12:43   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
но раз мне нужно проверить 5-й розряд
разряды в двоичных числах всегда нумеруются СПРАВА НАЛЕВО.

00000001 - 1-й разряд
00000010 - 2-й разряд
...
00010000 - 5-й разряд
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.03.2012, 12:45   #7
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
но раз мне нужно проверить 5-й розряд , то сдесь test al, ... мне нужно написать 00001000b а не 00010000b.
когда вам нужно будет вытащить десятки из числа 4576 вы будете брать 5, а не 7? здесь используется обычная форма записи: от старшего к младшему.

upd.
упсь, не успел)
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 18.03.2012, 13:13   #8
galaxyblazer
Пользователь
 
Регистрация: 16.03.2012
Сообщений: 16
По умолчанию

Если для того что бы в al збить первый символ я использую вот такой код

PrintString:
mov al,[bx]

ето будет правильно?
galaxyblazer вне форума Ответить с цитированием
Старый 18.03.2012, 13:22   #9
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
ето будет правильно?
в целом - да... но некоторые из компиляторов потребуют более явного указания:

Код:
mov al, byte ptr [bx]
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 18.03.2012, 15:17   #10
galaxyblazer
Пользователь
 
Регистрация: 16.03.2012
Сообщений: 16
По умолчанию

всем спасибо.

Последний раз редактировалось galaxyblazer; 18.03.2012 в 16:05.
galaxyblazer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проверка строки tinton Помощь студентам 6 09.11.2011 15:39
Проверка значений строки iami Microsoft Office Excel 2 06.07.2011 18:16
Проверка строки dosha Общие вопросы C/C++ 1 27.12.2010 23:46
проверка строки Артэс Общие вопросы C/C++ 13 21.01.2010 00:28
Проверка строки SL1CK Общие вопросы C/C++ 4 08.06.2009 18:41