Показать сообщение отдельно
Старый 28.04.2004, 07:38     # 13
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Вот. Наколбасил прогу. Прогнал в TurboDebugger'е - усё пашет:
Код:
stak segment stack
  db 128 dup (?)
stak ends

data segment
  rs dw 0	; результат преобразования
  dg dw 0	; введенная цифра
  sm dw 0	; введенный символ
data ends

code segment
assume ds:data,cs:code
start:
  mov ax, data
  mov ds, ax
; ----------------------------------------------
ent_beg:	; начало ввода и преобразования
  mov ah, 07h	; вводим с
  int 21h	; клавиатуры
  mov ah, 00h	; символ в
  mov sm, ax	; переменную 'sm'
  cmp ax, 0Dh	; если 'sm' = #13 (ENTER)
  je  ent_end	; то конец ввода => ent_end
  cmp ax, 08h	; если 'sm' = #8 (BACKSPACE)
  je  ent_bsp	; то => ent_bsp
  cmp ax, 30h	; если 'sm' < #48 ('0')
  jb  ent_beg	; или
  cmp ax, 39h	; если 'sm' > #57 ('9')
  ja  ent_beg	; то повторяем ввод => ent_beg
  sub ax, 30h	; преобразуем символ 'sm'
  mov dg, ax	; в цифру 'dg' = ord('sm') - 48
  mov ax, rs	; вычисляем значение
  mov bx, 10	; выражения 10*'rs'+'dg'
  mul bx	; и если результат вызывает 
  jo  ent_beg	; переполнение при умножении
  add ax, dg	; или перенос при сложении
  jc  ent_beg	; то повторяем ввод => ent_beg
  mov rs, ax	; сохраняем результат
  mov dx, sm	; выводим на экран
  mov ah, 02h	; введенный с клавиатуры
  int 21h	; символ 'sm' и
  jmp ent_beg	; возврат на начало => ent_beg
ent_bsp:	; обработка нажатия 'backspace'
  mov ax, rs	; если 'rs' = 0, т.е.
  cmp ax, 0	; строка ввода пуста, то
  je  ent_beg	; возврат на начало => ent_beg
  mov dl, 08h	; возвращаем указатель
  mov ah, 02h	; курсора на предыдущую
  int 21h	; позицию
  mov dl, 20h	; стираем предыдущий
  mov ah, 02h	; введенный символ, выведя
  int 21h	; на его место пробел
  mov dl, 08h	; возвращаем указатель
  mov ah, 02h	; курсора на предыдущую
  int 21h	; позицию
  mov dx, 0	; делим нацело текущий
  mov ax, rs	; результат преобразования
  mov bx, 10	; на 10 и запоминаем
  div bx	; частное как новый
  mov rs, ax	; результат преобразования
  jmp ent_beg	; возврат на начало => ent_beg
ent_end:	; конец ввода и преобразования
; ----------------------------------------------
  mov ah, 4ch
  int 21h
code ends
end start
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!
Ghost вне форума