Assembler dodawanie 2 liczb

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.

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ę.

0
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

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:

mov [wynik],ah
0

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

mov byte ptr [wynik],ah
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.

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.

0

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

0

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

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