Консультация № 36601
02.03.2006, 22:03
0.00 руб.
0 5 3
Здравствуйте!
Хотелось бы в простенькой программке вывести несколько слов на экран, причём следующее слово должно выводиться лишь после нажатия на клавишу, но как ни старался - они выходят подряд в одной строке и причём без пробела. Хотелось бы , чтобы каждое начиналось с новой строки. В unix и Windows для перевода каретки на другую строку используется комбинация CR LF. Но вот применимо ли это в ассемблере и более того как перевести сообщение на следующую строку для вывода на экран в программе - не знаю. И наоборот, как оставить в одной строке, но что бы между словами был пробел.
И второй вопрос - компилятор Masm хорошо справляется с определением ошибок в коде, выводя номера их строк. Тогда для каких целей служит отладчик? И если он позволяет заглянуть внутрь com-файла, то тогда зачем нужен дизассемблер?
Спасибо.

Обсуждение

Неизвестный
02.03.2006, 23:30
общий
это ответ
Здравствуйте, Paltus!

Ответ на второй вопрос:
Понимате masm показывает так назыв. синтаксические ошибки, а вот логические нет. Роль дизассемблер, упростить, поиск логических ошибок. Вы спросите как? я отвечу, дизассемблер, предстовляет из себя визульную систему, которая отображает состояние внутренних ресурсов программы(регистры, память, стек...) на момент её работы. И это позволяет вам не наблюдать за программой в естественной среде её обитания, да конечно можно использовать пресловутый листок с карандашом и записывать результат выполнения каждого шага, но надо ли вам это, при этом кто ручается что при выполнении прерываний последнее возвращает именно тот результат который вы предпологали получить? Спецификация? она то же госпажа не постоянство, а дизассемблер поможет вам подогнать ваш код к Спецификации.

Программа которую вы хотели ниже:
С, Уважением MnEm0n!C


Приложение:
CSEG segmentassume cs:CSEG,ds:CSEG,ss:CSEG,es:CSEGorg 100hBegin:;Вывод 1-ой строкиmov ah,09hmov dx,offset str1int 21h;***************************;Паузаmov ah,00hint 16h;*****************;Вывод 2-ой строкиmov ah,09hmov dx,offset str2int 21h;*************************;Строкиstr1 db ‘String1‘,0dh,0ah,‘$‘str2 db ‘String2$‘;0dh - CR;0ah - LFCSEG ends end Begin
Неизвестный
03.03.2006, 07:59
общий
это ответ
Здравствуйте, Paltus!
Дополнение на вопрос: И наоборот, как оставить в одной строке, но что бы между словами был пробел???
Просто между строк ставим код пробела(32) и всё.
;--------------------------------------
str1 db ‘Vasa‘,32,‘Katia$‘
; или такой вариант как отдельные строки(перед строками ставим код пробела)
str1 db 32,‘Vasa$‘
str2 db 32,‘Feda$‘
str3 db 32,‘Ola$‘
;--------------------------------------
Удачи!
Неизвестный
03.03.2006, 14:13
общий
Пан Павел Константинович:Вот только не дизассемблер, а отладчик.Дизассемблер - это программа для восстановления исходного кода из исполняемого файла. Дизассемблер использует статическую информацию, записанную в файле.Отладчик - это программа, которая позволяет проследить реальное выполнение программы в динамике.
Неизвестный
07.03.2006, 10:01
общий
это ответ
Здравствуйте, Paltus!
Для перевода на другую строку надо использовать CRLF=0d0ah=13,10
Масм показывает синтаксические ошибки в то время как отладчик позволяет выловить ошибки, допущенные в алгоритме, такие как невыровненный стэк, или смена значения регистра функцией. Дизассемблер - тоже очень удобная вещь. Потом ты сам всё поёмешь
давно
Советник
419
1011
13.03.2006, 15:58
общий
PRiSon , ты точно не пил перед ответом? :)
Форма ответа