Witam :)
Mam prośbę do społeczności Assemblerowej :)
Ostatnio na zajęciach z kumplem pisaliśmy program, ja część podstawową on funkcję którą ma wykonywać program z niektórymi moimi pomysłami :)
Po złożeniu programu w całość niestety jest parę momentów których nie mogę zrozumieć :/ a kumpel wyjechał i aktualnie nie ma mi kto i jak wytłumaczyć tych części.
Program ma za zadnie sprawdzić ile razy wstąpi litera w podanym zdaniu.
Oto on:
Assume CS:Kod,DS:Dane
Dane segment
sNapisZnak db 13,10,'Wprowadz znak: $'
sNapisZdanie db 13,10,'Wprowadz zdanie: $'
sWynik db 13,10,'Wynik: '
pWynik db ' ',13,10,'$'
pBufor db 33,' '
Dane ends
Kod segment
Start:
MOV AX,Dane
MOV DS,AX
MOV AH,09h
LEA DX, sNapisZnak
INT 21h
MOV AH, 01h
INT 21h
MOV CL, AL
MOV AH,09h
LEA DX, sNapisZdanie
INT 21h
MOV AH,0ah
LEA DX,pBufor
INT 21h
MOV BX, DX
INC BX
MOV DL, CL
MOV CH, 0
MOV CL, pBufor+1
INC CL
MOV SI, 0;
MOV DH, 0;
et: CMP SI, CX
JE koniec
MOV AL, [BX][SI]
INC SI
CMP AL, DL
JNE et
INC DH
JMP et
koniec:
MOV AH,0
MOV AL,DH
MOV DX,0
MOV CH,0
MOV CL,10
MOV DL, '$'
PUSH DX
et2: TEST AX,AX
JZ koniec2
MOV DX,0
DIV CX
PUSH DX
JMP et2
koniec2:
MOV DL,0
LEA BP, pWynik
et3: POP AX
CMP AL,'$'
JZ koniec3
ADD AL, 48
MOV [BP][DI], AL
INC DI
JMP et3
koniec3:
CMP DI,0
JNE et4
MOV [BP][DI], 48
et4: MOV AH, 09h
LEA DX, sWynik;
INT 21h
MOV AX,4c00h
INT 21h
Kod ends
end start
A oto których części nie rozumiem:
MOV BX, DX
INC BX
MOV DL, CL
MOV CH, 0
MOV CL, pBufor+1
INC CL
MOV SI, 0;
MOV DH, 0;
et: CMP SI, CX
JE koniec
MOV AL, [BX][SI]
INC SI
CMP AL, DL
JNE et
INC DH
JMP et
oraz
et3: POP AX
CMP AL,'$'
JZ koniec3
ADD AL, 48
MOV [BP][DI], AL
INC DI
JMP et3
koniec3:
CMP DI,0
JNE et4
MOV [BP][DI], 48
Będę wdzięczny za każdą pomoc :)