Я хотел создать функцию, которая будет печатать на экране массив под названием sol. Расстояние между каждым символом должно быть расположено на 3 "символах" от ech other.
Но, когда я запускаю свой код, печатается только первая строка массива.Почему моя функция не работает? (Assembly)
Вот мой DSEG код:
line db 0
col db 0
temp db 3
indexc dw 0
sol db 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'
S_LEN = $- sol
db 'p', 'p', 'p', 'p', 'p', 'p', 'p', 'p'
db '*', '*', '*', '*', '*', '*', '*', '*'
db '*', '*', '*', '*', '*', '*', '*', '*'
db '*', '*', '*', '*', '*', '*', '*', '*'
db '*', '*', '*', '*', '*', '*', '*', '*'
db 'p', 'p', 'p', 'p', 'p', 'p', 'p', 'p'
db 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'
S_LEN2 = $- sol
моя функция:
PutPlayers Proc
push ax bx cx dx si
InitiolazingVar:
mov temp, offset sol
mov line, 1
mov col, 1
mov si, 1
Again:
;location
mov dl, col
mov dh, line
mov bx, 0
mov ah, 2h
int 10h
;printing the char
mov al, ds:[temp][si]
mov bl, 33
mov cx, 1h
mov bh, 0
mov ah, 9h
int 10h
add col, 3h
inc si
cmp si, 9
jnz Again
add temp, S_LEN
mov si, 1h
mov col, 1h
add line, 3h
cmp line, 19h
jnz Again
pop si dx cx bx ax
ret
PutPlayers endp
Итак, можете ли вы мне помочь?
'[temp] [si]' означает '[temp + si]', _not_ '[[temp] + si]'. То, что вы, вероятно, хотите, это '[sol] [si]'. Кроме того, ваш индекс ('si') неверен: он должен идти от 0 до 7, а не от 1 до 8 (подумайте о базовом адресе плюс _zero_ как элемент _first_). – Michael