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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2018, 12:21   #1
cupoma58
Пользователь
 
Аватар для cupoma58
 
Регистрация: 12.08.2014
Сообщений: 44
По умолчанию [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, 12:50   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

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

Цитата:
Сообщение от 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, 11:43   #4
cupoma58
Пользователь
 
Аватар для cupoma58
 
Регистрация: 12.08.2014
Сообщений: 44
По умолчанию

Цитата:
Сообщение от 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 вне форума Ответить с цитированием
Ответ


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

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

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


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