Ensamblador x86 avanzado. . .
He visto este problema dos veces. La razón es que cuando se depura con el comando t, en realidad se activa una interrupción de un solo paso, y cuando ocurre una interrupción de un solo paso, CS, IP, bits de bandera y otras cosas también se almacenarán en la pila. La operación de inserción de pila del programa sobrescribe el CS o IP guardado por la interrupción de un paso y no puede regresar correctamente después de usar el comando t.
Solución: establezca un tamaño de pila mayor; no configure manualmente segmentos de pila, SP, etc. Deje que el compilador lo configure él mismo.
Por ejemplo:
Supongamos cs: código, ds: datos, ss: sseg
Segmento de datos
dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h
Fin de los datos
pila del segmento sseg; al definir un segmento, agregue la palabra clave stack al final.
dw 512 dup(?) ; Establece la pila más grande.
Fin de sseg
Segmento de código
Inicio:
Mover eje, datos
Mover ds, ax
;No configure manualmente el segmento de pila ni el SP.
mov cx, 8
mov bx, 0
Estudiante:
Presione [bx]
Agregar bx, 2
Bucle s
mov cx, 8
mov bx, 0
s1:
pop [bx]
Agregar bx, 2
Bucle s1
mov hacha, 4c00h
int 21h
Fin del código
Fin del inicio