Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: ASM вывод строки на экран
 
 автор: Саня   (07.04.2008 в 14:01)   письмо автору
 
 

Нужно мне вывести на экран введённую ранее с клавиатуры строку.
Assume cs:code, ds:code
Code Segment
org 100h
start: mov ax,cs
       mov ds,ax

; установка видеорежима
mov ah, 0
mov al, 3
int 10h

; ввод строки
mov ah, 0ah
lea dx, string
int 21h

; перевод строки
mov ah, 9
lea dx, crlf
int 21h

; вывод строки
mov ah, 9
lea dx, string
int 21h

; выход из программы
exit: mov ah, 4ch
int 21h

string db 255, 255 dup(0)
crlf db 0ah, 0dh, '$'

code ends
end start

Выполняю, ввожу строку, а выводится какой-то мусор. Как вывести ровно то, что ввёл ранее?

   
 
 автор: q'n'd   (07.04.2008 в 21:20)   письмо автору
 
   для: Саня   (07.04.2008 в 14:01)
 

извиняюсь за флуд,
не пойму почему у меня ник Здравствуйте, q\\\'n\\\'d!
зарегестрировался как q'n'd а тут оно обзывается , и проверить кто-же я , q'n'd или q\\\'n\\\'d
:)

кстати тоже интересно увидеть немного кода на asm.

   
 
 автор: q'n'd   (07.04.2008 в 21:22)   письмо автору
 
   для: q'n'd   (07.04.2008 в 21:20)
 

(Здравствуйте, q\'n\'d!)
уже лучше :)

   
 
 автор: MAR_NIKOZA   (09.04.2008 в 10:37)   письмо автору
 
   для: q'n'd   (07.04.2008 в 21:22)
 

; ввод строки
mov ah, 0Ah
int 21h
lea dx, string
int 21h

   
 
 автор: Саня   (10.04.2008 в 06:28)   письмо автору
 
   для: MAR_NIKOZA   (09.04.2008 в 10:37)
 

И какой смысл этой махинации? Только хуже стало.

   
 
 автор: MAR_NIKOZA   (10.04.2008 в 20:56)   письмо автору
 
   для: Саня   (10.04.2008 в 06:28)
 

Ты кинул в регистр десятую функцию,
mov al, 0Ah
а приказ на выполнение кто даст?
Операционка догадается что-ли?
Ладно сейчас компильну то что ты наваял посмотрю
И почему у тебя такой странный буфер?
В буфере зачем-то число 255 (FF), а потом ещё 255 нулей?
Всего выходит 257 символов. В чём хитрость?
Один ведь хрен строку буфера обрежет до 256 байт.
Напиши просто
string db 256 dup (?) ;Резервируем место под 256 любых символов.

Или ты хочешь во второй байт буфера поймать длину строки?

   
 
 автор: MAR_NIKOZA   (10.04.2008 в 23:04)   письмо автору
 
   для: MAR_NIKOZA   (10.04.2008 в 20:56)
 

У меня всё работает.
И зачем тебе вообще эта ДОС?
Она же давным-давно умeрла!
Переходи на Винду.

   
 
 автор: Саня   (11.04.2008 в 14:08)   письмо автору
 
   для: MAR_NIKOZA   (10.04.2008 в 23:04)
 

Может и умерла, но консоль ещё ой как долго жить будет.

   
 
 автор: cheops   (11.04.2008 в 14:31)   письмо автору
 
   для: Саня   (11.04.2008 в 14:08)
 

Хм... для консоли сейчас надёжнее в Windows стиле программировать.

   
 
 автор: Саня   (11.04.2008 в 14:47)   письмо автору
 
   для: cheops   (11.04.2008 в 14:31)
 

Что это за windows и dos стили?

   
 
 автор: cheops   (11.04.2008 в 16:36)   письмо автору
 
   для: Саня   (11.04.2008 в 14:47)
 

Не удачно выразился, имел в виду, что в основу программы лучше класть Windows, а не DOS-основу - всё-равно большинство современных ASM-программ задействуют множество ресурсов операционной системы - лучше сразу ориентироваться на Windows.

   
 
 автор: Саня   (11.04.2008 в 16:42)   письмо автору
 
   для: cheops   (11.04.2008 в 16:36)
 

