Red de conocimiento informático - Problemas con los teléfonos móviles - Ensamblador x86 avanzado. . .

Ensamblador x86 avanzado. . .

Este es otro ejemplo del lenguaje ensamblador de Wang Shuang.

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