Practicas de Lenguaje Ensamblador

4
PRACTICAS DE LENGUAJE ENSAMBLADOR ==========IMPRIME HOLA MUNDO============= jmp start msg: db "Hello, World!", 0Dh,0Ah, 24h msg2: db "SISTEMAS COMPUTACIONALES", 0Dh,0Ah, 24h start: mov dx, msg mov ah, 09h int 21h mov ah, 0 ;SALTO DE LINEA mov dx, msg2 mov ah, 09h int 21h mov ah, 0 int 16h ==========IMPRIME HOLA MUNDO============= ; --------------------------------------------- ; Programa que imprime un string en la pantalla ; --------------------------------------------- .model small ; modelo de memoria .stack ; segmento del stack .data ; segmento de datos Cadena1 DB 'Hola Mundo.$' ; string a imprimir (finalizado en $) .code ; segmento del codigo ; --------------------------------------------- ; Inicio del programa ; --------------------------------------------- programa: MOV AX, @data ; carga en AX la direccion del segmento de datos MOV DS, AX ; mueve la direccion al registro de segmento por medio de AX MOV DX, offset Cadena1 ; mueve a DX la direccion del string a imprimir MOV AH, 9 ; AH = codigo de la funcion del MS DOS para imprimir un string en la pantalla INT 21h ; llamada al MS DOS para imprimir un string en la pantalla INT 20h ; llamada al MS DOS para finalizar el programa

Transcript of Practicas de Lenguaje Ensamblador

Page 1: Practicas de Lenguaje Ensamblador

PRACTICAS DE LENGUAJE ENSAMBLADOR

==========IMPRIME HOLA MUNDO=============jmp startmsg: db "Hello, World!", 0Dh,0Ah, 24hmsg2: db "SISTEMAS COMPUTACIONALES", 0Dh,0Ah, 24hstart: mov dx, msgmov ah, 09hint 21h

mov ah, 0 ;SALTO DE LINEA

mov dx, msg2mov ah, 09hint 21h

mov ah, 0int 16h

==========IMPRIME HOLA MUNDO=============

; ---------------------------------------------; Programa que imprime un string en la pantalla; --------------------------------------------- .model small ; modelo de memoria .stack ; segmento del stack .data ; segmento de datos Cadena1 DB 'Hola Mundo.$' ; string a imprimir (finalizado en $) .code ; segmento del codigo ; ---------------------------------------------; Inicio del programa; --------------------------------------------- programa: MOV AX, @data ; carga en AX la direccion del segmento de datos MOV DS, AX ; mueve la direccion al registro de segmento por medio de AX MOV DX, offset Cadena1 ; mueve a DX la direccion del string a imprimir MOV AH, 9 ; AH = codigo de la funcion del MS DOS para imprimir un string en la pantalla INT 21h ; llamada al MS DOS para imprimir un string en la pantalla INT 20h ; llamada al MS DOS para finalizar el programa end programa

=========================================================================Se resta el 30h porque la funcion 01h de la int21h almacena el codigo ASCII del caracter leido desde el teclado. Como estás pidiendo números, en al te devolverá los siguientes números 

0 → 48 1 → 49 2 → 50 3 → 51 4 → 52 

Page 2: Practicas de Lenguaje Ensamblador

5 → 53 6 → 54 7 → 55 8 → 56 9 → 57 

Al restarle 48, en al queda almacenado el número que ingresaste, y así poder sumarlos. El paso inverso es sumarle 48, para obtener su valor ASCII 

============Suma de dos números============.model small .stack .data msg db 'Teclea el numero $' msg2 db 'El total de la suma es $'var1 db ? .code .startup ;*****IMPRIMIR CADENA mov ah,09h ;interrupcion para imprimir lea dx,msg ;obtener la direccion de memoria de msg int 21h ;ejecuta la interrupcion (DOS)

mov ah,01h ;leer caracter desde el teclado int 21h ;lee primer caracter (DOS) sub al,30h ;resto 30H (48Dec) para obtener el numero (CERO) mov var1,al ;lo guardo en variable var1

;*****IMPRIMIR CADENAmov ah,09h ;interrupcion para imprimir lea dx,msg ;obtener la direccion de memoria de msg int 21h ;ejecuta la interrupcion (DOS)

mov ah,01h ; leer caracter desde el teclado int 21h ; leo el segundo caracter sub al,30h ;resto 30H (48Dec) para obtener segundo valor add al,var1 ; realizo la suma de los dos valores

mov dl,al ;pongo en dl el numero a imprimir add dl,30h ;agrego 30 (48Dec) para obtener el caracter mov ah,02h ;funcion para imprimir un caracter en pantalla int 21h ;llamado a DOS

; wait for any key press...mov ah, 0int 16h

.exit end

Page 3: Practicas de Lenguaje Ensamblador

================suma de dos números========================org 100h

.stack

.datavar1 db ?.code.startupmov ah,01h;leer caracter desde el tecladoint 21h;lee primer caractersub al,30h;resto 30H (48Dec) para obtener el numeromov var1,al ;lo guardo en variable var1

mov ah,01h ; leer caracter desde el tecladoint 21h ; leo el segundo caractersub al,30h;resto 30H (48Dec) para obtener segundo valoradd al,var1 ; realizo la suma de los dos valores

mov dl,al;pongo en dl el numero a imprimiradd dl,30h ; agrego 30 (48Dec) para obtener el caractermov ah,02h;funcion para imprimir un caracter en pantallaint 21h.exitend

ret