Está en la página 1de 2

;Compilar: nasm -f elf op_combinada.

asm
;Enlazar: ld -m elf_i386 -s -o op_combinada op_combinada.o io.o
;Ejecutar: ./op_combinada

section .data
A db "Ingrese A: ", 0xA, 0xD
tamano equ $-A
B db "Ingrese B: ", 0xA, 0xD
tamano1 equ $-B
C db "Ingrese C: ", 0xA, 0xD
tamano2 equ $-C
D db "Ingrese D: ", 0xA, 0xD
tamano3 equ $-D

section .bss
num resb 5
num1 resb 5
num2 resb 5
num3 resb 5
num4 resb 20

section .text
global _start

_start:
mov eax, 4
mov ebx, 1
mov ecx, A
mov edx, tamano
int 0x80
mov eax, 3
mov ebx, 0 ; El descriptor de archivo para la entrada estándar (stdin) es 0
mov ecx, num
mov edx, 5
int 0x80
mov eax, 4
mov ebx, 1
mov ecx, B
mov edx, tamano1
int 0x80
mov eax, 3
mov ebx, 0 ; El descriptor de archivo para la entrada estándar (stdin) es 0
mov ecx, num1
mov edx, 5
int 0x80
mov eax, 4
mov ebx, 1
mov ecx, C
mov edx, tamano2
int 0x80
mov eax, 3
mov ebx, 0 ; El descriptor de archivo para la entrada estándar (stdin) es 0
mov ecx, num2
mov edx, 5
int 0x80
mov eax, 4
mov ebx, 1
mov ecx, D
mov edx, tamano3
int 0x80
mov eax, 3
mov ebx, 0 ; El descriptor de archivo para la entrada estándar (stdin) es 0
mov ecx, num3
mov edx, 5
int 0x80
;(A+B)-(DC-BC)+(ABC+CD)
mov ax, [num] ; ax=A
mov bx, [num1] ;bx=B
mov cx, [num2] ;cx=C
mov dx, [num3] ;dX=D
add ax, bx ; ax = A + B
imul dx,cx ;dx= D*C
imul bx,cx ; bx= C*D
sub dx,bx ;dx= DC-BC
sub ax,dx; ax=(A+B)-(DC-BC)
imul bx,[num]; bx= ABC
mov dx,[num3] ;dx=D
imul dx,cx;dx=CD
add bx, dx ;bx= ABC+CD
add ax,bx; ax=(A+B)-(DC-BC)+(ABC+CD)
; El resultado final está en ax
;imprime ax
mov word [num4], ax ; Almacenar solo los 2 bytes menos significativos en num4
mov word [num4 + 2], 0 ; Limpiar los 2 bytes más significativos
mov eax, 4
mov ebx, 1
mov ecx, num4
mov edx, 5
int 0x80
; Salir del programa
mov eax, 1
xor ebx, ebx
int 0x80

También podría gustarte