Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос про адресацию, Обычная программка для ДОС 
:(
    Опции темы
St. Andrew
Дата 17.6.2005, 02:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: 1
Всего: 8



У меня есть небольшой вопрос по поводу адресации. Грубо говоря, я хочу получить второй символ из цепочки байтов. Для этого я беру адрес первого байта, затем инкрементирую его. А потом - хочу получить в al символ, находящийся по новому адресу. Вот здесь возникает проблема.
Мой код:

Код

slovo db 'les'
y dw ?
....................
mov y, offset slovo
inc y
mov dx, y
mov al, [dx]


В строке mov al, [dx] компилятор выдает ошибку. А вот когда я попробовал просто использовать регистр bp, то ошибок не было, но и символ получается не тот. Другие регистры использовать не могу - все заняты...

Код

slovo db 'les'
y dw ?
....................
lea bp, slovo
inc bp
mov al, [bp]


У меня такое подозрение, что я неправильно с адресацией работаю, но проверить никак не могу...не учили нас этому толком. Нужен ваш опытный совет smile
--------------------
Оглянитесь вокруг! В мире так много прекрасного!
PM MAIL WWW ICQ   Вверх
oleg1973
Дата 17.6.2005, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

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



Код

mov esi,slovo+1
lodsb

и все ) получаем в al нужный байт и esi автоматом инкрементируется на 1


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
Payne
Дата 17.6.2005, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Детектив
*


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

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



У меня все работало. Для иллюстрации я использовал функцию 02h прерывания 21h - в dl помещал смещение на символ, и на экран выводился нужный символ! Если вместо bp или другого регистра юзать dx, то выдается сообщение об ошибке. Не помню точно, но вроде в пособиях говорится, что нельзя напрямую через dx передавать что-то там (говорю же - не помню точно).
Вот мой кусок кода:
Код

CSEG    segment
assume    cs:CSEG, ds:CSEG, ss:CSEG, es:CSEG
org    100h                                                       ;создаем .com-файл
begin:
    mov    y, offset message                   ;помещаем в y адрес первого символа
    inc    y                                             ;увеличиваем y
    
    mov    bp, y                                       ;помещаем y в bp
    mov    dl,[bp]                                    ;смещение bp помещаем в dl
    mov    ah,02h                                   
    int    21h                                        ;вызываем функцию 02h прерывания 21h - вывод символа

    mov    ah,10h
    int    16h                                        ;ждем нажатия клавиши
    int    20h                                        ;выходим из программы

                ;данные
    message db 'abc'
    y    dw '0'

CSEG    ends
end    begin

Если ты создаешь exe-шник, а не .com-файл, то вполне возможно, что другой символ получаешь из-за этого. Лучше создавай com. Данный код я привел для иллюстрации. Если тебе нужно просто получить символ в регистр, то не нужно занимать регистры dl и ax. Кстати, если их нужно будет занять, то можешь поместить старые значения в стек, а после необходимых операций извлечь их оттуда.

Цитата(St @ 17.6.2005, 02:22)
У меня такое подозрение, что я неправильно с адресацией работаю, но проверить никак не могу...не учили нас этому толком

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

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

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


 




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


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

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