Witam, zaczynam swoją przygodę z programowaniem w asmie i dostałem zadanie aby utworzyć sumę lub różnicę w zależności od podanego znaku. Nadmienię iż zakładam że gdy ktoś wpisze plus to jest dodawanie a gdy minus (lub byle co) to wykonam odejmowanie.
section .data
napis db "Podaj znak zeby dodac lub odjac", 10
len equ $-napis
znak db " ",10 ;miejsce na znak podany na wejsciu
lenz equ 1
wpis db "Wpisales znak, wykonuje dzialanie", 10
lenw equ $-wpis
plus db "+",10
plusl equ 1
section .bss
num1 resb 2 ;pierwsza liczba
num2 resb 2 ;druga liczba
res resb 1
section .text
global _start
_start:
mov rax, '5' ;wpisuje stala wartosc num1 i dalej num2
sub rax, '0'
mov [num1], rax
mov rbx, '2'
sub rbx, '0'
mov [num2], rbx
mov rax, 4 ;wypisanie
mov rbx, 1
mov rcx, napis
mov rdx, len
int 80h
mov rax, 3 ;wpisanie znaku
mov rbx, 0
mov rcx, znak
mov rdx, lenz
int 80h
mov rax, 4 ;komunikat o wpisaniu znaku
mov rbx, 1
mov rcx, wpis
mov rdx, lenw
int 80h
mov rax, [znak] ;wpisuje dwa znaki do rejestrów
mov rbx, [plus]
cmp rax, rbx ;porownuje dwa rejestry i tutaj gdzies moj program pada
je _skok ;jezeli prawdziwe to skok
mov rax, [num1] ;wpisz liczbe do raxa
sub rax, [num2] ;odejmij
mov [res], rax ;zapis liczby w res
jmp _koniec
_skok: ;dodawanie
mov rax, [num1]
add rax, [num2]
mov [res], rax
_koniec: ;wynik dzialania wyspisanie
mov rax, 4
mov rbx, 1
mov rcx, [res]
mov rdx, 1
int 80h
mov rax, 1 ;wyjscie
mov rbx, 0
int 80h
Jest to jeden z moich pierwszych programów poza hello worldem w asmie więc trochę ciężko mi się połapać, jestem otwarty na krytykę, opinie i sugestie. Z góry dziękuję za pomoc w rozwiązaniu problemu. Dodam że kompiluję na 64bit i nasm z linkerem ld.