Assembly 无法使mov ax、3 int 33h在图形模式下工作

Assembly 无法使mov ax、3 int 33h在图形模式下工作,assembly,x86-16,tasm,dosbox,Assembly,X86 16,Tasm,Dosbox,我正在尝试在图形模式(13h)下绘制一个矩形,并检查它是否在任何时候被单击,如果它曾经被单击过,我想转到“rectangleWasClicked:”,这是我的方法,但是它似乎不起作用(在单击绘制的矩形方面) 我甚至尝试了shr cx,1以适应宏可能使用640x200分辨率的事实,但这似乎不起作用。 我还尝试将bx与0(而不是1)进行比较,这样每当鼠标悬停在我指定的区域时,它都会指向标签,但是无论我在整个屏幕中悬停在哪里,它都不会做任何事情。 有什么想法吗 这是drawPlatform宏:

我正在尝试在图形模式(13h)下绘制一个矩形,并检查它是否在任何时候被单击,如果它曾经被单击过,我想转到“rectangleWasClicked:”,这是我的方法,但是它似乎不起作用(在单击绘制的矩形方面)

我甚至尝试了shr cx,1以适应宏可能使用640x200分辨率的事实,但这似乎不起作用。 我还尝试将bx与0(而不是1)进行比较,这样每当鼠标悬停在我指定的区域时,它都会指向标签,但是无论我在整个屏幕中悬停在哪里,它都不会做任何事情。 有什么想法吗

这是drawPlatform宏:

    drawPlatform macro x, y, color, height, width ;x, y are the starting position (top left corner)
       local whilePlatformBeingDrawn
        mov cx,x                        
        mov dx,y                                
        whilePlatformBeingDrawn:
            drawPixel_implicit color
            inc cx ;the x-coordinate
            checkDifference cx, x, width ;Keep adding Pixels till Cx-P_x=widthPlatform
         JNG whilePlatformBeingDrawn 
            mov cx, x
            inc dx
            checkDifference dx, y, height
        JNG whilePlatformBeingDrawn
    endm drawPlatform
在我看来,在将它们与鼠标坐标进行比较之前,drawPlatform正在破坏
cx
dx
。如果您在调用drawPlatform之前推送cx
推送dx
,然后在调用drawPlatform之后推送dx
pop cx
,它应该可以工作。
TASM不带涡轮调试器吗?或者,至少如果您有一些打印例程,您可以在代码中的关键位置放置一些屏幕消息,以查看事件流。

在我看来,drawPlatform在将它们与鼠标坐标进行比较之前,正在破坏
cx
dx
。如果您在调用drawPlatform之前推送cx
推送dx
,然后在调用drawPlatform之后推送dx
pop cx
,它应该可以工作。

TASM不带涡轮调试器吗?或者,至少如果您有一些打印例程,您可以在代码中的关键位置放置一些屏幕消息,以查看事件流。

它们不应该更好地在宏代码中保留那些
CX
DX
寄存器吗;所以不是“在调用*drawPlatform之前”。在我看来,mov ax,3 int 33h应该安装在牵引平台之后,以完全避免出现问题。起初我没有注意到这一点,所以我只是加入了上面的快速修复。这很有意义+1他们不应该更好地保存宏代码中的
CX
DX
寄存器吗;所以不是“在调用*drawPlatform之前”。在我看来,mov ax,3 int 33h应该安装在牵引平台之后,以完全避免出现问题。起初我没有注意到这一点,所以我只是加入了上面的快速修复。这很有意义+1.
    drawPlatform macro x, y, color, height, width ;x, y are the starting position (top left corner)
       local whilePlatformBeingDrawn
        mov cx,x                        
        mov dx,y                                
        whilePlatformBeingDrawn:
            drawPixel_implicit color
            inc cx ;the x-coordinate
            checkDifference cx, x, width ;Keep adding Pixels till Cx-P_x=widthPlatform
         JNG whilePlatformBeingDrawn 
            mov cx, x
            inc dx
            checkDifference dx, y, height
        JNG whilePlatformBeingDrawn
    endm drawPlatform