¿Por qué PUSH CS es correcto en el ensamblaje? Pero POP CS está equivocado.
En el ensamblador, generalmente puede usar la instrucción PUSH para colocar el contenido del registro especificado en la pila para su protección, o puede usar la instrucción POP para cargar el contenido de la pila en el registro. Para el registro de segmento de código CS, el programa de usuario Solo hay operación PUSH CS. Si se escribe POP CS, el compilador informará un error. Esto se debe a que cambiar arbitrariamente el contenido del registro CS hará que el programa se ejecute de forma caótica y puede provocar la parálisis del sistema.
Cuando se produce una llamada de programa, el sitio de protección se completa mediante CP∪ según el tipo de llamada. Para llamadas dentro de segmentos, solo se guarda la dirección IP de compensación; para llamadas entre segmentos, tanto el registro de dirección de segmento CS como el registro de dirección de compensación IP están protegidos. La instrucción de retorno determina cómo restaurar la escena según si está CERCA o LEJOS. Cuando el usuario escribe el programa de llamada, no es necesario proteger o restaurar CS e IP, siempre que otros registros relacionados estén protegidos.
Si solo desea obtener el valor CS actual en el programa, puede insertar el valor CS en la pila a través de PUSH CS y luego usar la operación POP para colocarlo en otros registros.