• Jueves 2 de Mayo de 2024, 07:37

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - chouki

Páginas: [1]
1
ASM (Ensamblador) / posiciones del cursor del ratón
« en: Martes 2 de Febrero de 2010, 11:30 »
hola
estoy interesado en hacer un programa en ensamblador que me permite a cada vez que pulso p.e el botón izquierdo del ratón en cualquier posición de la pantalla (modo texto) me imprime un carácter.
lo que no sé exactamente cómo puedo obtener en cualquier momento las posiciones del ratón sabiendo que existe una función con el registro ax=3 del servicio 33h que me permite obtener las coordenadas del cursor,el problema a la hora de mostrar dicho carácter en la pantalla,como estoy trabajando en modo texto lo que hago es X 160 (el valor de la fila) X2(el valor de la columna),para escribir el carácter en una posición concreta.
os adjunto una muestra del código,corregirme si me equivoco please :
Código: ASM
  1.  
  2. datos segment
  3.  
  4. datos ends
  5.  
  6. pila segment stack
  7.  
  8.   db 100 dup('?')
  9.  
  10. pila ends
  11.  
  12. codigo segment
  13.  assume cs:codigo,ds:datos,ss:pila
  14.  
  15.  inicio:
  16.           mov ax,datos
  17.      mov ds,ax
  18.  
  19.          ;comprobarl la existencia del driver del ratón
  20.        
  21.           mov ax,0
  22.           int 33h
  23.           cmp ax,0
  24.           je salir
  25.          
  26.          ;mostrar el cursor
  27.          
  28.           mov ax,01h
  29.           int 33h
  30.            
  31.        
  32.  
  33.          ; comprobar la pulsación del botón izquierdo
  34.  
  35.  
  36.   btn_i :  
  37.            mov ax,5
  38.            mov bx,0
  39.            int 33h
  40.            cmp bx,1
  41.            jae izk
  42.            jmp btn_i
  43.  
  44.      
  45.  
  46.   izk :  mov ax,03h
  47.          shl cx,3
  48.          add cx,1
  49.          shl dx,3
  50.          add dx,1
  51.          mov columna,cx
  52.          mov fila ,dx
  53.          int 33h
  54.      
  55.         mov ax,0b800h
  56.         mov es,ax
  57.         mov byte ptr es:c[fila *160+clumna*2],'A'  ;aqui en principio tengo que pasarle las coordenadas del cursor para mostrar el dato
  58.         mov byte ptr es:[fila*160+columna*2+1],00010111b
  59.        
  60.         mov ax,5
  61.         mov bx,0
  62.         int 33h
  63.         cmp bx,1
  64.         jae izk
  65.          
  66.         jmp salir        
  67.  
  68.          
  69.  
  70.   salir :     mov ax,4ch
  71.               int 21h
  72.  
  73.        
  74. codigo ends
  75. end inicio
  76.  
  77.  
  78.          
  79.  
  80.  
  81.  
  82.  
gracias de antemano por su ayuda
saludos

2
Otros Sistemas Operativos / Cd arranque ms dos
« en: Jueves 10 de Diciembre de 2009, 17:26 »
hola
muy buenas estoy nuevo en este mundo del ensamblador,consigui el cd de arranque ms_dos para poder trabajar con turbo assembler lo que pasa al arrancarlo no me conoce el ratón  sabiendo que lo tengo conectado en puerto usb.
alguién sabe cómo puedo resolver dicho problema.
Muchisima gracias de antemano
saludos

3
ASM (Ensamblador) / contenido del cs(cod segment)?
« en: Sábado 24 de Octubre de 2009, 13:54 »
hola
estoy empezando con el ensamblador y tengo la duda siguiente haber si me podéis decir que es lo que tengo mal.
suponiendo que un fichero.map, correspondiente al mapa de memoria resultante de la compilación y linkado de cierto programa:
es el siguiente:
Start Stop Length Name
00000H ----H 00070H DATOS
00260H ----H 00030H PILA
00620H ----H 00700H CODIGO1
02760H ----H 03000H CODIGO2

Program entry point at 0276:0004H


Sabiendo que cuando se carga el ejecutable, el PSP se ubica en la posición física 18840H,  quiero saber el contenido del registro CS antes de ejecución del programa.
entonces lo que hicé es :
A)calculé la dirección fisica base del map. sumandole 100H(256 byte) = 18940H(hexad)
B)calculé la dirección física de inicio de cada segmento de codigo:
18940H+columna de inicio de segmento de codigo(start)=18F60H
entonces para saber el valor del registro del cs lo que hice es obtener la dir lógica apartir de la dirección fisica que he obtenido 18F60---->18F6:0000(cs:ip).
entonces no sé si lo que hecho està bien o està mal?
Muchisima gracias de antemano
en la espera de vuestra ayuda
les saludo atentamente.

Páginas: [1]