Page 1 of 2

Помощь ассемблерному ламеру

Posted: Wed Jun 01, 2005 10:04 am
by ipr
Я попытался сделать сам строку ввода, но у меня ничерта не вышло.
Копаясь в исходниках, я тоже ничего непонял, так что пожалуйста, если
вам не влом, помогите, покажите что надо добавить или исправить.

Вопрос:
Как сделать так, чтобы не просто выводился вводимый символ,
а строка вводимых символов. В чём ошибка я понимаю, но исправить её немогу. :( Я ассемблер знаю очень даже плохо, поэтому
приходится спрашивать. Так что заранее спасибо!

use32
org 0x0
db 'MENUET01'
dd 0x01
dd START
dd I_END
dd 0x1000
dd 0x1000
dd 0x0
dd 0x0

START:

draw_window:
call window

still:
mov eax,10
int 0x40

cmp eax,1
je draw_window
cmp eax,2
je key
cmp eax,3
je button
jmp still

key:
mov eax,2 ;Получаем символ в ah
int 0x40

shl [kbr],8 ;сдвигаем на 8 бит
mov [kbr],ah ;копируем значение ah в переменную
jmp draw_window ;бежим отрисовывать окно

button:
mov eax,17
int 0x40

cmp ah,1
je quit
jmp still

quit:
mov eax,-1
int 0x40

window:
mov eax,12
mov ebx,1
int 0x40

mov eax,0
mov ebx,200*65536+200
mov ecx,200*65536+100
mov edx,0x03ffffff
mov esi,0
mov edi,0
int 0x40

call draw_text_input ;вызываем отрисовку "строки ввода"

mov eax,12
mov ebx,2
int 0x40
ret

draw_text_input:
mov eax,4
mov ebx,8*65536+8
mov ecx,0
mov edx,kbr ;отображаем переменную
mov esi,kbs
int 0x40
ret

kbs dd ?
kbr db ?

I_END:

Posted: Wed Jun 01, 2005 11:13 am
by VASA
to lamers by lamers :)
ошибка здесь:
shl [kbr],8 ;сдвигаем на 8 бит сдвиг работает так (не знаю как объяснить :): shl(00110101)==01101010
Надо делать вроде:
mov ebx,kbr ;копируем адрес начала строки в ebx
add ebx,[kbs]; добавляем длину==текущий символ
mov [ebx],ah; копируем в память по адрему, что в ebx ah
inc [kbs]; увеличиваем длину строки на 1
jmp draw_window

bottom:
kbs dd 0; фасм помоему обнуляет dx ? объявления, но с чем чёрт :)
Должно работать, проверить негде...

Posted: Wed Jun 01, 2005 11:15 am
by VASA
и ещё фикс:
draw_text_input:
mov eax,4
mov ebx,8*65536+8
mov ecx,0
mov edx,kbr ;отображаем переменную
;mov esi,kbs ;копируется адрес переменной
mov esi,[kbs]; копируется значение
int 0x40
ret

Posted: Wed Jun 01, 2005 11:19 am
by halyavin
Menuet обнуляет неинициализированные переменные. А FASM, если они попадают в код, также полагает равными нулю.

Posted: Wed Jun 01, 2005 11:20 am
by ipr
О спасибо, с каждым таким советом я становлюсь ассемблерщиком всё больше и больше!...

Posted: Wed Jun 01, 2005 6:39 pm
by andrew_programmer
ipr,а ты какие языки программирования знаеш,сколько лет программируеш(какой опыт),как долго изучаеш ассемблер ?

(просто мне интересно узнать участников форума)

Posted: Wed Jun 01, 2005 9:27 pm
by ipr
в лет 10 первый раз познакомился с компьютером, правда со спеутрумом, и почти сразу учил его
бейсик. Затем был писюк, изучал сиснтаксис Qbasic'a. Потом C, C++. С тех времён прошло 8 лет, то бишь
мне 18. Вот... А, да, сейчас учу ассемблер... А из планов следуюющее выучить Pascal/Delphi,Pithon и т.п. и т.д.
В общем знать побольше языков.

Posted: Wed Jun 01, 2005 10:36 pm
by andrew_programmer
Мне тоже 18,только мне так не повезло с компьютером.Впервые я увидел компьютер в 12 лет в школе(а что вы хотите- в селе ведь жил) - это был советский компьютер "ЭЛЕКТРОНИКА БК 0010-01".Программ к нему совершенно небыло и я учился программировать на бейсике.А через два года я увидел современный компьютер(но так как он был не моим,то на этом все и закончилось).Потом чудом мне удалось раздобыть книгу по DEC- овскому ассемблеру для электроники.Электроника была с 16!!! разрядным процессором частотой 3 мегагерца.Процессор содержал 64 команды(конечно там были mov,shr,shl,add,inc и другие команды).Я получал удовольствие от программировании(оптимизации) на ASM такого слабого(по современным меркам) процессора.Он был моим компьютером вплоть до 2003 года.В 2003 году,когда я стал учиться в университете,за пол года я освоил все устройство современного компьютера(до этого я ничего не знал об операционных системах и прочих элементарных вещах) и выучил Pascal.(а также узнал-что такое интернет и "с чем его едят")Начал изучать C++ - честно скажу он мне непонравился(я та и не закончил его изучение).Летом 2004 года мне купили компьютер,вот тогда я и попробовал ASM для х86 машин.Я быстро освоил этот ассемблер(сказался опыт DEC-овского асма).Ну вот собственно говоря и на этом пока заканчивается мое развитие в области языков программирования.(после асма изучать языки высокого уровня мне совсем не хочется)

