Попытка сравнить ввод «+» с его значением ASCII 43

Я новичок в написании сообщений со встроенным в них кодом, так что дайте мне передохнуть, если это выглядит ужасно, или посоветуйте, как сделать так, чтобы это выглядело лучше. :)

Проблема, с которой я сталкиваюсь, в значительной степени соответствует названию. Я делаю простой калькулятор для задания, я пытаюсь, чтобы программа сравнила введенную математическую операцию, например (+,-,*,/).

* Затем настройте cmp что-то вроде....

cmp MathOper, 43...*

* Но у меня возникают проблемы с тем, чтобы программа распознавала правильные вещи. Я опубликую копию кода ниже, но имейте в виду, что это черновой вариант, просто попытка проработать некоторые идеи. *

Спасибо за любую помощь!

; Author:  
; Date:    03/22/2022

.586
.MODEL FLAT

INCLUDE io.h            ; header file for input/output

.STACK 4096

.DATA
num1                   DWORD    ?
num2                   DWORD    ?
MathOper               DWORD    ?
result                 DWORD    20 DUP (?), 0
string                 BYTE     40 DUP (?), 0




Num1prm       BYTE  "Enter First Number", 0
Num2prm       BYTE  "Enter Second Number", 0
MathOPprm     BYTE  "Enter Math Operation (+,-,*,/)", 0
Resultprm     BYTE  "The Result is: ", 0
                            


.CODE
_MainProc PROC
loopy:
            input  Num1prm, string, 20
            atod    string
            mov     num1, eax
            
            input  MathOPprm, string, 20
            atod    string
            mov     MathOper, eax

            input  Num2prm, string, 20
            atod    string
            mov     num2, eax

            
            ;HAVING ISSUES GETTING THIS TO WORK
            cmp MathOper, 43
            jne SUBTRACTION
            call Addition
            dec ecx
            jnz loopy
           
           
           
            SUBTRACTION:           
            cmp MathOper, 45
            jne MULTIPLICATION
            call Subtraction

            MULTIPLICATION:
            cmp MathOper, 42
            jne DIVISION
            call Multiplication

            DIVISION:
            cmp MathOper, 47
            call Division
            cmp MathOper, 101
         
      
 endloopy:

            mov     eax, 0                   ; exit with return code 0
            ret
_MainProc ENDP
                                             ; end of source code


Addition PROC
        push    ebp
        mov     ebp, esp
        push    ebx
        
        mov     eax, num1
        mov     ebx, num2
        add     eax, ebx
        dtoa    result, eax

        output  Resultprm, result, 40
        pop     ebx
        pop     ebp

        ret
Addition ENDP

Subtraction PROC
        push    ebp
        mov     ebp, esp
        push    ebx
        
        mov     eax, num1
        mov     ebx, num2
        sub     eax, ebx
        dtoa    result, eax

        output  Resultprm, result, 40
        pop     ebx
        pop     ebp

        ret
Subtraction ENDP

Multiplication PROC
        push    ebp
        mov     ebp, esp
        push    ebx
        
        mov     eax, num1
        mov     ebx, num2
        mul     ebx
        dtoa    result, eax

        output  Resultprm, result, 40
        pop     ebx
        pop     ebp

        ret
Multiplication ENDP

Division PROC
        push    ebp
        mov     ebp, esp
        push    ebx
        
        mov     eax, num1
        mov     ebx, num2
        cdq
        idiv    ebx
        dtoa    result, eax

        output  Resultprm, result, 40
        pop     ebx
        pop     ebp

        ret
Division ENDP


END  

Вот оно! Большое тебе спасибо. Очевидно, все еще изучаю все тонкости ассемблера. :) Такой простой ответ, который я гуглил не менее 2 часов, прежде чем сделать этот пост. ммм.. Но тем не менее, Спасибо! Может быть, кто-то еще столкнется с подобной проблемой и наткнется на это простое решение.

BeXp 23.03.2022 16:37
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не хотите вызывать atod на string после прочтения ввода, потому что это не число.
Просто скопируйте первый символ строки в MathOper, используя это:

    movzx eax, [string]
    mov MathOper, eax

Другие вопросы по теме