我正在编写智商测试生成程序,其中我必须随机生成包含口头非语言问题的问题。为了生成非语言问题,我想显示字母和字母将以圆形或三角形出现的问题。
但我不确定如何定位它们。例如,在非语言问题中,我希望通过编写此代码来将字母和数字定位成三角形:
mov al, alpha
call writechar
add dl, 4
call gotoxy
mov al, num
call writedec
sub dl, 2
add dh, 1
call gotoxy
mov al, alpha
call writechar
这就是我已经知道的
dh = rows
(DL)=列
调用gotoxy
Gotoxy相对于控制台的起始位置定位光标,而不是相对于当前位置。这是我遇到的问题。
我认为应该有一种获取当前光标位置的方法,以便我可以通过在 dh 和 dl 的当前值中加上和减去来回来定位光标。生成串联形状。
答案 0 :(得分:1)
您可以在线获取Irvine32帮助:http://programming.msjc.edu/asm/help/。为获取光标位置指定了一个WinAPI函数:GetConsoleScreenBufferInfo。不幸的是,结构CONSOLE_SCREEN_BUFFER_INFO
的描述不正确。相应的COORD结构的名称是dwCursorPosition
。
以下是如何使用它的示例:
INCLUDE Irvine32.inc
INCLUDELIB Irvine32.lib
.DATA
txt1 db "Current Cursor Position is X=",0
txt2 db " Y=",0
BufferInfo CONSOLE_SCREEN_BUFFER_INFO <>
.CODE
main PROC
lea edx, txt1
call WriteString
invoke GetStdHandle, STD_OUTPUT_HANDLE
invoke GetConsoleScreenBufferInfo, eax, ADDR BufferInfo
movzx eax, BufferInfo.dwCursorPosition.X
call WriteInt
lea edx, txt2
call WriteString
movzx eax, BufferInfo.dwCursorPosition.Y
call WriteInt
exit
main ENDP
END main