Autor
|
Tema: Duda en Ejemplo (Leído 4,368 veces)
|
Binary_Death
Desconectado
Mensajes: 214
|
Verán... he comprado el libro "Ensamblador para DOS, Linux y Windows" de Francisco Charte Ojeda, y estoy cursando el quinto capítulo. En él, hay el código fuente de un programa en ensamblador y el mismo programa ya compilado. Dicho programa lo testeé en Windows XP y Windows Vista, y en ambos NO funciona. De lo que estoy seguro es de que el ejemplo del libro, definitivamente no puede estar errado. Bien, les comento mi duda. El ejemplo trata sobre el acceso al segmento de pantalla de DOS: 0B800h. En la explicación cuenta que en ese segmento, el desplazamiento 0 contiene el código de carácter a escribir, el 1 el atributo del caracter, el 2 el siguiente código de carácter y el 3 el atributo de éste. Antes de proseguir les dejaré el código de ejemplo del libro: ; Definimos el segmento de datos segment Datos ; definiendo varios campos Asterisco db '*' Blanco db 0f0h Posicion dw 3280 ; l:20,c:40 Valor32 dd 0
; Segmento para la pila segment Pila stack resb 256 InicioPila:
; Segmento de código segment Codigo ..start:
; inicializamos ds mov ax, Datos ; para acceder a los datos mov ds, ax
; preparamos el registro es ; para acceder al segmento ; donde está el contenido de ; la pantalla mov ax, 0b800h mov es, ax
; recuperamos en AL el ; valor que hay en Asterisco mov al,[Asterisco] ; en AH el color mov ah,[Blanco]
; y en BX la posición mov bx,[Posicion]
; transferimos el contenido ; de AX a la dirección ES:BX mov [es:bx], ax
; escribimos directamente en la pantalla un valor inmediato mov word [es:5*160+35*2], 00a41h ; salimos al sistema mov ah, 4ch int 21h
AX se descompone en AH y AL, que contienen los bits más y menos significativos respectivamente, ¿cierto? Bien, si fuera como el libro dijo, en AH debería situarse el código del carácter y en AL su atributo. Pero no es así, sino al revés. La duda es precisamente esa, ¿por qué? Y no estaría de más que alguien me pudiera decir por qué no me funciona en mi sistema, porque me encataría testear los ejemplos =/ En fin, ¡gracias y saludos!
|
|
|
En línea
|
|
|
|
Debci
Wiki
Desconectado
Mensajes: 2.021
Actualizate o muere!
|
Se que puede parecer una tonteria mi respuesta, pero no tendra algo que ver little endian?
Saludos
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
Usa una maquina virtual con MS-DOS, un MS-DOS real o DosBox tal vez, para probarlo. Tiene que ver que sea little endian: http://en.wikipedia.org/wiki/Endianness
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Binary_Death
Desconectado
Mensajes: 214
|
Está bien, creo que comprendí. Si AH vale, por ejemplo, 04 y AL, por ejemplo, FF, al mover esos datos a una posición de memoria, son almacenados en orden inverso, de forma que quedaría FF04h. ¿Estoy en lo cierto? Mmm... eso me pareció entender...
|
|
|
En línea
|
|
|
|
Debci
Wiki
Desconectado
Mensajes: 2.021
Actualizate o muere!
|
Está bien, creo que comprendí. Si AH vale, por ejemplo, 04 y AL, por ejemplo, FF, al mover esos datos a una posición de memoria, son almacenados en orden inverso, de forma que quedaría FF04h. ¿Estoy en lo cierto? Mmm... eso me pareció entender...
Eso es lo que sugeri pero no me hagas mucho caso, no tengo mucha idea de ASM... Saludos
|
|
|
En línea
|
|
|
|
Binary_Death
Desconectado
Mensajes: 214
|
En fin, muchas gracias por la ayuda. Imagino que algo así será. Saludos!
|
|
|
En línea
|
|
|
|
ño_ño
Desconectado
Mensajes: 6
|
mov AX, 0 mov DS, AX mov BX, 0B8000h mi_apodo: db "Binary_Death" fin_mi_apodo: mov CX, mi_apodo imprimir_mi_apodo: mov AL, [DS:CX] mov byte [DS:BX], AL add BX, 2 inc CX cmp CX, fin_mi_apodo jne imprimir_mi_apodo ;Aqui sales del entorno como te dice el libro Eso si, tal vez debas calcular una que otra direcciones de memoria, pero ahi no te puedo ayudar mucho, porque no trato con entorno de OS, y nunca me he interesado por como se debe hacer.
|
|
|
En línea
|
|
|
|
|
|