Pregunta

Estoy probando y tratando de aprender cómo funciona el ensamblador con C. Así que estaba navegando en torno a algunos tutoriales y me encontré esto:

__asm
{
    mov     ax,0B800h       //startaddress for the screen memory (in textmode)
    mov     es,ax           //add the startaddress to es

    xor     di,di           //reset di (start at the beginning of the screen)

    mov     al, 65          //65 = ascii for the 'A' character to al
    mov     ah, 16*4+1      //Attribute = blue text on a red background to ah.
    mov     cx,2000         //25*80 = 2000 characters on the screen
    rep     stosw           //write ax to the screen memory and count di up 2000 times

}

El problema que tengo es que no puedo correr, puedo compilar dentro de mi método principal de Microsoft Visual Studio 2008, pero cuando lo ejecuto, se produce este error:

Excepción no controlada en 0x00da3660 en Prueba.exe: 0xc0000005:. Acceso violación lectura de ubicación 0xffffffff

en la segunda línea, es mov, hacha // Añadir A startadressen i es

¿Es posible que el programa es de 16 bits y que VS 2008 compila en un programa de 32 bits? Si es así, se puede forzar VS 2008 para compilar de manera diferente?

¿Alguien sabe de un buen tutorial ensamblador dentro?

¿Fue útil?

Solución

Es de 16 bits de código DOS asumiendo una gran cantidad de cosas que no son verdad ya desde hace mucho tiempo. Usted debe mejor buscar algún otro tutorial.

Otros consejos

Hola He encontrado un tutorial muy bueno !, se explica con diagramas simples cada detalle.

Es exactamente lo que busca:!)

http://rodrigosavage.blogspot.com /2010/07/hello-world-with-inline-asm.html

vuelvo a escribir el código como:

[BITS 16]
[ORG 7C00h]
main:

mov     ax,0B800h
mov     es,ax
xor     di,di
mov     al, 65
mov     ah, 16*4+1
mov     cx,2000
rep     stosw

times 510-($-$$) db 0
dw 0xAA55

A continuación, guardarlo como xxx.asm, y compilarlo usando "nasm xxx.asm", y posteriormente ejecutar este KVM en el interior: "xxx KVM", o puede también "dd" en su disco duro y arrancar directamente desde el el código y ver en funcionamiento. Todo se hace dentro de entorno de Ubuntu. Hay muchos ejemplos más similar a la anterior aquí:

Guía de Gavin a Asamblea 80x86 - Parte 7:

http://stuff.pypt.lt/ggt80x86a/asm8.htm

rep stosw repite almacenar una palabra de hacha ES: DI, y sus ES: DI es B-800: 0, lo que es arbitrario en modo protegido y no puede ser mapeada en su programa, por lo que da un fallo de segmentación. Se parece a un antiguo código. Si tiene DOS, que sólo podría trabajar

Windows no permite el acceso directo a la memoria de vídeo. Si quieres trabajar en la consola, se debe utilizar consola API relacionada.

Este es el código de DOS. Para el aprendizaje de montaje Win32, los 'clásicos' son tutoriales de Iczelion. Echar un vistazo aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top