Professional Documents
Culture Documents
Alumna:
Marielys Brijaldo C.I 27.014.595
name "fact"
push ax
int 10h
pop ax
endm
org 100h
jmp start
result dw ?
start:
mov ah, 9
int 21h
jmp n1
n1:
call scan_num
; factorial of 0 = 1:
mov ax, 1
cmp cx, 0
je print_result
; cx will be a counter:
mov bx, cx
mov ax, 1
mov bx, 1
calc_it:
mul bx
cmp dx, 0
jne overflow
inc bx
loop calc_it
mov result, ax
print_result:
mov ah, 9
int 21h
jmp n2
n2:
call print_num_uns
jmp exit
overflow:
mov ah, 9
int 21h
jmp n3
n3:
jmp start
exit:
mov ah, 0
int 16h
ret
PUSH DX
PUSH AX
PUSH SI
MOV CX, 0
; reset flag:
MOV CS:make_minus, 0
next_digit:
; into AL:
INT 16h
INT 10h
JE set_minus
JNE not_cr
JMP stop_input
not_cr:
CMP AL, 8
JNE backspace_checked
MOV DX, 0
MOV AX, CX
DIV CS:ten
MOV CX, AX
PUTC 8
JMP next_digit
backspace_checked:
JAE ok_AE_0
JMP remove_not_digit
ok_AE_0:
JBE ok_digit
remove_not_digit:
PUTC 8 ; backspace.
ok_digit:
PUSH AX
MOV AX, CX
MOV CX, AX
POP AX
; check if the number is too big
CMP DX, 0
JNE too_big
; add AL to CX:
MOV AH, 0
ADD CX, AX
JMP next_digit
set_minus:
MOV CS:make_minus, 1
JMP next_digit
too_big2:
too_big:
MOV AX, CX
MOV CX, AX
PUTC 8 ; backspace.
; check flag:
CMP CS:make_minus, 0
JE not_minus
NEG CX
not_minus:
POP SI
POP AX
POP DX
RET
SCAN_NUM ENDP
PUSH DX
PUSH AX
CMP AX, 0
JNZ not_zero
PUTC '0'
JMP printed
not_zero:
CMP AX, 0
JNS positive
NEG AX
PUTC '-'
positive:
CALL PRINT_NUM_UNS
printed:
POP AX
POP DX
RET
PRINT_NUM ENDP
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CX, 1
; AX is zero?
CMP AX, 0
JZ print_zero
begin_print:
CMP BX,0
JZ end_print
CMP CX, 0
JE calc
; if AX<BX then result of DIV will be zero:
CMP AX, BX
JB skip
calc:
MOV DX, 0
PUTC AL
skip:
; calculate BX=BX/10
PUSH AX
MOV DX, 0
MOV AX, BX
MOV BX, AX
POP AX
JMP begin_print
print_zero:
PUTC '0'
end_print:
POP DX
POP CX
POP BX
POP AX
RET
PRINT_NUM_UNS ENDP
Comparador
.model small
.stack
.data
var1 db ?
var2 db ?
var3 db ?
.code
.startup
mov ah,00h
mov al,03h
int 10h
mov ah,02h
mov dx,0510h
mov bh,0
int 10h
mov ah,09h
lea dx,msg4
int 21h
mov ah,07h
int 21h
mov dl,al
int 21h
mov var1,al
mov ah,09h
lea dx,msg5
int 21h
mov ah,07h
int 21h
mov ah,02h
mov dl,al
int 21h
mov var2,al
cmp var1,al
ja cmp1
jb cmp2
cmp1:
mov ah,09h
lea dx,msg6
int 21h
mov ah,07h
int 21h
mov ah,02h
mov dl,al
int 21h
mov var3,al
cmp var2,al
ja mayor
jb menor
je menor
cmp2:
mov ah,09h
lea dx,msg6
int 21h
mov ah,07h
int 21h
mov ah,02h
mov dl,al
int 21h
mov var3,al
cmp var1,al
ja mayor
jb igual
je igual
mayor:
mov ah,09h
lea dx,msg3
int 21h
jmp salir
menor:
mov ah,09h
lea dx,msg2
int 21h
jmp salir
igual:
mov ah,09h
lea dx,msg1
int 21h
jmp salir
salir:
.exit
End
org 100h
include 'emu8086.inc'
DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
jmp inicio
num1 dw ?
num2 dw ?
num3 dw ?
resta dw ?
inicio:
mov ah,09
lea dx,texto
int 21h
call SCAN_NUM
mov num1,cx
mov ah,09
lea dx,texto2
int 21h
call SCAN_NUM
mov num2,cx
mov ah,09
lea dx,texto3
int 21h
call SCAN_NUM
mov num3,cx
mov ah,09
lea dx,texto4
int 21h
mov ax,num1
sub ax,num2
sub ax,num3
call PRINT_NUM
ret
Raiz cubica
DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
jmp inicio
db 13,10,' '
num1 dw ?
r dw 0
inicio:
;obtener datos
lea dx,texto
int 21h
call SCAN_NUM
mov num1,cx
mov ah,09
lea dx,texto3
int 21h
raiz:
inc r
mov ax, r
mul r
mul r
jbe raiz
dec r
mov ax, r
call PRINT_NUM
;Fin
ret