Asembler pomoc przy zadaniu.

0

Witam,

Czy mógłby mi ktoś wytłumaczyć w jaki sposób mogę wykonać poniższe dwa zadania? Zaznaczę, że nie znam w ogóle asemblera.

  1. Dany jest następujący program w asemblerze:

mov ax,3
mov bx,5
add ax,bx
neg bx
add bx,ax
sub ax,bx
int 3

Jaka będzie wartość rejestrów ax i bx po wykonaniu programu?

2). Dany jest następujący program w asemblerze:

   mov ax,9

et1: cmp ax,4
jle et2
sub ax,2
jmp et1
et2: int 03

Jaka będzie wartość rejestru ax po wykonaniu programu?

2

@QbaF:

AX i BX to rejestry 16 bitowe.
Wystarczy jak zapoznasz się z tym: https://www.mimuw.edu.pl/~ben/Zajecia/Mrj2014/Notatki/04x86.pdf

mov ax,3    //
mov bx,5   //
add ax,bx  // ax = 8
neg bx       // bx = 65535 - 5 = 65530
add bx,ax   // 65530 + 3 = bx = 65533

( i tak dalej ... )
2

Do zadania 1 wystarczy:
mov [rejestr] [wartość] ustawia wartość rejestru na [wartość].
add/sub [rejestr1] [rejestr2/wartość] dodaje/odejmuje do/od wartości w rejestrze 1 wartość rejestru 2 lub jakąś stałą.
neg [rejestr] odwraca bity w danym rejestrze - np. z 00110110 robi 11001001.
Teraz zrób obliczenia.

Do zadania 2:
et1 i et2 to labelki.
jmp [labelka] oznacza przeskok programu do danej labelki.
cmp ax, 4 porównuje (de facto odemuje, ale bez zmiany wartości w rejestrze) 4 od wartości rejestru ax.
jle [labelka] skoczy do danej labelki pod warunkiem, że wynik ostatniej operacji wynosi 0 lub mniej.

Tyle powinno Ci wystarczyć do ogarnięcia tematu.

1

Dziękuję za szybką pomoc, pozdrawiam

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