Assembler dodawanie 2 liczb

UA
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam
Chciałem poznać całkowite podstawy języka assembler ale już na początku mam problem.Chciałem dodać do siebie 2 liczby i wyświetlić je na ekranie.Korzystam z NASM i robię to pod linuxem ale myślę ,że większej różnicy to nie robi.A oto kod.

Kopiuj
section .text

global _start

_start:

mov al,liczba1
mov ah,liczba2
add ah,al
mov wynik,ah

mov eax,4
mov ebx,1
mov ecx,wynik
mov edx,wynik_ln
int 80h

mov eax,1
xor ebx,ebx
int 80h

section .data

liczba1 db 1
liczba2 db 2
wynik db 0
wynik_ln equ $ - wynik
 

Wyświetla mi błąd przy kompilacji w linijce mov wynik,ah i pisze invalid combination of opcode and operands nie mam pojęcia co zrobiłem źle.Prosiłbym o jakąś wskazówkę.

msm
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
mov wynik,ah

Podejdź do tego na chłopski rozum - wynik to dla asemblera miejsce w pamięci. Miejsce w pamięci to dla asemblera liczba (wskaźnik) - dajmy na to wynosi 0x12345678. Czyli ten kod redukuje się podczas asemblacji do czegoś w rodzaju

Kopiuj
mov 0x12345678, ah

Co z kolei oznaczałody w języku C-podobnym coś w rodzaju
0x12345678 = ah
Czyli jest oczywistym absurdem.

Nie chcesz przypisywać ah do etykiety wynik tylko do miejsca w pamięci oznaczonego tą etykietą. Czyli piszesz tak:

Kopiuj
mov [wynik],ah
MasterBLB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1454
0

I całkiem możliwe,że musisz podać wielkość w bajtach ile zapisujesz:

Kopiuj
mov byte ptr [wynik],ah
UA
  • Rejestracja: dni
  • Ostatnio: dni
0

Oki dziękuję za pomoc.Mam jeszcze takie pytanko.Próbowałem w prymitywny sposób wyświetlić jakąkolwiek liczbę i wyświetla mi krzaczki,Robię to tak.

Kopiuj
section .text

global _start

_start:

mov eax,4
mov ebx,1
mov ecx,liczba1
mov edx,liczba1_ln

int 80h
mov eax,1

int 80h

section .data

liczba1 db 2
liczba1_ln equ $ - liczba1
 

Przydała by mi się wskazówka.

hauleth
  • Rejestracja: dni
  • Ostatnio: dni
0

Chcesz wypisać liczbę jak ciąg znaków, więc nie dziw się, że ci wypisuje jakieś krzaki.

UA
  • Rejestracja: dni
  • Ostatnio: dni
0

Nie rozumiem:P Chciałbym np dodać dwie liczby a potem wyświetlić wynik.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.