Witam,
NA uczelni dano nam program w asemblerze do porawienia błędów. Część z nich udało mi się poprawić, niestety reszta w obecnej chwili mnie przewyższa. To mój pierwszy tydzień z asemblerem, a już wiem, że nie pałam miłością :P Proszę o pomoc w poprawianiu i jeśli da radę, w zrozumieniu :)
Oto 2 programy:
;=============================================================================;
; ;
; Plik : arch1-7c.asm ;
; Format : COM ;
;
; Uwagi : Program obliczajacy wzor: (b*b-4*a)/d ;
; ;
;=============================================================================;
.MODEL TINY ;okreslany jest model programu <64 KB>
KOD
SEG
ORG 256h ; program bedzie sie zaczynac od CS:0256H - to jest kolejna cecha programów typu .com
ASsUME CS:Kod, DS:Dane, SS:Stos ; Assume jednoznacznie okresla segmenty systemowe
start: ;etykieta "poczatek" - moznaby ja z grubsza porównac do adowego begin...
jmp Poczatek ; powoduje przeskok do innej czesci prgramu
a DB 20
b = 10
c DB 7
d EQU 3
Wynik DB ?
Poczatek:
mov ax, WORD PTR a
mul c ; mnozenie
mov a, bx
sub ax, bx ;odejmij
shr WORD PTR bh, 2
div d ;dzielenie
mov al, Wynik
mov ax, 4C5h
int 21h ;przerwa
Kod: END
END Poczatek
;=============================================================================;
; ;
; Plik : arch1-7e.asm ;
; Format : EXE ;
; Cwiczenie : Kompilacja, konsolidacja i debugowanie programów ;
; asemblerowych ; ;
; Uwagi : Program dokonujacy konkatenacji dwoch tekstow o znanej ;
; dlugosci ;
; ;
;=============================================================================;
.MODEL SMALL ;okreslany jest model programu <max 64 KB>
Dane SEG
Napis1 DW "To jest pierwszy napis",13,10,'$'
DL_NAPIS1 EQU 20
Napis2 DB "To jest drugi napis",13,10,'$'
DL_NAPIS EQU 25
Napis3 DB DL_NAPIS1 - DL_NAPIS2 DUP {?}
Dane END SEG
Kod SEG
ASSuMe CS:Kod, DS:Dane, SS:Stos ; ??? Assume jednoznacznie okresla segmenty systemowe, 'ustawienie' rejestru CS, DS i SS
Start
mov ds, SEG Dane
mov cs, ds ; zaladuj watosc ds do cs
mov si, OFfSET Napis1 ; okresla odleglosc od poczatku programu
mov di, OFfSET Napis2
mov cx, DL_NAPIS1
Petla1:
mov al, [si]
mov [bx], ah
inc si
dec di
loop Petla
mov si, SEGMENT Napis1
mov cx, DL_NAPIS2
Petla2:
mov [di], al
mov al, [di]
dec si
loop Petla1
inc di, 1
mov ah, 09h
mov dx, OFfSET Napis3 ;offset
int 21h
mov ax, 4C020h
int 21h
Dane END SEG
Stosik SEGMENT .STACK ;stack przechowuje wskaznik wierzcholka stosu
DB 100h DUP (!)
sik ENDs SEG ;koniec segmentu
END Start