Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Trabajo Grupal - Ejercicios para EMU8086

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 8

TRABAJO GRUPAL

En los siguientes ejercicios se tiene código Assembler.


Se pide hacerle cambios a dicho código y presentarlo el día miércoles
14/09/2022.

Ejercicio 1: Código que verifica si dos cadenas son iguales


org 100h
comienzo:
mov si, x
mov al, msg2[si]
cmp msg[si], al ;comparar letra por letra las cadenas, si uno no coincide
manda directamente a fin y termina el programa
jne fin:
cmp msg[si], "$" ;si es el final y el programa llega aca, quiere decir que son
iguales
jz final:
inc x
loop comienzo

final:
mov dx, offset msg3
mov ah, 9
int 21h

fin:
ret
msg db "hello world $"
msg2 db "hello world $"
msg3 db "Son iguales $"
x dw 0

Ejercicio 2: Escribir un código que verifique si una cadena es subcadena


de otra.
Por ejemplo: «la Mu» es subcadena de «Hola Mundo».

org 100h
mov si, 0 ;ponemos si en 0
comienzo:
mov al, msg2[0] ;copiar la primera letra de la palabra a al
cmp msg[si],"$" ;si es el fin de la cadena mandar a final
jz final
cmp msg[si], al ;comparar si encuentra la primera letra de la cadena
jne seguir

mov di, 1 ;poner en 1 di


comprobar:
mov al, msg2[di]
mov bx, di
cmp msg[si+bx], al ;posicion de la letra coincidente + di, comparar con la
cadena
jne seguir ;si no coincide mandar a seguir

inc di ;incrementar di para seguir recorriendo cadena

cmp msg2[di],"$" ;si es el fin de la cadena y el programa llego aca quiere decir
que la cadena es parte de la palabra
jz resultado

loop comprobar ;bucle para recorrer cadena

seguir:
inc si ;para seguir recorriendo la palabra
loop comienzo ;bucle principal para recorrer palabra
resultado:
mov dx, offset msg3 ;copiar msg3 a dx
mov ah, 9 ;preparar ah con 9 para la interrupcion 21h
int 21h ;mostrar contenido en dx
final:
ret
msg db "Hola Mundo$"
msg2 db "ola$"

msg3 db "Si es subcadena$"

Ejercicio 3: Escribir un programa que imprima X en la pantalla hasta que


se presione ESC.
name "keybrd"
org 100h
; print a welcome message:
mov dx, offset msg
mov ah, 9
int 21h
;============================
; eternal loop to get
; and print keys:
wait_for_key:
; check for keystroke in
; keyboard buffer:
mov dh, pos
mov dl, pos
mov bh, 0
mov ah, 2
int 10h ;Movemos el cursor
mov al,'X'
mov bh,0
mov bl,1
mov cx,1
mov ah,09h
inc pos ;Imprimimos una x
int 10h
mov ah, 1
int 16h
jz wait_for_key
; get keystroke from keyboard:
; (remove from the buffer)
mov ah, 0
int 16h
; print the key:
mov ah, 0eh
int 10h
; press 'esc' to exit:
cmp al, 1bh
jz exit
jmp wait_for_key
;============================
exit:
ret
msg db "Type anything...", 0Dh,0Ah
db "[Enter] - carriage return.", 0Dh,0Ah
db "[Ctrl]+[Enter] - line feed.", 0Dh,0Ah
db "You may hear a beep", 0Dh,0Ah
db " when buffer is overflown.", 0Dh,0Ah
db "Press Esc to exit.", 0Dh,0Ah, "$"
pos db 1
end

Ejercicio 4: Escribir un programa que dibuje una diagonal en la pantalla.


mov cx,1
mov al, 13h
mov ah, 0
int 10h ; set graphics video mode.

bucle1:
mov dx, cx
mov al, color ;AL = pixel color
mov ah, 0ch ;Change color for a single pixel
int 10h ;set pixel

cmp cx, 101 ;llegar hasta 100 x 100 (va en diagonal)


jz fin

inc cx ;DX = row.


add color, 2 ;para cambiar colores
jmp bucle1 ;CX = column
fin:
ret
color db

