ayuda

alejo
22 de Octubre del 2003
hola, estoy recien empesando a aprender asm.
pero no puede entender lo que esta mal en este codigo, si alguien me puede ayudar estaria muy agradecido =)
esto es lo que me dice el tasm :
<20> rotate count out of range
<21> rotate count out of range

.model tiny
.data

Y dw 0050h
x dw 0050h

.code
org 100h
start:

mov ax,13 ; mode = 13h
int 10h ; call bios service

mov ax,0A000h
mov es,ax
mov bx,[x]
mov dx,[y]
mov di,bx
mov bx,dx
shl dx,8
shl bx,6
add dx,bx
add di,dx
mov al,4
stosb

xor ax,ax ; function 00h - get a key
int 16h ; call BIOS service

mov ax,3 ; mode = 3
int 10h ; call BIOS service


mov ax,4C00h ; exit to DOS
int 21h

end start

Martin
22 de Octubre del 2003
El error (linea 20 y 21) biene porque la instruccion SHL no asepta (al menos en teoria) mas de un desplasamiento SHL reg
Lo que podes hacer es usar la instruccion ROL que esta si puede contener de 1 a 16 rotaciones.
Algunos compiladores que crean codigo ensamblador hacen para rotar 4 veces
ROL BX,1
ROL BX,1
ROL BX,1
ROL BX,1
y asi, dicen que es una manera segura para todos los ensambladores. Proba.

alejo
22 de Octubre del 2003
tenias rason, gracias.
pero tengo otro problema.....
el punto que se dibuja en la pantalla me sale blanco... no deberia ser rojo? (al = 4)
saludos

super_g
22 de Octubre del 2003
si pones:
.286
en el encabezado del programa no habra ningun problema d eutilizar SHL con dezplazamientos mayores a 1