我目前有三个内存段,我的主要数据段、堆栈段和我的 API 所在的段。以下指令从数据段执行,它们推送 cursorRow 和 welcomeMsg 的地址,然后对我的 API 段中的函数进行远调用。cursorRow 变量位于调用 API 函数的主数据段中。调用如下所示:
push cursorRow
push welcomeMsg
call API_SEGMENT:API_printString
如何通过堆栈更改我的 API 所在段内的 cursorRow?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