Сейчас на форуме: _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 понятно - это знак "$" а нулевые байты зачем??? Автор пока необъясняет, но интересно... ![]() ![]() |
|
Создано: 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 ![]() Ещё раз благодарю Вас за помощь. ![]() |
|
Создано: 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а... Спасибо всем за помощь ещё раз. ![]() ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Прошу помоч разобраться с простейшей программой 2... |
Эта тема закрыта. Ответы больше не принимаются. |