Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как исключить переполнение буфера ? для начинающих 
:(
    Опции темы
Snik
Дата 29.11.2006, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 16.8.2006

Репутация: нет
Всего: нет



Пользователь может нажать и держать клавишу в результате чего происходит переполнение и ошибка. Как можно дописать чтобы при переполнении переходило на следующюю строку? 

и еще, как сделать если после вопроса "Продолжить работу ? (y/n) " пользователь скажет yes
то ранее введенный текст отчищался?

Пользуюсь: Turbo Assembler  Version 4.1  Copyright © 1988, 1996 Borland International 

Код

;Вывод на экран строки символов из буфера
;Сегмент данных
dseg    segment
    str0    db      0ah,0dh,24h ;перевод каретки 24h это знак $
    str1    db      'Введите произвольный текст. Enter - переход на следующюю строку $'
        str1_a  db      'Двойной Enter - вывод набранного текста. CTRL+C - НМЕДЛЕННО ЗАВЕРШИТЬ $'
        str1_b  db      'Вы ввели текст: $'
        str3    db      'Продолжить работу ? (y/n) $'
    str2    db      80 dup (?)           ;Это буфер длинной 255 байт
dseg    ends

;Сегмент стека
sseg    segment
    dw      80 dup (?)
    bot     equ     $               ;Дно стека
sseg    ends

;Сегмент команд
cseg    segment
assume cs:cseg,ss:sseg,ds:dseg
begin   proc    far
    ;Настройка сегмента стека
    mov     ax,sseg
    mov     ss,ax           ;В регистре ss сегментный адрес сегмента стека
    lea     sp,bot          ;В регистре sp указатель на дно стека
    push    ds              ;Сохранение в стеке адреса выхода из программы
    sub     ax,ax           ;ax=0
    push    ax
    ;Настройка сегмента данных
    mov     ax,dseg
    mov     ds,ax           ;В регистре ds сегментный адрес сегмента данных
    ;Вывод заданного текста
m4:     mov     ah,9h
    lea     dx,str0         ;в начало строки
    int     21h
        lea     dx,str1         ;вывод на экран str1
    int     21h
    lea     dx,str0         ;в начало строки
    int     21h
        lea     dx,str1_a       ;вывод на экран str1_a
    int     21h
    lea     dx,str0         ;в начало строки
    int     21h
        sub     si,si           ; si=0
m2:     mov     ah,1h           
    int     21h
    cmp     al,0dh          ;cmp-сравнить 0dh-код клавиши энтер
    je  m1                  ;переход на метку если энтер
m3:     mov     str2[si],al     ;в строке  str2 очередной символ
    inc     si
    jmp m2
m1:     mov     str2[si],0ah    ; допишем чтобы при выводе
    inc     si              ; разделить
    mov     str2[si],0dh    ; слова
    inc     si              ;
    mov     ah,9h
    lea     dx,str0         ;0ah,0dh,24h ;перевод каретки 24h это знак $
    int     21h
    mov     ah,1h
    int     21h
    cmp     al,0dh          ;cmp-сравнить 0dh-код клавиши энтер
    jne m3                  ;переход на метку если это не энтер
    mov     ah,9h
    lea     dx,str0         ;в начало строки
    int     21h
        lea     dx,str1_b       ;Вы ввели текст:
    int     21h
    lea     dx,str0         ;в начало строки
    int     21h
    lea     dx,str2         ;вывод текста
    int     21h
    lea     dx,str0         ;в начало строки
    int     21h
    lea     dx,str3         ;вопрос
    int     21h
    mov     ah,1h
    int     21h
    cmp     al,'y'
    je  m4
    cmp     al,'Y'
    je  m4
        ret              ;Выход из программы
begin endp
cseg    ends
end     begin


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Windows/DOS"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для Windows/Dos | Следующая тема »


 




[ Время генерации скрипта: 0.0472 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.