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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2010, 16:42   #1
begovik
Пользователь
 
Аватар для begovik
 
Регистрация: 08.03.2010
Сообщений: 48
По умолчанию прога отказывается ожидать нажатия клавиши

Привет! такая проблема: написал алгоритм Е из первой книги кнута и после
вычислений прога должна ожидать нажатия клавиши, но она почему-то
сразу закрывается.
Когда запускаю под отладчиком, то всё работает.
Помогите разобраться...


Код:
;алгоритм нахождения наибольшего частного
;m>n, m/n-до тех пор пока R<>0
code segment
assume cs:code,ds:data
org 100h
begin:
      call inint    ;вводим n
      mov  ch1,ax
      call inint    ;вводим m
delit: div ch1      ;m/n
      cmp  dx,0     ;r=0?
      jne  obmen    ;если нет то m=:n,n=:r и снова делим
      mov  ax,ch1
      call outint   ;выводим частное на экран
      mov ah,10h
      int 16h       ;ждём нажатия клавиши
      mov  ax,4c00h
      int  21h      ;конец
obmen: xor  ax,ax
      xchg ch1,ax
      xchg dx,ch1
      jmp  delit
inint proc near
      push cx
      push dx
      push bx
      push si
      xor  si,si
      xor  bx,bx
      xor  cx,cx
      mov  ah,01h
      int  21h
      cmp  al, '-'
      jne  short c9
      inc  si
insi: mov  ah,01h
      int  21h
c9:   cmp  al, '9'
      ja   short @ii2
      sub  al,30h
      jb   short @ii2
      mov  cl,al
      shl  bx,1
      mov  ax,bx
      shl  ax,2
      add  bx,ax
      add  bx,cx
      jmp  short insi

@ii2: test si,si
      jz   short @ii3
      neg  bx
@ii3: mov  ah,02h
      mov  dl,0dh
      int  21h
      mov  dl,0ah
      int  21h
      mov  ax,bx
      pop  si
      pop  bx
      pop  dx
      pop  cx
      ret
inint endp
outint proc
      push ax
      xor  cx,cx
      mov  bx,10
@oi2: xor  dx,dx
      div  bx
      push dx
      inc  cx
      test ax,ax
      jnz  short @oi2
      mov  ah,02h
@oi3: pop  dx
      add  dl,30h
      int  21h
      loop @oi3
      pop  ax
      ret
outint endp

code ends

data segment
ch1 dw ?
data ends

end begin

Последний раз редактировалось Stilet; 09.03.2010 в 17:03.
begovik вне форума Ответить с цитированием
Старый 09.03.2010, 18:05   #2
Kastaneda
Пользователь
 
Регистрация: 26.02.2010
Сообщений: 22
По умолчанию

Ожидание нажатия клавиши - это нулевая ф-ция INT 16h, т.е. должно быть :
Код:
mov ah,0
int 16h
Kastaneda вне форума Ответить с цитированием
Старый 09.03.2010, 18:30   #3
begovik
Пользователь
 
Аватар для begovik
 
Регистрация: 08.03.2010
Сообщений: 48
По умолчанию

всёравно закрывается, причём даже если это прерывание вставить в
конце подпрограммы "outint"
begovik вне форума Ответить с цитированием
Старый 09.03.2010, 19:32   #4
Kastaneda
Пользователь
 
Регистрация: 26.02.2010
Сообщений: 22
По умолчанию

)) я ее скомпилировал и проверил)) Ожидание нажатия клавиши работает!!! Если первую переменную ввести с "-", то все работает как надо, следовательно ошибка здесь:
Код:
 cmp  al, '-'
      jne  short c9
      inc  si
insi: mov  ah,01h
      int  21h
честное слово, самому переделать некогда.

P.S. под отладчиком не смотрел, но судя по логике все так, как я написал.

Последний раз редактировалось Kastaneda; 09.03.2010 в 19:55.
Kastaneda вне форума Ответить с цитированием
Старый 09.03.2010, 19:58   #5
Kastaneda
Пользователь
 
Регистрация: 26.02.2010
Сообщений: 22
По умолчанию

Посмотрел внимательно на код, по-моему некоторые его участки ни когда не выполнятся.
Kastaneda вне форума Ответить с цитированием
Старый 09.03.2010, 21:12   #6
begovik
Пользователь
 
Аватар для begovik
 
Регистрация: 08.03.2010
Сообщений: 48
По умолчанию

Цитата:
Посмотрел внимательно на код, по-моему некоторые его участки ни когда не выполнятся.
Это потому, что "inint" и "outint" я взял готовые.

Всё равно не получается, а на другом компе вообще пишет: "переполнение деления"
Цитата:
честное слово, самому переделать некогда.
Спасибо,что уделил внимание буду разбираться.
Только ещё один вопрос: не мог-ли Kaspersky I.S. испортить некоторые файлы TASMa?
begovik вне форума Ответить с цитированием
Старый 09.03.2010, 23:43   #7
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

Код:
      call inint    ;вводим n
      mov  ch1,ax
      call inint    ;вводим m
delit: div ch1      ;m/n !!!!!dx:ax/ch1!!!!!!
      cmp  dx,0     ;r=0?
      jne  obmen    ;если нет то m=:n,n=:r и снова делим
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 09.03.2010, 23:50   #8
begovik
Пользователь
 
Аватар для begovik
 
Регистрация: 08.03.2010
Сообщений: 48
По умолчанию

ДА обнулил dx и всё ЗАРАБОТАЛО!
Спасибо! Kastaneda
Спасибо! Airyashov
begovik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имитация нажатия клавиши Х (русской) Melphin Свободное общение 2 04.02.2010 12:58
Эмуляция нажатия клавиши helenfly Win Api 9 01.12.2009 12:09
время нажатия клавиши BattleMage Общие вопросы .NET 2 19.09.2009 13:41
Емулиривание нажатия клавиши xTANATOSx Win Api 9 10.10.2007 21:46
Эмуляция нажатия клавиши...... Zoidberg Win Api 4 11.01.2007 18:44