Betrachten Sie die folgenden Makros:Weird-Makros (TASM)
pixelFast MACRO
; This macro draws a pixel, assuming the coordinates are already loaded in cx&dx and the color is in al.
xor bh, bh
mov ah, 0ch
int 10h
ENDM
drawRect MACRO x1, y1, x2, y2, color
LOCAL @@loop, @@row_loop
xor cx, cx
mov dx, y1
mov al, BYTE PTR [color]
@@loop:
mov cx, x1
@@row_loop:
pixelFast
inc cx
cmp cx, x2
jna @@row_loop
inc dx
cmp dx, y2
jna @@loop
ENDM
rendToolBar MACRO
drawRect COLORDISP_X1, COLORDISP_Y1, COLORDISP_X2, COLORDISP_Y2, foreground_color
mov temp_color, 36h
drawRect COLORBTN1_X1, COLORBTN1_Y1, COLORBTN1_X2, COLORBTN1_Y2, temp_color
mov temp_color, 2Eh
drawRect COLORBTN2_X1, COLORBTN2_Y1, COLORBTN2_X2, COLORBTN2_Y2, temp_color
mov temp_color, 4h
drawRect COLORBTN3_X1, COLORBTN3_Y1, COLORBTN3_X2, COLORBTN3_Y2, temp_color
mov temp_color, 2Bh
drawRect COLORBTN4_X1, COLORBTN4_Y1, COLORBTN4_X2, COLORBTN4_Y2, temp_color
ENDM
Irgendwo in meinem Code, ich benutze das rendToolBar Makro. Es soll eine große weiße Leinwand und dann ein kleines Quadrat und daneben einige kleinere Quadrate in einem bestimmten Muster zeichnen, was für meine Frage irrelevant ist. Beachten Sie, dass rendToolBar drawRect 5 mal aufruft. Ich folgte diesem Code im Turbo-Debugger (weil etwas sehr schief gelaufen ist) und bemerkte, dass in der 4. Ausführung des drawRect-Makros das "int 10h" von pixelFast nicht wirklich "int 10h", sondern "int 2" ist. Dies führt zu einem NMI, der Dinge für mein Programm durcheinander bringt. Ich möchte wissen, was bewirkt, dass TASM das Makro für diese Zeile im vierten Aufruf für dieses Makro unterschiedlich erweitert, trotz der Tatsache, dass diese Zeile "int 10h" nicht auf irgendwelche Makroargumente angewiesen ist. Wenn Sie dieses Bild betrachten, können Sie das unerwartete "int 2" dort sehen, das ein "int 10" sein sollte. Nach ihm können Sie sehen:
cmp [bx+si], ax
add ch, bh
cmp [bx+03], dx
Nach den Quellcode des Makros wurden diese drei Befehle in der Tat soll
inc cx
cmp cx, COLORBTN3_X2
jna @@row_loop
Es gibt einige andere Anweisungen sein, die ein wenig abseits der vor der Unterbrechung sind , aber Sie verstehen es.
und was ist die Frage? – Kamiccolo
@Kamiccolo Die Frage ist da, direkt über dem Bild des Turbo-Debuggers. – Itamar
Ich wünschte, alle Anfänger Debug-Hilfe Fragen zu SO hatte tatsächlich einen Debugger Screenshot oder etwas, das alle Informationen enthält, die benötigt werden, um das Problem zu debuggen, das sie haben. So oft Leute Post Code und nur fragen, warum es segfold ohne zu sagen, welche Anweisung Fehler. –