我正在编写一个智商测试生成程序,其中我必须随机生成包括言语非言语问题的问题。为了生成非语言问题,我想显示其中字母和字母以圆形或三角形出现的问题。
但我不知道如何定位它们。例如,在非语言问题中,我想通过编写以下代码将字母和数字放置在三角形中:
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 将光标相对于控制台的起始位置定位,而不是相对于当前位置。这是我遇到的问题。
我认为应该有一种方法来获取当前光标位置,以便我可以通过添加和减去当前值来前后定位光标dh and dl同时生成一系列形状。
您可以在线获取 Irvine32 帮助:http://programming.msjc.edu/asm/help/ http://programming.msjc.edu/asm/help/。有一个 WinAPI 函数指定用于获取光标位置:获取控制台屏幕缓冲区信息 https://learn.microsoft.com/en-us/windows/console/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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)