Posted: Wed Jun 01, 2005 11:09 pm
by ipr
andrew_programmer
А мне тоже C++ не нравится... А вот когда я попробовал кодить на асме оказалось прикольно!
Первый шок был тогда, когда я сделал hello world на basic'e и на asm'e. На бейсике это чудо программерской
мысли :) весило 33,6 КБ, а на асме (для доса) 16 байт.

Posted: Wed Jun 01, 2005 11:15 pm
by ipr
VASA
Да знаю я как shl/shr работает!
По крайней мере так у меня вводимый символ отображался!

Posted: Thu Jun 02, 2005 10:41 am
by FreGL
ламерки... хы хы
ipr, если б ты был немного повнимательнее, то прочитал бы мои посты на счёт GUI компонент под МеОС, и прочитав внимательно
ты понял бы что данной задачей (вводимая строка и т.п.) уже давно решается многими людьми (не только мною ))
так же на сайте тов. Хекса mestack.narod.ru ты бы нашёл исходники моих компонент, в которых кстати применён ООП подход...
также присутствуют понятные комментарии и разобраться в работе было бы не сложно... а уж потом бы задавал такие вопросы...

все мы начинали с бейсиков на спектрумах и паскакалей на 386... так что кто круче в этом плане тут как то спрашивать не стоит :)

Posted: Thu Jun 02, 2005 11:28 am
by ipr
FreGL
Я уже много раз говорил:
Я изучаю асм, я пытаюсь реализовать всё сам. А когда
вхожу в тупик, я задаю вопросы, потому что в исходниках путаюсь и теряюсь.
А если я буду использовать библиотеки, то это будет ужас! Я буду знать
что оно работает, а как не знаю. Вот...

Posted: Fri Jun 03, 2005 6:20 pm
by Hex
ламерки... хы хы
Дедовщину разводим?Я те дам! :)
Все были такими...Для меня ламер - человек, который не хочет познавать новое, т.е. остаёться на одном и том-же уровне.
ipr, если б ты был немного повнимательнее, то прочитал бы мои посты на счёт GUI компонент под МеОС, и прочитав внимательно
ты понял бы что данной задачей (вводимая строка и т.п.) уже давно решается многими людьми (не только мною ))
так же на сайте тов. Хекса mestack.narod.ru ты бы нашёл исходники моих компонент, в которых кстати применён ООП подход...
Ты внимательно читал его предыдущий пост?Он же говорил, что ещё не изучал Паскаль и Дельфи, а ты хочешь, чтобы он реализовал ООП подход... ;) Вот когда ipr подучиться немного, то уж точно поможет с реализацией многих программ и фичь 8) .
все мы начинали с бейсиков на спектрумах и паскакалей на 386... так что кто круче в этом плане тут как то спрашивать не стоит
Бррр...Как вспомню те годы и QBasic, то страшно становиться... :) А вообще ностальгия по тем временам мучает часто ;)

Posted: Fri Jun 03, 2005 7:46 pm
by ipr
Да, Хекс ты всё правильно понял. Я собираюсь серьёзно кодить под МеОСь.

Posted: Fri Jun 03, 2005 7:53 pm
by Mario79
Да... а я ведь тоже начинал с БК-0010. Классная была машина для своего времени. Хоть и слизана с PDP-11, но несовместима с ней, потому программное обеспечение и вся документация написана програмистами любителями исключительно на русском языке. :-)
Свою первую программу на асме я написал именно для БК. Типа фонографа - запись и воспроизведение звука с однобитным разрешением + ограничение памяти, я использовал экранную область ОЗУ, итого паршивенький звук на 16 секунд. Но! Какое приятное чувство удовольствия от реализации задуманного дела. :-)
Кстати DEC’овская система команд гораздо удобней и гибче чем x86. Одних только способов адрессации не меньше 16 видов, вот простор для полёта программерской мысли.
А как вам ассемблер + дизассемблер + отладчик + текстовый редактор и всё это вмещается в 10 КБ! Даже Менует отдыхает!
Дальше у меня был немного ZX-spectrum48, а дальше почти год ZX-128-Дельта с дисководом, правда, я на Спектрумах больше играл. Очень сложно переходить с одного ассемблера на другой, особенно если мнемоническое обозначение команд отличается.
Ну, а дальше появился Cyrix233/32+Trident+HDD-800M за который я закончил выплачивать кредит 1 апреля этого года. :-)
Хотя этот комп давно уже стоит у меня под столом, был бы монитор организовал бы локалку.