Mały kalkulator – program pobiera dwie liczby, ale pomija podanie znaku

0

Cześć, zadanie: podać dwie liczby oraz znak, w zależności od podanego znaku wykonać dane działanie na tych liczbach i wypisać wynik. Jednakże w pierwszym programie wprowadzam znak, potem 2 liczby i wszystko jest ok, a w drugim wprowadzam 2 liczby i nie wiem czemu, omija mi wprowadzanie znaku.

extern scanf
extern printf
global main
section .text
main:
mov rdi,podaj
xor rax,rax
call printf

mov rsi,liczba1
mov rdi,format
xor rax,rax
call scanf

mov rsi,liczba2
mov rdi,format
xor rax,rax
call scanf

mov rdi,pytanie
xor rax,rax
call printf

mov rsi,znak
mov rdi,char
xor rax,rax
call printf

mov ebx,[liczba1]

cmp byte [znak],'+'
JNE _odejmowanie

ADD ebx,[liczba2]
jmp _koniec

_odejmowanie:
SUB ebx,[liczba2]

_koniec:
mov esi,ebx
mov rdi,wynik
xor rax,rax
call printf

mov rax,1
int 80h

section .data
podaj: db "podaj liczby",10,0
format: db "%d",0
liczba1: dd 0
liczba2: dd 0
pytanie: db "podaj znak",10,0
znak: db '-'
char: db "%c",0
wynik: db "wynik dzialania to: %d",10,0
1

Może wprowadź znak, pobrał znak nowej linii od liczby pobieranej wcześniej, pobierz 2x ten znak i tyle.

0

W takim razie w przypadku tego programu nie ma problemu, bo oczekuje liczby, a nie znaku?

extern printf
extern scanf
global main

section .text
main:

mov rdi,pytanie
xor rax, rax
call printf

mov rsi,znak
mov rdi,char
xor rax,rax
call scanf

mov rdi,prosba
xor rax,rax
call printf

mov rsi,liczba1
mov rdi,format
xor rax,rax
call scanf

mov rsi,liczba2
mov rdi,format
xor rax,rax
call scanf

mov ebx,[liczba1]

cmp byte [znak],'-'
JE _odejmowanie

ADD ebx,[liczba2]
jmp _koniec

_odejmowanie:

SUB ebx,[liczba2]

_koniec:
mov esi,ebx
mov rdi,wynik
xor rax,rax
call printf

mov rax,1
int 80h

section .data
pytanie: db "Jakie dzialanie, +/- ?",10, 0
znak: db '+'
char: db "%c",0
prosba: db  "podaj liczby", 10,0
format: db "%d",0
liczba1: dd 0
liczba2: dd 0
wynik: db "wynik dzialania wynosi: %d",10,0

1 użytkowników online, w tym zalogowanych: 0, gości: 1