Aquí el código y las capturas del programa:
name 'resta dos numeros'
include 'emu8086.inc'
org 100h
.data
resta db 2 dup (?)
.code
restas proc
printn " "
print "Introduce el primer numero: "
call scan_num
mov resta[0],cl
printn " "
print "Introduce el segundo numero: "
call scan_num
sub resta[1],cl
printn ""
xor ax,ax
add al,resta[0]
add al, resta[1]
print " "
print "La resta es: "
call print_num
restas endp
exit:
printn " "
printn " "
print "Presiona enter para salir..."
mov ah,0
int 16h
ret
define_print_string
define_print_num
define_print_num_uns
define_scan_num
end
ret
miércoles, 6 de marzo de 2019
miércoles, 20 de febrero de 2019
Comparar la edad en lenguaje ensamblador
Con ustedes el código para emu8086:
ORG 100H
.MODEL SMALL
.STACK 64 ;SEGMENTO DE PILA
.DATA
DIEZ DB 10 ;VARIABLE
NUM1 DB 0 ;VARIABLE PARA EDAD
MENS DB 'INGRESE LA EDAD: $'
MENS1 DB 13,10, 'ERES MAYOR DE EDAD $'
MENS2 DB 13,10, 'ERES MENOR DE EDAD $'
.CODE
INICIO PROC FAR
MOV AX,@DATA ;DIRECCIONAMIENTO
MOV DS,AX
;SE COLOCA EL PRIMER LETRERO
MOV AH,09
LEA DX,MENS
INT 21H
MOV AH,01
INT 21H
SUB AL,30H ;CONVERTIR A VALOR
MUL DIEZ ;SE MULTIPLICA EL NUMERO INGRESADO POR DIEZ
MOV NUM1,AL
MOV AH,01
INT 21H
SUB AL,30H
ADD NUM1,AL ;SE SUMA A LAS DECENAS
MOV AL,NUM1
CMP AL,18
JGE MAYOR
JMP MENOR
MAYOR:
MOV AH,09
LEA DX,MENS1
INT 21H
JMP FIN
MENOR:
MOV AH,09
LEA DX,MENS2
INT 21H
JMP FIN
FIN:
MOV AX,4C00H
INICIO ENDP
RET
Multiplicación en emulador emu8086
Aquí está el código para el programa de la multiplicación pero no en consola:
ORG 100h
mov ax,80
mov bx,1000
mul bx
ret
ORG 100h
mov ax,80
mov bx,1000
mul bx
ret
Obtener el promedio y si es aprobatorio
Aquí les va el código del programa
.MODEL SMALL
.STACK 64
.DATA
MSG1 DB 'INGRESA UNA CALIFICACION (SEGUIDO DE UN ENTER): ',13,10,'$'
APROBADO DB 13,10, 'APROBADO$',
REPROBADO DB 13,10, 'REPROBADO$'
VAR1 DW ?, '$' ;de tipo write (escritura)
VAR2 DW ?, '$'
VAR3 DW ?. '$' ;para guardar enter
.CODE ;inicia la seccion de codigo
RESULTADO PROC FAR
;-----------iniciar
MOV AX,@DATA
MOV DS,AX
;----------desplegar el primer mensaje
MOV ah,09H
LEA dx,MSG1
INT 21H
;----------introducir un caracter
MOV AH,01
INT 21H
MOV VAR1,AX
;----------introducir el segundo caracter
MOV AH,01
INT 21H
MOV VAR2,AX
;----------introducir un caracter para enter
MOV AH,01
INT 21H
MOV VAR3,AX
;----------uso de if y comparacion
CMP AL,13 ; pregunta si en 'al' hay un enter
JE continue
JMP mayor
CONTINUE:
MOV AX,VAR1
CMP AL,037H ;37h es igual a 7 en hexadecimal, 55 es 7 en ASCII
JGE MAYOR
JMP MENOR
MAYOR:
MOV AH,09H
LEA DX,APROBADO
INT 21H
JMP FIN
MENOR:
MOV AH,09H
LEA DX,REPROBADO
INT 21H
JMP FIN
FIN:
MOV AH,04CH
INT 21H
RESULTADO ENDP ;fin del procedimiento
END RESULTADO
.MODEL SMALL
.STACK 64
.DATA
MSG1 DB 'INGRESA UNA CALIFICACION (SEGUIDO DE UN ENTER): ',13,10,'$'
APROBADO DB 13,10, 'APROBADO$',
REPROBADO DB 13,10, 'REPROBADO$'
VAR1 DW ?, '$' ;de tipo write (escritura)
VAR2 DW ?, '$'
VAR3 DW ?. '$' ;para guardar enter
.CODE ;inicia la seccion de codigo
RESULTADO PROC FAR
;-----------iniciar
MOV AX,@DATA
MOV DS,AX
;----------desplegar el primer mensaje
MOV ah,09H
LEA dx,MSG1
INT 21H
;----------introducir un caracter
MOV AH,01
INT 21H
MOV VAR1,AX
;----------introducir el segundo caracter
MOV AH,01
INT 21H
MOV VAR2,AX
;----------introducir un caracter para enter
MOV AH,01
INT 21H
MOV VAR3,AX
;----------uso de if y comparacion
CMP AL,13 ; pregunta si en 'al' hay un enter
JE continue
JMP mayor
CONTINUE:
MOV AX,VAR1
CMP AL,037H ;37h es igual a 7 en hexadecimal, 55 es 7 en ASCII
JGE MAYOR
JMP MENOR
MAYOR:
MOV AH,09H
LEA DX,APROBADO
INT 21H
JMP FIN
MENOR:
MOV AH,09H
LEA DX,REPROBADO
INT 21H
JMP FIN
FIN:
MOV AH,04CH
INT 21H
RESULTADO ENDP ;fin del procedimiento
END RESULTADO
Suma de dos números en emu8086 con libreria emu8086.inc
Primero quiero decir que incluiré el código del programa, y es este:
;Creado por Magdiel Ruiz
name 'suma de dos numeros'
include 'emu8086.inc'
org 100h
.data
suma db 2 dup (?)
.code
Sumas proc
printn " "
print " Introduce el primer numero ==>"
call scan_num
mov suma[0],cl
printn " "
print "Introduce el segundo numero ==>"
call scan_num
mov suma[1],cl
print " "
xor ax,ax
add al,suma[0]
add al,suma[1]
printn " "
print "La suma es: "
call print_num
Sumas endp
exit:
printn " "
printn " "
print "Presione enter para salir..."
mov ah,0
int 16h
ret
define_print_string
define_print_num
define_print_num_uns
define_scan_num
end
;Creado por Magdiel Ruiz
name 'suma de dos numeros'
include 'emu8086.inc'
org 100h
.data
suma db 2 dup (?)
.code
Sumas proc
printn " "
print " Introduce el primer numero ==>"
call scan_num
mov suma[0],cl
printn " "
print "Introduce el segundo numero ==>"
call scan_num
mov suma[1],cl
print " "
xor ax,ax
add al,suma[0]
add al,suma[1]
printn " "
print "La suma es: "
call print_num
Sumas endp
exit:
printn " "
printn " "
print "Presione enter para salir..."
mov ah,0
int 16h
ret
define_print_string
define_print_num
define_print_num_uns
define_scan_num
end
lunes, 11 de febrero de 2019
Suma y resta en emu8086
Vamos a aprender a restar y a sumar en el lenguaje ensamblador, aquí el código de la resta:
.MODEL SMALL
.STACK 64
.DATA
N1 DB 0
N2 DB 0
RESTA DB 0
MSG1 DB "DAME EL PRIMER VALOR ","$"
MSG2 DB 10,13, "DAME EL SEGUNDO VALOR ","$"
MSG3 DB 10,13, "RESTA = ",'$'
.CODE
BEGIN PROC FAR
MOV AX,@DATA
MOV DS,AX
MOV AH,09
LEA DX,MSG1
INT 21H
MOV AH,01
INT 21H
SUB AL,30H
MOV N1,AL
MOV AH,09
LEA DX,MSG2
INT 21H
MOV AH,01
INT 21H
SUB AL,30H
MOV N2,AL
MOV AL,N1
SUB AL,N2
ADD AL,30H
MOV RESTA,AL
MOV AH,09
LEA DX,MSG3
INT 21H
MOV AH,02
MOV DL,RESTA
INT 21H
MOV AH,4CH
INT 21H
BEGIN ENDP
END
Y ahora el programa que hace la suma y su código:
.MODEL SMALL
.STACK 64
.DATA
N1 DB 0
N2 DB 0
RESTA DB 0
MSG1 DB "DAME EL PRIMER VALOR ","$"
MSG2 DB 10,13, "DAME EL SEGUNDO VALOR ","$"
MSG3 DB 10,13, "SUMA= ",'$'
.CODE
BEGIN PROC FAR
MOV AX,@DATA
MOV DS,AX
MOV AH,09
LEA DX,MSG1
INT 21H
MOV AH,01
INT 21H
SUB AL,30H
MOV N1,AL
MOV AH,09
LEA DX,MSG2
INT 21H
MOV AH,01
INT 21H
SUB AL,30H
MOV N2,AL
MOV AL,N1
ADD AL,N2
ADD AL,30H
MOV RESTA,AL
MOV AH,09
LEA DX,MSG3
INT 21H
MOV AH,02
MOV DL,RESTA
INT 21H
MOV AH,4CH
INT 21H
BEGIN ENDP
END
.MODEL SMALL
.STACK 64
.DATA
N1 DB 0
N2 DB 0
RESTA DB 0
MSG1 DB "DAME EL PRIMER VALOR ","$"
MSG2 DB 10,13, "DAME EL SEGUNDO VALOR ","$"
MSG3 DB 10,13, "RESTA = ",'$'
.CODE
BEGIN PROC FAR
MOV AX,@DATA
MOV DS,AX
MOV AH,09
LEA DX,MSG1
INT 21H
MOV AH,01
INT 21H
SUB AL,30H
MOV N1,AL
MOV AH,09
LEA DX,MSG2
INT 21H
MOV AH,01
INT 21H
SUB AL,30H
MOV N2,AL
MOV AL,N1
SUB AL,N2
ADD AL,30H
MOV RESTA,AL
MOV AH,09
LEA DX,MSG3
INT 21H
MOV AH,02
MOV DL,RESTA
INT 21H
MOV AH,4CH
INT 21H
BEGIN ENDP
END
Y ahora el programa que hace la suma y su código:
.MODEL SMALL
.STACK 64
.DATA
N1 DB 0
N2 DB 0
RESTA DB 0
MSG1 DB "DAME EL PRIMER VALOR ","$"
MSG2 DB 10,13, "DAME EL SEGUNDO VALOR ","$"
MSG3 DB 10,13, "SUMA= ",'$'
.CODE
BEGIN PROC FAR
MOV AX,@DATA
MOV DS,AX
MOV AH,09
LEA DX,MSG1
INT 21H
MOV AH,01
INT 21H
SUB AL,30H
MOV N1,AL
MOV AH,09
LEA DX,MSG2
INT 21H
MOV AH,01
INT 21H
SUB AL,30H
MOV N2,AL
MOV AL,N1
ADD AL,N2
ADD AL,30H
MOV RESTA,AL
MOV AH,09
LEA DX,MSG3
INT 21H
MOV AH,02
MOV DL,RESTA
INT 21H
MOV AH,4CH
INT 21H
BEGIN ENDP
END
Suscribirse a:
Entradas (Atom)