| Clarx a întrebat:

Este cineva pe aici care stie sa programeze in limbaj de asamblare? Am un program care imi da 3 erori de asamblare a codului sursa. Programul meu cere ca utilizatorul sa introduca de la tastatura un sir de caractere, iar apoi programul sa il afiseze si sa afiseze totodata si lungimea acestuia. Insa cand il compilez, imi apar erorile: Relative jump out of range by 0023h bytes (linia 65), Relative jump out of range by 0034h bytes (linia 69), Relative jump out of range by 0034h bytes (linia 70). Dau funda celui care ma ajuta sa rezolv toate problemele programului (poate mai sunt si altele in afara de acele 3 erori, la calcularea lungimii sirului)!
Codul programului este prezentat mai jos:
. model small
. data
mesaj1 db "1. Citire ","$"
mesajcitire db "Introduceti sir: ","$"
mesaj2 db "2. Afisare ", "$"
mesajafisare db "Sirul introdus este: ","$"
mesaj3 db "3. Lungime sir: ", "$"
mesajlungimesir db "Lungimea sirului este: ","$"
mesaj4 db "4. Informatii autor ","$"
mesajinfo db "Popescu Ion","$"
mesaj5 db "5. Exit","$"
moptiune db "Optiunea aleasa: ","$"
eroare db "Optiune inexistenta!","$"
optiune db 0
linie db 1h
sir db 50 dup(?), '$'
instr1 db 50 DUP ("$")

meniu macro mesaj
mov ah, 02h; serviciul pentru setarea pozitiei cursorului
mov dh, linie; linia
mov dl, 22h; coloana
int 10h
; afisare mesaj
mov ah, 09h
mov dx, offset mesaj
int 21h
endm
. code
start:
mov ax, dgroup
mov ds, ax
main proc
mov ax, @data
mov ds, ax

lea si, instr1

cont:
mov linie, 1
meniu mesaj1
inc linie
meniu mesaj2
inc linie
meniu mesaj3
inc linie
meniu mesaj4
inc linie
meniu mesaj5
inc linie
meniu moptiune
inc linie

mov ah, 01h
int 21h
mov optiune, al
cmp optiune,'1'
je optiune1
cmp optiune,'2'
je optiune2
cmp optiune,'3'
je optiune3
cmp optiune,'4'
je optiune4
cmp optiune,'5'
je optiune5
jne opt_inexistenta
optiune1:
meniu mesajcitire
mov sir[0],254
mov ah, 0ah
mov dx, offset sir
int 21h
mov cx, 0
mov cl, sir[1]
mov si, cx
add si, 2
mov sir[si], '$'
inc linie
jmp cont
optiune2:
meniu mesajafisare
mov ah, 09h
mov dx, offset sir+2
int 21h
inc linie
jmp cont
optiune3:
meniu mesajlungimesir
mov ah, 2
mov dl, 0ah
int 21h
mov dl, 0dh
int 21h
mov ah, 2
mov dl, 0ah
int 21h
mov dl, 0dh
int 21h
mov ah, 9
lea dx, mesajlungimesir
int 21h
mov bl, sir+1
mov al, bl
aam
add ax, 3030h
mov dh, al
mov dl, ah
mov ah, 2
int 21h
mov dl, dh
mov ah, 2
int 21h
optiune4:
meniu mesajinfo
inc linie
jmp cont
optiune5:
je final
opt_inexistenta:
meniu eroare
inc linie
jmp cont
final:
mov ah, 4ch
int 21h
end start

Răspuns Câştigător
anonim_4396
| anonim_4396 a răspuns:

Poti traduce in limba engleza acele variabile si sa pui codul pe Stackoverflow in intrebare noua.
Daca folosesti un mediu de dezvoltare integrat(IDE) e recomandat sa le lasi un screenshot cu erorile.
TPU are prea putini useri care stiu limbajul de asamblare, pe stackoverflow e ceva fundamental sa-l stie.

2 răspunsuri:
| Clarx explică (pentru anonim_4396):

Nu se potriveste cu programul meu. Am incercat toate solutiile de acolo, dar nu a mers niciuna!

| anonim_4396 a răspuns (pentru Clarx):

Poti traduce in limba engleza acele variabile si sa pui codul pe Stackoverflow in intrebare noua.
Daca folosesti un mediu de dezvoltare integrat(IDE) e recomandat sa le lasi un screenshot cu erorile.
TPU are prea putini useri care stiu limbajul de asamblare, pe stackoverflow e ceva fundamental sa-l stie.