jueves, 7 de marzo de 2019

Unidad 2-ejercicio del dia 7 de marzo -Saltos y condicionales.

Tutorial del ensamblador 8086 para principiantes (parte 7)

Programa de control de flujo

Controlar el flujo del programa es algo muy importante, aquí es donde su programa puede tomar decisiones de acuerdo con ciertas condiciones. 


  • Saltos incondicionales

    La instrucción básica que transfiere el control a otro punto del programa es JMP . 

    La sintaxis básica de la instrucción JMP :
    Etiqueta JMP
    Para declarar una etiqueta en su programa, simplemente escriba su nombre y agregue " : " al final, la etiqueta puede ser cualquier combinación de caracteres pero no puede comenzar con un número, por ejemplo, aquí hay 3 definiciones de etiquetas legales:
    label1: 
    label2: 
    a:
    La etiqueta se puede declarar en una línea separada o antes de cualquier otra instrucción, por ejemplo:
    x1: 
    MOV AX, 1 

    x2: MOV AX, 2
tablas que son utilles:





#1 programa de ejemplo del uso de jmp\
\

org    100h

mov    ax, 5          ; set ax to 5. 
mov    bx, 2          ; set bx to 2. 

jmp    calc            ; go to 'calc'. 

back:  jmp stop      ; go to 'stop'. 

calc:
add    ax, bx         ; add bx to ax. 
jmp    back           ; go 'back'. 

stop:

ret                   ; return to operating system. 







#2 programa que usa incondicionales

include "emu8086.inc"

org    100h

mov    al, 25     ; set al to 25.
mov    bl, 10     ; set bl to 10.

cmp    al, bl     ; compare al - bl.

je     equal      ; jump if al = bl (zf = 1).

putc   'n'        ; if it gets here, then al <> bl,
jmp    stop       ; so print 'n', and jump to stop.

equal:            ; if gets here,
putc   'y'        ; then al = bl, so print 'y'.

stop:

ret               ; gets here no matter what.





y este es su ejecucion en pantalla:


#3 ejemplo de comparacion de dos valores y haciendo una condicion para si es mayor o iguales los valores:


include 'emu8086.inc'
.model small
.stack
.data
    num1 db 8  
    num2 db 4
    msg1 db 'numeros iguales $'
    msg2 db 'numero 1 es mayor $'
    msg3 db 'numero 2 es mayor $'
    
.code
    main:
    mov ax,@data
    mov ds,ax
    
    mov al,num1
    
    cmp al,num2
    
    jc mayor2
    jz igual
    jnz mayor1
    
.exit

igual:
    print 'son iguales'
    mov ah,09h
    lea dx,msg1
    int 21h
.exit

mayor1:
    print 'es mayor el numero 1'
    .exit
    
    
mayor2:
    print 'es mayor el numero 2'
    .exit


capturas de la ejecucion:
si el numero 1 es mayor:
si el numero 2 es mayor:
\si ambos números son iguales:



No hay comentarios.:

Publicar un comentario

Unidad 3-ejemplo con macros

Programa que que imprime valores numericos en hexadecimales pero haciendo la utilizacion de macros. include 'emu8086.inc' Mostra...