¿Por qué no tenemos una instrucción llamada LDAX H en el microprocesador 8085?

-1

Mientras que tenemos instrucciones como LDAX B, LDAX D !!!

    
pregunta Nivi

2 respuestas

5

TIENES el equivalente de LDAX H en el 8085. Pero está escrito como

MOV A,M

Porque M se define como "la dirección a la que apunta el par de registros HL".

Entonces, por la misma razón,

MOV M,A

es el equivalente de STAX H

    
respondido por el Finbarr
0

Como dijo @Finbarr, los datos apuntados por el par de registros HL se tratan de manera mnemónica de manera diferente a DE y BC . Hay dos cosas a considerar en el alcance de la pregunta:

1. ¿Por qué la palabra LDAX y qué significa?

La palabra LDAX es solo un mnemotécnico, y un conjunto de caracteres que corresponden al código de operación específico de la CPU. En general, podría haber sido cualquier cosa que los desarrolladores quisieran, distinta de otras mnemotécnicas para diferenciarse con otras operaciones de CPU. LD probablemente significa cargar y A significa acumulador. Lo que X significa debería ser indirecto . ¿Por qué no te preguntarías por LDAI? Esta es realmente una buena pregunta, y lo más probable es que los desarrolladores de mnemónicos de ensambladores quisieran una diferenciación con las instrucciones MVI y LXI .

Para comprenderlo mejor, debe mirar en la historia de los procesadores Intel de 8 bits, sus códigos de operación y mnemónicos utilizados. El conjunto de CPU relacionadas es 8008 - > 8080 - > 8085 y bifurcación a Z80. Se estableció una instrucción específica en 8008 , y los desarrolladores intentaron extenderla a < a href="http://www.hartetechnologies.com/manuals/Intel/Intel%208080%20System%20Manual_a.PDF"> 8080 y luego a 8085 . Z80 es una historia diferente, tiene su propio conjunto de mnemotécnicas, muy similar a la de los 8080, pero diferente, sin este registro M .

8008 permitió la carga indirecta solo de un par de registros - HL , y se llamó registro M . Al acceder a este registro, la CPU accedía realmente a la memoria externa en la dirección establecida en el par de registros de CPU HL . No había otros registros indirectos, por lo que M parecía ser la mejor opción para memory .

8080 es una extensión de 8008, y ahora permite cargar el acumulador desde la dirección de memoria señalada por los pares de registros DE y BC, sin embargo, ¿cuál sería el registro virtual para usar en mnemonic? M1? M2? ¿MARYLAND? ¿MEGABYTE? Y los desarrolladores decidieron, para los nuevos códigos de operación de la CPU 8080, introducir nuevos comandos que eliminen la confusión y hacer que el código diseñado para 8080 parezca similar / portátil a 8008, por lo que el conjunto de nemotecnia de 8080 de ensamblados es un superconjunto de 8008, y no un nuevo conjunto.

En contraste, en el ensamblador Z80, todo el acceso indirecto se hace uniforme, y los programadores declaran explícitamente qué par de registros se utiliza: por ejemplo, LD A,(HL) , LD A,(DE) y LD A,(BC) , y el código de máquina generado por el compilador serán los mismos que MOV A,M , LDAX D y LDAX B respectivamente.

2. ¿Por qué HL no está en la lista de LDAX?

Primero, por razones de compatibilidad con el ensamblador 8008/8080; La segunda razón es que M (o (HL) ) tiene una razón funcional real para existir. Hay una serie de operaciones, cuando la CPU utiliza su RAM lógicamente de la misma manera que sus registros internos, por lo tanto, M funcionalmente es un registro más dirigido por el par HL . Estos comandos son (en mnemónico): ADD M , ADC M , SUB M , SBB M , INR M , DCR M , CMP M , ANA M , ORA M y XRA M .

Tomemos INR M . Su código de operación es 00_110_100 , donde el 00 inicial y el 100 final definen la operación para incrementar el contenido del registro de 8 bits, y 100 en el medio es la identificación del acceso indirecto de la RAM mediante el registro HL. Por lo tanto, el código de operación 00_111_100 corresponde a INR A ( 111 identifica el registro acumulador) y el código de operación 00_001_100 corresponde a INR C ( 001 identifica el registro C).

Funcionalmente, la operación LDAX H existe en el procesador, y su código de operación es el mismo que MOV A,M , pero el compilador no puede (o, para su sorpresa, ¡puede!) aceptar este mnemotécnico.

    
respondido por el Anonymous

Lea otras preguntas en las etiquetas