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







División en emu8086

El código para hacerlo en lenguaje ensamblador:

ORG 100H

MOV AX,100
MOV BX,5
DIV BX

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


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




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


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