Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Технологии > Помощь студентам
Регистрация

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

Ответ
 
Опции темы
Старый 18.05.2018, 13:21   #1
cupoma58
Пользователь
 
Регистрация: 12.08.2014
Сообщений: 14
Репутация: 10
По умолчанию [Assembler] сопроцессор

Обработка кнопок:
Код:

  ...
wmcommand:
  movzx eax,word ptr [ebp+10h]
  cmp   eax,..h             ;id_but --> "цифра или символ точка"                 
  je    nabor 
  cmp   eax,1Ch            ;id_but --> "+"                 
  je    plus
  ... 
  cmp   eax,24h            ;id_but --> "="                 
  je    itog
  ...
  jmp   defwndproc

  ;обработка нажатия кнопок:

  nabor:
    ...
    call  SetWindowTextA@8  ;набрали 1-e число
    ...
  plus:                         ;нажали "+"
    mov   edx,0             ;очищаем регистр и...
    mov   edx,1Ch         ;...сохраняем id кнопки --> "+"
    mov   str1,eax         ;сохраняем 1-е число 
    finit                        ;инициируем сопроцессор
    fld   str1                 ;str1-->st(0)
    call  clear               ;очищаем дисплей  
    ...
  ;набрали 2-е число...число набирается и остаётся на дисплее 
    ...
  itog:                        ;нажали "="
    cmp   edx,1Ch        ;если нажимали "+"...                
    je      plus_ex           ;...переходим сюда...не переходим
    ...
  plus_ex:
    call    clear               ;очищаем дисплей
    mov   str2,eax        ;сохраняем 2-e число в str2
    mov   eax,buf          ;освобождаем буфер  
    fadd   str2               ;st(0)+str2-->st(0) 
    fst     buf                 ;st(0)-->buf 
    fwait 
    push  buf               ;здесь сумма
    push  [hWndEdt]
    call  SetWindowTextA@8  ;выводим её на дисплей
    jmp   exit 
    ...
  exit:
    mov  eax,0
    jmp   finish
    ...
  finish:
    pop   edi
    pop   esi
    pop   ebx
    pop   ebp
    ret    16
winproc endp
clear  proc
  push   Edt
  push   [hedt]
  call  SetWindowTextA@8
  ret
clear  endp
end go

После нажатия "=" на дисплее остаётся 2-е набранное число. Убрал из "plus_ex:" всё, кроме
"call clear" и "jmp exit" - картина не меняется. Похоже, что код в метке "itog:" не работает и
переход к "plus_ex:" не происходит. В чём дело - понять не могу. Помогите разобратся.
cupoma58 вне форума   Ответить с цитированием
Старый 18.05.2018, 13:50   #2
R71MT
Профессионал
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,170
Репутация: 953
По умолчанию

Цитата:
Сообщение от cupoma58 Посмотреть сообщение
Похоже, что код в метке "itog:" не работает
а что ты от него ждёшь, как он должен работать?
внутри-же нет никаких условий, а только непонятные точки
__________________
Нашедшего выход - затаптывают первым..
R71MT вне форума   Ответить с цитированием
Старый 22.05.2018, 13:49   #3
cupoma58
Пользователь
 
Регистрация: 12.08.2014
Сообщений: 14
Репутация: 10
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
а что ты от него ждёшь, как он должен работать?
внутри-же нет никаких условий, а только непонятные точки
Условие ПЕРЕХОДА к операции "+":
Код:

  ...
  plus:                         ;нажали "+"
    mov   edx,0             ;очищаем регистр и...
    mov   edx,1Ch         ;...СОХРАНЯЕМ id кнопки --> "+"
    mov   str1,eax         ;сохраняем 1-е число 
    finit                        ;инициируем сопроцессор
    fld   str1                 ;str1-->st(0)
    call  clear               ;очищаем дисплей  
    ...
  ;набрали 2-е число...число набирается и остаётся на дисплее 
    ...
  itog:                        ;нажали "="
    cmp   edx,1Ch        ;если нажимали "+"...<--- КНОПКА ИСПОЛЬЗОВАНОЙ ОПЕРАЦИИ               
    je      plus_ex           ;...переходим сюда...не переходим
    ...
  plus_ex:
    call    clear               ;очищаем дисплей
    mov   str2,eax        ;сохраняем 2-e число в str2
    mov   eax,buf          ;освобождаем буфер  
    fadd   str2               ;st(0)+str2-->st(0) 
    fst     buf                 ;st(0)-->buf 
    fwait 
    push  buf               ;здесь сумма
    push  [hWndEdt]
    call  SetWindowTextA@8  ;выводим её на дисплей
    jmp   exit 
    ...

Пробовал вместо edx использовать один из сохранённых регистров - результат тот-же.
cupoma58 вне форума   Ответить с цитированием
Старый 29.05.2018, 12:43   #4
cupoma58
Пользователь
 
Регистрация: 12.08.2014
Сообщений: 14
Репутация: 10
По умолчанию

Цитата:
Сообщение от cupoma58 Посмотреть сообщение
Условие ПЕРЕХОДА к операции "+":
Код:

  ...
  plus:                         ;нажали "+"
    mov   edx,0             ;очищаем регистр и...
    mov   edx,1Ch         ;...СОХРАНЯЕМ id кнопки --> "+"
    mov   str1,eax         ;сохраняем 1-е число 
    finit                        ;инициируем сопроцессор
    fld   str1                 ;str1-->st(0)
    call  clear               ;очищаем дисплей  
    ...
  ;набрали 2-е число...число набирается и остаётся на дисплее 
    ...
  itog:                        ;нажали "="
    cmp   edx,1Ch        ;если нажимали "+"...<--- КНОПКА ИСПОЛЬЗОВАНОЙ ОПЕРАЦИИ               
    je      plus_ex           ;...переходим сюда...не переходим
    ...
  plus_ex:
    call    clear               ;очищаем дисплей
    mov   str2,eax        ;сохраняем 2-e число в str2
    mov   eax,buf          ;освобождаем буфер  
    fadd   str2               ;st(0)+str2-->st(0) 
    fst     buf                 ;st(0)-->buf 
    fwait 
    push  buf               ;здесь сумма
    push  [hWndEdt]
    call  SetWindowTextA@8  ;выводим её на дисплей
    jmp   exit 
    ...

Пробовал вместо edx использовать один из сохранённых регистров - результат тот-же.
oper-->Всё - разобрался. В цепочке "oper-->itog-->oper_ex" были лишние команды.
cupoma58 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как преобразовать байт-код (в шестнадцатеричной системе счисления) в команды assembler? - Assembler SandersSh Assembler 4 17.11.2017 19:04
Числовой ряд (TASM, сопроцессор) iLOL Помощь студентам 2 27.05.2012 17:01
Сопроцессор, пытаюсь вычислить выражение... yukas Assembler 7 13.05.2010 09:44
Сопроцессор Max-R Assembler 19 18.06.2009 23:52


17:25.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru