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.
¿Que intentas hacer con 48,36? ¿Un numero real? ¿Dos numeros enteros?
mov ah, var1
mov al, var1 + 1
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
No se necesita, eso es para cadenas de texto.
Si solo queres un byte entonces es suficiente esto:
var1 db 48
Y el codigo tal como te lo mostre (con 0 en lugar de var + 1) o tambien:
xor ax, ax
mov al, var1