Zaczęły mi się laborki z assemblera, jako pierwsze zadanie muszę poprawić gotowy kod, w którym celowo umieszczono błędy składniowe i logiczne, tak aby on działał. Sęk w tym, że nie mielismy wcześniej ZADNEGO teoretycznego przygotowania do programowania w ASM, i nie jestem w stanie przyswoić sobie tak szybko odpowiedniej wiedzy.
Kod który mam poprawić ma za zadanie obliczać wzór d/(b-c)*(a+b)
Tak wygląda kod w oryginale:
:MODEL SMALL
Dane SEGM
a EQU 20
b DB 10
c = 5
d DB 3
Dane ENDSGM
Wynik = ?
Kod SEGMENT
ASIUM CS:Dane, DS:Kod, SS:Stos
Start
mov cs, SEGMET Dane
mov ds, cs
mov ax, d
sub bx, WORD PTR c
mov bx, WORD PTR b
div BYTR PTR bx
muv a, ax
mol cx
add bl, WORD PTR b
mov al, Wynik
mov ax, 4C15h
int 21h
Kod ENDSGMT
Stosik SEGM STAC
DB 100h DUP (*)
Stosk ENDSGMT
ENDP Stort
Tak wygląda moja wersja po przeróbkach (nadal się nie kompiluje):
.MODEL SMALL
Dane SEGMENT
a EQU 20
b DB 10
c = 5
d DB 3
Wynik = ?
Dane ENDS
Kod SEGMENT
ASSUME CS:Kod, DS:Dane, SS:Stosik
Start:
mov ax, SEG Dane
mov ds, ax
mov ax, d
sub bx, WORD PTR c
mov bx, WORD PTR b
div BYTE PTR bx
mov a, ax
mol cx
add bl, WORD PTR b
mov al, Wynik
mov ax, 4C15h
int 21h
Kod ENDS
Stosik SEGMENT STACK
DB 100h DUP(?)
Stosik ENDS
END Start
Program ma się kompilować przy pomocy TASM + TLINK i ma powstać z niego ostatecznie program .exe
Jak widać (Ci co się znają), usunąłem błędy będące literówkami, jednak same działania na rejestrach są już dla mnie magią. Podkreślam również, że finalny kod musi być poprawioną wersją tego, a nie zupełnie nowym kodem nie mającym nic z tym wspólnego. Gdybyście przy okazji dodali jakieś komentarze, to byłbym wdzięczny, bo bym się jednocześnie czegoś nauczył, a nie tylko na ślepo zrobił kopiuj/wklej