Pasar tipo byte a tipo word sin uso de movs?

Iniciado por Morringos, 31 Marzo 2011, 06:31 AM

0 Miembros y 1 Visitante están viendo este tema.

Morringos

Buenas a todos, tengo una duda en ensamblador, lo cual apenas estoy aprendiendo, pero me he encontrado con dos problemas los cuales no les he podido encontrar una solución y tampoco la causa, les pongo un código de ejemplo:


title "Ejemplo X"
    .model small
    .stack 1064
    .data
        var1 db 48,36
    .code
     
    mov ax, @data
    mov ds, ax
     
    mov ax, var1                 ;Operand types do not match
    mov dx, ax
    mov ah, 09h
    int 21h
     
     
    mov ah, 4ch
    int 21h
     
    end


Donde está el comentario, es en donde me detecta el error puesto como comentario, también, como la variable "var1" es de tipo byte, encontré las instrucciones: "movs", "movsx" y "moszx", pero cuando las trato de utilizar de la siguiente manera: "movs ax, var1", me marca un error diciéndome: "Ilegar instruction for currently selected processor(s).

¿Alguien tiene alguna idea sobre el por qué me pasa eso y sobre cómo solucionar lo que quiero hacer?

Gracias
Saludos.

Eternal Idol

#1
¿Que intentas hacer con 48,36? ¿Un numero real? ¿Dos numeros enteros?

Código (asm) [Seleccionar]
mov ah, var1
mov al, var1  + 1
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

Morringos

Según tengo entendido que al poner: "var1 db 48,36", estoy declarando una variable de tipo byte con un valor de 48 decimal y el 36 indica el final de la cadena, así es como lo he aprendido, no sé si esté mal, igual que si al lugar de 36, pusiera un '$'.

O...¿cómo indicas el final de una variable? Porque pensándolo bien, con "var1 db 48,36", ¿estoy declarando un arreglo de 2 elementos verdad? No sé cómo es para indicarle el final de la variable cuando es númerica o no necesita.


Gracias.
Saludos.  :D

Eternal Idol

No se necesita, eso es para cadenas de texto.

Si solo queres un byte entonces es suficiente esto:
Código (asm) [Seleccionar]
var1 db 48

Y el codigo tal como te lo mostre (con 0 en lugar de var + 1) o tambien:
Código (asm) [Seleccionar]
xor ax, ax
mov al, var1

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