Problemas con el lenguaje ensamblador
Aquí hay dos problemas:
1. Parte del código y el formato es un marco de algoritmo antiguo utilizado para garantizar que DOS pueda devolverse correctamente una vez finalizado el programa.
START PROC FAR; debe definirse con FAR para garantizar que el RET final se ensamble en el RETF devuelto por la llamada lejana
PUSH DS las tres instrucciones que comienzan desde aquí están activadas; la pila forma un puntero lejano que apunta a la primera dirección de la PSP
MOV AX, 0
PUSH AX
...... Aquí está; el código del programa principal
p>RET ;Este retorno es un retorno lejano
START ENDP
Este marco es un formato fijo.
Para conocer los principios detallados, consulte la información relevante. Implica la estructura PSP del programa EXE de carga de DOS, así como los requisitos funcionales de INT 20H de versiones inferiores de DOS.
En versiones superiores de DOS, con la llamada a función 4CH DOS, no es necesario utilizar este formato de cuadro.
2. El nombre del segmento DSEG y la dirección del segmento correspondiente son una constante determinada cuando el programa se carga en la memoria. El operando del nombre del segmento DSEG utilizado en la instrucción es direccionable inmediatamente. La combinación de direccionamiento de la instrucción MOV no permite que los datos inmediatos se transfieran directamente al registro de segmento.
Entonces, para cargarlo en el registro de segmento DS, la única forma es pedir prestado un registro de uso general para su transferencia.
Entonces:
MOV AX, DSEG; obtiene la dirección del segmento y este valor inmediato se puede enviar al registro general. AX también se puede sustituir por BX, SI, etc.
MOV DS, AX ; el registro general se puede pasar al registro de segmento