Ejercicio 5: Programa que imprime si es mayor de edad o no


.model small
.stack 64
.data
edad db 22
mayor db 'ERES MAYOR DE EDAD...','$'
menor db 'ERES MENOR DE EDAD...','$'
.code
begin proc far
mov ax,@data
mov ds,ax
mov es,ax
cmp edad,18
jae b20
mov ah,09h ;peticion para desplegar
lea dx,menor ;carga la direccion de la indicacion
int 21h ;llama al dos
jmp b21 ;salta a la etiqueta b21 para salir
b20:
mov ah,09h ;peticion para desplegar
lea dx,mayor ;carga la direccion de la indicacion
int 21h ;llama al dos
b21:
mov ax,4c00h
int 21h
begin endp
end begin

Ejercicio 6: Concatena dos cadenas de texto

.model small
.stack 64
.data
nom db 'FAUSTINO','$'
ape db 'VAZQUEZ','$'
nomcom db 'ABCDEFGHIJKLMNO','$'
.code
begin proc far
mov ax,@data
mov ds,ax
mov es,ax
mov cx,08
lea si,nom
lea di,nomcom
b20:
mov al,[si]
mov [di],al
inc si
inc di
dec cx
jnz b20
mov cx,07
lea si,ape
b21:
mov al,[si]
mov [di],al
inc si
inc di
dec cx
jnz b21
mov ah,09h ;peticion para desplegar
lea dx,nomcom ;carga la direccion de la indicacion
int 21h ;llama al dos
mov ax,4c00h
int 21h
begin endp
end begin

Ejercicio 7: Imprime una cadena.


data segment
MENSAJE db "HOLA A TODOS$" ; TODA CADENA SE TERMINARA EN
"escribe_tu_cadena..$"
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
mov ax, data
mov ds, ax
mov es, ax
; DX ES UN REGISTRO DE 16 BITS
;......................................
lea dx, MENSAJE ;INSTRUCCION EN LA QUE EN DX ALMACENAMOS LA
CADENA [MENSAJE]
mov ah, 9 ;INSTRUCCION QUE IMPRIME LA CADENA
int 21h ;INTERRUPCION 21H
;---------------------------------------
mov ax, 4c00h ; exit
int 21h
ends
end start ;
Ejercicio 8: Dado un N numero en DECIMAL imprimir su valor en
BINARIO.

data segment

NN db 0
dig db 0
aux db 0

ends

stack segment
dw 128 dup(0)
ends

code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax

bucle:
call leer3 ; en dig esta el numero ascii
cmp dig,0Dh
je salir
sub dig, 30h
mov al,1010b
mul NN

add al,dig
mov NN,al

jmp bucle

mov ax, 4c00h ; exit to operating system.


int 21h

;PROCESOS

salir:
call mostrar3
mov ax, 4c00h
int 21h
ret

mostrar3:
mov cx,08h
bucle2:
rol nn,01h
adc aux,00h

mov dl, aux


add dl,30h
mov ah,02h
int 21h
mov aux,00h
loop bucle2
ret

leer3:
mov ah, 01h
int 21h
mov dig,al
ret

ends

end start ; set entry point and stop the assembler.

Ejercicio 9: Realice un programa que imprima su nombre N/2 veces.


data segment
   N DB 14h
   nom db "JOSE ALFONSO RIVERA LIMA $"
ends

stack segment
    dw   128  dup(0)
ends

code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax
    ;DIVISION-----------------------------------------------
    xor ax,ax ;limpiamos el registro ax.
    mov bl,02h ; 2
    mov al,N  ;el N
    div bl    ; divide AX/BX el resultado lo almacena en AX, el residuo queda en
DX
  
    mov N,al  ; en AL esta el resultado de N/2 
    ;--------------------------------------------------
    mov cl,N
    mov ch,00h 
    bucle:
            lea dx,nom
            mov ah,09h
            int 21h

   
        cmp cx,00h
        sub cx,01h
    jnz bucle

   
    mov ax, 4c00h ; exit to operating system.
    int 21h   
ends

end start ; set entry point and stop the assembler.

También podría gustarte