В настоящее время у меня есть три сегмента памяти, мой основной сегмент данных, сегмент стека и сегмент, где живет мой API. Следующие инструкции выполняются из сегмента данных, они выдвигают адрес cursorRow и welcomeMsg, а затем выполняют дальний вызов функции в моем сегменте API. Переменная cursorRow находится в основном сегменте данных, который вызывает функцию API. Звонок выглядит так:
push cursorRow
push welcomeMsg
call API_SEGMENT:API_printString
Как я могу изменить cursorRow внутри сегмента, где живет мой API, через стек? cursorRow должен быть обновлен из API. НИКАКИЕ функции API не изменяют сегмент данных. Я пробовал такие вещи, как: inc byte [ds:bp+8]
и add [ds:bp+8], 1
.
Вот вызываемая процедура API:
printStringProc:
push bp
mov bp, sp
mov si, [bp+6]
.printloop:
lodsb
cmp al, 0
je printStringDone
mov ah, 0x0E ; teletype output
mov bh, 0x00 ; page number
mov bl, 0x07 ; color (only in graphic mode)
int 0x10
jmp .printloop
printStringDone:
; move the cursor down
mov ah, 02h ; move cursor
mov dh, [bp+8]
mov dl, 0 ; column
mov bh, 0 ; page number
int 10h
add [ds:bp+8], 1
pop bp
retf
печатает строки, но переменная cursorRow не обновляется корректно. Я надеюсь, что я достаточно ясно по моей проблеме. Это сложно объяснить: D