| Сейчас на форуме: _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 Если Вам не жалко времени, расскажите как вычислить это смещение, если я захочу например ещё добавить код для нескольких букв...

 Для печати