Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2010, 11:21   #1
Dasharnb777
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 44
Вопрос Почему выводит строку 2 раза?!?!?!

По нажатию на "Q" - выводится фамилия, на "W" - имя, на "E" - отчество.
Вроде все работает, но выводит все по 2 раза! Наверное, это элементарно, но я не могу найти, где это убрать. Помогите пожалйста.
Жирным я выделила вывод этих строк
Код:
.
.data
    INHANDL     DWORD   ?
    OUTHANDL    DWORD   ?
    STR1        DB "Press something: ", 0
    STR2        DB "Radchenko ", 0
    STR3        DB "Daria ", 0
    STR4        DB "Serhyivna ", 0
    TITLESTR    DB "Lab5", 0
    BUF         DB 200 DUP(?)  
    LENS        DWORD   ?   ; количество выведенных символов
    LENS2       DWORD   ?   ; количество выведенных символов
    CRD	    COORD   <?>

    CO          DWORD	? 
    PRESS_KEY   WORD 9 DUP(?)
;------------------------------КОД ПРОГРАММЫ--------------------------
.code
start:
;--------------------------ПЕРЕКОДИРОВАНИЕ ТЕКСТА---------------------
; перекодируем строку заголовка
    push offset TITLESTR
    push offset TITLESTR
    call CharToOemA@8
   
; перекодируем строку
    push offset STR1
    push offset STR1
    call CharToOemA@8

 перекодируем строку
    push offset STR2
    push offset STR2
    call CharToOemA@8

;-----------------------------СОЗДАНИЕ КОНСОЛИ------------------------
; образуем консоль, освободив вначале уже существующую
    call FreeConsole@0
    call AllocConsole@0

; получим HANDL1 ввода
    push STD_INPUT_HANDLE
    call GetStdHandle@4
    mov OUTHANDL, eax

; получим HANDL вывода
    push STD_OUTPUT_HANDLE
    call GetStdHandle@4
    mov INHANDL, eax

; установим новый размер окна консоли
    mov CRD.X, 100
    mov CRD.Y, 25
    push CRD
    push eax
    call SetConsoleScreenBufferSize@8

; зададим заголовок окна консоли
    push offset TITLESTR
    call SetConsoleTitleA@4

; установим позицию курсора
    mov CRD.X, 0
    mov CRD.Y, 10
    push CRD
    push INHANDL
    call SetConsoleCursorPosition@8

;-------------------------------ВЫВОД СТРОКИ--------------------------
; зададим цветовые атрибуты выводимого текста
    push COL1
    push INHANDL
    call SetConsoleTextAttribute@8

; получим длину строки
    push offset STR1
    call LENSTR	; в ebx длина строки
    
; выведем строку
    push 0
    push offset LENS
    push ebx
    push offset STR1
    push INHANDL
    call WriteConsoleA@20

;-------------------------------ВВОД СТРОКИ---------------------------
; ожидание ввода строки
    push 0
    push offset LENS
    push 200
    push offset BUF
    push OUTHANDL
    call ReadConsoleA@20

;----------------------------ОБРАБОТКА СОБЫТИЙ------------------------
; читаем одну запись о событии
w:
    push offset CO ; указатель на двойное слово, содержащее количество реально полученных записей
    push 1 ; количество получаемых информационных структур
    push offset PRESS_KEY ; указатель на структуру, в которой содержится информация о событиях, происшедших с консолью
    push OUTHANDL ; дескриптор входного буфера консоли
    call ReadConsoleInputA@16

; обработка события при нажатии на клавишу
    cmp BYTE PTR PRESS_KEY+14, 'q' ; press Q

    je wrF

cmp BYTE PTR PRESS_KEY+14, 'w' ; press W

    je wrN

cmp BYTE PTR PRESS_KEY+14, 'e' ; press W

    je wrS

jmp w

;------ВЫВОД ДАННЫХ-------------------
; зададим цветовые атрибуты выводимого текста
wrF:  ; вывод фамилии
   push COL1
   push INHANDL
   push SetConsoleTextAttribute@8

; получим длину строки
    push offset BUF
    push offset STR2
    CALL CharToOemA@8

    push offset BUF
    call LENSTR	; в ebx длина строки
    
; выведем строку
    push 0
    push offset LENS2 ; чтобы избежать изменения длины введенной ранее строки
    push ebx
    push offset BUF
    push INHANDL
    call WriteConsoleA@20
	jmp w

wrN:  ; вывод имени
    push COL1
    push INHANDL
    push SetConsoleTextAttribute@8

; получим длину строки
    push offset STR3
    call LENSTR	; в ebx длина строки

; выведем строку
    push 0
    push offset LENS2 ; чтобы избежать изменения длины введенной ранее строки
    push ebx
    push offset STR3
    push INHANDL
    call WriteConsoleA@20
	jmp w

wrS:  ; вывод отчества
    push COL1
    push INHANDL
    push SetConsoleTextAttribute@8

; получим длину строки
    push offset STR4
    call LENSTR	; в ebx длина строки

; выведем строку
    push 0
    push offset LENS2 ; чтобы избежать изменения длины введенной ранее строки
    push ebx
    push offset STR4
    push INHANDL
    call WriteConsoleA@20
	jmp w
Dasharnb777 вне форума Ответить с цитированием
Старый 17.11.2010, 09:42   #2
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

потому что события посылаются на нажатие и отпускание клавиш
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 17.11.2010, 11:06   #3
Dasharnb777
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 44
По умолчанию

Да? Спасибо.
Dasharnb777 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не правельно выводит строку. Freddi Krjuger Общие вопросы C/C++ 6 31.10.2010 14:34
passthru выводит только одну строку motorway PHP 5 07.07.2009 21:27
Программа Вводит символьную строку и число N и выводит строку, состоящую из первых N символов (С++) Yulai Помощь студентам 1 11.05.2009 11:39
Почему картриджи для струйных принтеров можно заправлять только 3 раза? vasek123 Компьютерное железо 12 03.02.2009 11:25
КНОПКИ : Почему приходится щелкать 3 раза ? Andr180nag JavaScript, Ajax 3 24.07.2008 20:24