Also habe ich diese Aufgabe, ein Programm zu schreiben, das einen Stuhl wie ein Dreieck mit Zeilen von Zeichen erstellt.Stapelproblem in x86-Baugruppe: Dreieck PROC-Fehler auf POP
Wenn der Benutzer eine Nummer wählt, in diesem Beispiel '4', sollte es so aussehen:
1
12
123
1234
2 3
3 2
4 1
Nun, für das Dreieck Teil kam ich mit auf den Punkt:
DATA SEGMENT
WELCOME DB 'PLEASE ENTER INTEGER BETWEEN 2 AND 9:$'
NEWLINE DB 13, 10, '$'
WRONG DB 10,13,'WRONG INPUT!',10,13,'$'
DATA ENDS
SSEG SEGMENT STACK
DW 100 DUP (?)
SSEG ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:SSEG
START:
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET WELCOME
MOV AH,9
INT 21H
MOV AH,1
INT 21H
CMP AL,32H
JL WRONG_INPUT
CMP AL,39H
JA WRONG_INPUT
JMP TRIANGLE
WRONG_INPUT:
MOV DX,OFFSET WRONG
MOV AH,9
INT 21H
JMP START
MOV CL,AL
SUB CL,30H
TRIANGLE:
CALL NEW_LINE
;BL PRINTED NUM
;AL COUNTER NUM
;CL LOOP NUMBER
XOR BH,BH
XOR AH,AH
XOR CH,CH
MOV AL,32H
MOV BL,32H
PUSH AX
CALL NEW_LINE
COUNTERLOOP:
CHECK_PRINT:
MOV DL,BL
MOV AH,2
INT 21H
INC BL
POP AX
CMP BL,AL
JBE CHECK_PRINT
JMP NEXT_ROUND
NEXT_ROUND:
INC AL
PUSH AX
DEC CL
MOV BL,32H
CALL NEW_LINE
LOOP COUNTERLOOP
LEGS:
; TODO --- create 'legs'
EXIT:
MOV AH,4CH
INT 21H
PROC NEW_LINE
MOV BP,SP
MOV DL, 0AH
MOV AH, 2H
INT 21H
MOV DL, 0DH
MOV AH, 2H
INT 21H
MOV DL,31H
MOV AH,2H
INT 21H
RET
NEW_LINE ENDP
CODE ENDS
END START
... aber aus irgendeinem Grund die POP
gibt mir 00,00
auf einmal, obwohl ich die PUSH
vorher verwendet .. Haben Sie einen Tipp?
Es ist nicht ganz klar, was Sie tun, aber da Sie 'POP AX' in der Schleife, wenn Sie gehen zurück über' JBE CHECK_PRINT "bedeutet, dass du wieder ohne Druck drückst. PS: Lerne einen Debugger zu benutzen. – Jester
Verstanden, danke. Schätzen Sie den Rat –