| Сейчас на форуме: _MBK_ (+5 невидимых) |
| eXeL@B —› Вопросы новичков —› Прошу помоч разобраться с простейшей программой 2... |
| Посл.ответ | Сообщение |
|
|
Создано: 29 сентября 2010 09:45 · Личное сообщение · #1 Извините меня ещё раз господа программисты... Я вот с какой проблеммой сталкнулся, написал простую программу для вывода на монитор букв... Как написано в уроке на сайте: bitfry.narod.ru/04.htm - "Например, могу предложить задание: Сделайте так, чтоб эта программа выводила на экран буквы ABCDEFGH и при этом не содержала буквы в явном виде до выполнения кода. Если у вас это получится, ставлю вам 4 балла (или по новой системе 94 ."ABCDIFGH выводятся, я смог, но вот проблема, немогу вывести остальные буквы... Если идти тем же путём, то получаются каракули на выводе и проц пищит как мышь... Посоветуйте, что я делаю не так... Программу выкладываю на обозрение (exp01 - работает, exp02 - с дописанными буквами "IJKL" неработает) + расскажите зачем в В Hiew'e в конце программы надо писать 00 00 00 00 24 24 понятно - это знак "$" а нулевые байты зачем??? Автор пока необъясняет, но интересно... 4ed9_28.09.2010_CRACKLAB.rU.tgz - exp.rar
![]() |
|
|
Создано: 29 сентября 2010 13:51 · Личное сообщение · #2 Причина как раз в том что не разобрался для чего 00 00 00 00 24. А это и есть буфер в который ты помещаешь выводимые символы. Этот буфер в исходной программе расположен по смещению 133h (смотри первую команду) seg000:0100 mov bx, 133h и расположен сразу после кода. Добавив код для вывода следующих буков, ты отодвинул этот буфер (код удлиннился) и теперь он у тебя находится по смещению 149. Измени первую команду на seg000:0100 mov bx, 149h и будет тебе счастье. ----- 127.0.0.1, sweet 127.0.0.1 ![]() |
|
|
Создано: 29 сентября 2010 14:11 · Поправил: magistr011 · Личное сообщение · #3 Спасибо огромное, всё получилось!!! Я догадывался, что это буфер, пытался его расширить (нулей в конце побольше воткнуть) но до того, что надо сместить адрес я сам недошёл... Теперь бы разобраться как вычислять это смещение... Автор сайта наверное припас это на другую тему, а я лезу "поперёк батьки в пекло". Просто меня с самого начала интересовало, почему автор взял адрес "0133h", а не "0117" например или "0325", ведь вариантов много... OKOB Если Вам не жалко времени, расскажите как вычислить это смещение, если я захочу например ещё добавить код для нескольких букв...Ещё раз благодарю Вас за помощь. ![]() |
|
|
Создано: 29 сентября 2010 17:24 · Поправил: OKOB · Личное сообщение · #4 программа в HIEW из урока приведенного тобой выглядит так: Code:
По адресу 33 (а это файловое смещение) начинается буфер с 4-мя нулями и $. 133 это смещение на этот же буфер при загрузке этого файла на исполнение в память. Т.е. в памяти начало твоей програмы сдвинуто на 100h (на размер PSP :ru.wikipedia.org/wiki/Program_Segment_Prefix) Да и хватит ассемблировать в HIEW, переходи на компилятор. Тогда проблем со смещением не будет. org 100h mov bx, offset buffer ..... int 20h buffer db 4 dup(0), '$' компилятор сам его вычислит. ----- 127.0.0.1, sweet 127.0.0.1 ![]() |
|
|
Создано: 29 сентября 2010 21:09 · Личное сообщение · #5 |
|
|
Создано: 30 сентября 2010 13:33 · Личное сообщение · #6 OKOB Благодарю ![]() Всё, что я хотел получилось... Вот, выкладываю... Dart Sergius Дойдёт дело и до MASMа... Спасибо всем за помощь ещё раз. 8b3f_30.09.2010_CRACKLAB.rU.tgz - alfeng.com
![]() |
| eXeL@B —› Вопросы новичков —› Прошу помоч разобраться с простейшей программой 2... |
| Эта тема закрыта. Ответы больше не принимаются. |

."



Спасибо огромное, всё получилось!!! Я догадывался, что это буфер, пытался его расширить (нулей в конце побольше воткнуть) но до того, что надо сместить адрес я сам недошёл... Теперь бы разобраться как вычислять это смещение... Автор сайта наверное припас это на другую тему, а я лезу "поперёк батьки в пекло". Просто меня с самого начала интересовало, почему автор взял адрес "0133h", а не "0117" например или "0325", ведь вариантов много... OKOB Если Вам не жалко времени, расскажите как вычислить это смещение, если я захочу например ещё добавить код для нескольких букв...

Для печати