Что вы подразумеваете под dos и windows основой? Какая разница, консоль она и в африке консоль? А оконные приложения на асме — это несерьёзно. Вам ли не знать, что асм зависит от процессора, а не от ОС.

   
 
 автор: cheops   (11.04.2008 в 23:28)   письмо автору
 
   для: Саня   (11.04.2008 в 16:42)
 

В DOS главной функцией является main() взаимодействие с операционной системой через прерывания. В Windows главная функция WinMian() - взаимодействие с операционной системой через события - вывод в консоль, через WinAPI-функции и или аналоги их использующие. Ну соответственно, никаких сегментов кроме flat.

   
 
 автор: Саня   (11.04.2008 в 14:06)   письмо автору
 
   для: MAR_NIKOZA   (10.04.2008 в 20:56)
 

Ну вообще, я с этим асмом только третий день вожусь, так что я не знаю зачем там 255 нулей.

> Или ты хочешь во второй байт буфера поймать длину строки?
Как говорит препод, первое число обозначает максимальное количество вводимых символов, а второе — число реально введённых символов.

> а приказ на выполнение кто даст?
Ну вообще-то я сначала загружаю в регистр ah номер функции, в регистр dx указатель на переменную, куда запишутся введённые символы, а потом уже вызываю прерывание.

А с string db 256 dup (?) программа сразу приходит к завершению.

TASM 2.0

   
 
 автор: MAR_NIKOZA   (11.04.2008 в 20:50)   письмо автору
 
   для: Саня   (11.04.2008 в 14:06)
 

Тогда поставь
string db 256 dup (0)

на Тасме никогда не работал.
Использую masm32. Ну и поневоле пришлось освоить быстропрогрессирующий фасм.
Причина понятна - Хоть на masm море исходников - но он мёртв. (Не обновляется). А фасм постоянно обновляет автор.

Что за бред о трудности оконных приложений на асме?
Писать их легче лёгкого - есть в помощь отличные IDE

(Лично я использую MASM BUILDER. Автор программы - Российский парнишка. Качай на его сайте)
Это среда визуальной разработки на ассемблере.
Рисуешь программу почти с такой же лёгкостью как в Делфи.
Куча контролов - от кнопок и диалогов до битмапов. И всё это на твоём многооконном приложении.
Вот только должен немного разочаровать - ни один контрол не имеет кода.
Но для понимающих это просто наслаждение.
Потому что после создания каркаса начинается самое увлекательное - процесс творчества. Открываешь проект в MASM и начинаешь кодить.

Консольные программы... Гм... Есть ещё такие... Но на перспективу - рулят только удобные и понятные населению, хорошо оформленые приложения.

ASM зависит от процессора.
:-)
А какая по большому разница между пентиумом и AMD ?
Те же самые директивы. Ну есть микроскопические отличия. Это надо очень специфическую программу написать, чтобы она не пошла и на пентиуме и пошла на AMD
Я ещё никогда не попадал в такую ситуацию. Всегда есть возможность использовать
конструкцию выбора
CMP
И переложить код на общие для обеих процессоров директивы.

Вот подобные твоему программы очень напоминают старые досовские туториалы по асму. Ты не их штудируешь?

   
 
 автор: Саня   (12.04.2008 в 15:28)   письмо автору
 
   для: MAR_NIKOZA   (11.04.2008 в 20:50)
 

> Тогда поставь
> string db 256 dup (0)
Программа сразу завершает работу.

> Что за бред о трудности оконных приложений на асме?
> Писать их легче лёгкого - есть в помощь отличные IDE
Я же не знаю, что существует WYSIWYG-конструктор форм... просто я представил как будет выглядеть код оконного приложения, если писать его исключительно ручками.

> Консольные программы... Гм... Есть ещё такие...
> Но на перспективу - рулят только удобные и понятные населению,
> хорошо оформленые приложения.
В серверном сегменте рулят как раз консольные приложения.

> А какая по большому разница между пентиумом и AMD ?
Я наверное не так выразился. Я имел ввиду разные архитектуры процессоров: RISC (DEC Alpha, Power), CISC (VAX, x86), Гарвардская архитектура (микроконтроллеры).

> Вот подобные твоему программы очень напоминают старые
> досовские туториалы по асму. Ты не их штудируешь?
Преподаватель в университете так учит. И шаги влево-вправо от разработанной в бородатые годы учебной программы воспринимаются им ооочень болезненно. Поэтому iczelion'овские туториалы для меня пока недоступны и нужно сделать работу именно в таком древнем стиле.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования