Si entiendo esto correctamente, el contador del programa apunta a la dirección de la instrucción a ejecutar y en la mayoría de los casos agrega cuatro al contador del programa para avanzar a la siguiente dirección de instrucción. Pero supongamos que tiene un contador de programa que apunta a una palabra (por ejemplo, la palabra 15) en la memoria y desea avanzar a la siguiente instrucción, ¿se supone que debe sumar 4 directamente a 15 para obtener la siguiente instrucción? Cualquier explicación sería apreciada¿Contador de programa?
Respuesta
Eso se llama puntero de instrucción. Una vez que el procesador decodifica la instrucción actual, encuentra cuántos bytes ocupa y sabe cuánto agregar al valor del puntero de la instrucción actual para pasar a la siguiente instrucción, de modo que cuando se ejecute la instrucción actual, el procesador sepa qué hacer a continuación.
Entonces, por ejemplo, el procesador comienza con el puntero de instrucción que almacena el valor 15 como en su ejemplo - parece que sucede en esa dirección, sucede que hay una instrucción ocupando 5 bytes, no hay problema - agrega 5 al valor actual y esto rinde 20 y entonces el puntero de instrucción ahora almacena el valor 20 y el procesador luego ejecuta la instrucción actual.
Nunca avanza el contador del programa directamente - La CPU lo hace por usted mediante la ejecución de su programa. Como programador, usted manipula el contador del programa ejecutando varias instrucciones de salto (condicional, incondicional, salta a subrutina, etc.). Un caso específico cuando necesita agregar un desplazamiento al contador del programa es cuando se bifurca en código independiente de posición. Sin embargo, incluso en este caso, no agrega el tamaño de la instrucción al contador del programa: en su lugar, proporciona el desplazamiento del lugar al que desea saltar ejecutando una "dirección de rama a relativa".
¿Qué tal cuando estamos escribiendo un gestor de arranque que saltará al código de la aplicación que se encuentra en la dirección absoluta 0x4000? En este caso, cambiaremos directamente el contador del programa a la dirección absoluta. – eepty
@eepty Eso es lo que dice la segunda oración: lo estás haciendo con una instrucción de salto, no con una instrucción de ajuste de registro. – dasblinkenlight
- 1. contador de programa de lectura directa
- 2. Diferencia entre "contador de programa" y "dirección de inicio"
- 3. Mover el contador de programa en la depuración de Delphi
- 4. Ninguna función contiene contador de programa para el cuadro seleccionado
- 5. Contador de incremento Talend
- 6. Contador de JPA NamedQuery
- 7. ARM Cortex M3 ¿Cómo determino el valor del contador del programa antes de una falla grave?
- 8. Contador de visitas en magento
- 9. contador SSE de 128 bits
- 10. contador sincronizado en clojure
- 11. bucle foreach con contador
- 12. Jquery cada uno() Contador
- 13. contador estático en C++
- 14. Contador atómico en gcc
- 15. Contador SQL para cada fecha
- 16. Implementación de un contador de visitantes
- 17. Contador de líneas de código .NET
- 18. El Contador de rendimiento solicitado no es un contador personalizado, tiene que inicializarse como ReadOnly
- 19. Contador de tipo RateOfCountsPerSecond32 siempre muestra 0
- 20. Cómo restablecer contador de rendimiento personalizada
- 21. Contador de caché en una relación habtm?
- 22. Incremento atómico de un contador en django
- 23. Contador de rendimiento frente a ETW
- 24. Cómo se elimina un contador de rendimiento
- 25. Variable de contador para la clase
- 26. Variable de contador JasperReports siempre incrementando
- 27. contador de rendimiento personalizado en C#/perfmon
- 28. agregue +1 al campo (contador de visitas)
- 29. Contador de filas/columnas en funciones 'aplicar'
- 30. La implementación de un contador en para
Su ejemplo tiene sentido, pero ¿de dónde viene PC + 4 si lo que agrega depende de cuál es esa dirección? – Ockham
@ user28694: Esto dependerá de un procesador. Algunos procesadores tienen el conjunto de instrucciones donde todas las instrucciones tienen la misma longitud, por lo que pueden +4 incondicionalmente. Algunos procesadores tendrán instrucciones de longitud variable y decidirán con qué instrucción tratarán utilizando los primeros bytes de la instrucción. – sharptooth
¿No son [las instrucciones MIPS de 32 bits de longitud] (http://en.wikipedia.org/wiki/MIPS_architecture#MIPS_I_instruction_formats)? –