-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathint81RNG.asm
83 lines (70 loc) · 2.51 KB
/
int81RNG.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
;-----------------------------------------------------------------------
; Se debe generar el ejecutable .COM con los siguientes comandos:
; tasm int81RNG.asm
; tlink /t int81RNG.obj
;-----------------------------------------------------------------------
.8086
.model tiny ; Definicion para generar un archivo .COM
.code
org 100h ; Definicion para generar un archivo .COM
start:
jmp main ; Comienza con un salto para dejar la parte residente primero
;------------------------------------------------------------------------
;- Part que queda residente en memoria y contine las ISR
;- de las interrupcion capturadas
;------------------------------------------------------------------------
;Requiere pasarle un seed por AX
; la sumatoria/secuencia de weyl por SI
; el numero random anterior por DI
;Devuelve el numero random por AX
; la sumatoria/secuencia de weyl por SI
; el numero random anterior por DI
Funcion PROC FAR
sti
push dx
pushf
add si, ax ;Le sumo el seed original a la secuencia de Weyl
mov ax, di ;Pongo el numero random anterior en AX
mul ax ;Elevo el numero al cuadrado (multiplico por si mismo)
add ax, si ;Le sumo lo que hay en SI
mov dl, ah ;Intercambio las dos mitades del numero
mov ah, al
mov al, dl
popf
pop dx
iret
endp
; Datos usados dentro de la ISR ya que no hay DS dentro de una ISR
DespIntXX dw 0
SegIntXX dw 0
FinResidente LABEL BYTE ; Marca el fin de la porción a dejar residente
;------------------------------------------------------------------------
; Datos a ser usados por el Instalador
;------------------------------------------------------------------------
Cartel DB "Programa Instalado exitosamente!!!",0dh, 0ah, '$'
main: ; Se apuntan todos los registros de segmentos al mismo lugar CS.
mov ax,CS
mov DS,ax
mov ES,ax
InstalarInt:
mov AX,3581h ; Obtiene la ISR que esta instalada en la interrupcion
int 21h
mov DespIntXX,BX
mov SegIntXX,ES
mov AX,2581h ; Coloca la nueva ISR en el vector de interrupciones
mov DX,Offset Funcion
int 21h
MostrarCartel:
mov dx, offset Cartel
mov ah,9
int 21h
DejarResidente:
Mov AX,(15 + offset FinResidente) ;Sumo 15 para asegurarme un parágrafo más
Shr AX,1
Shr AX,1 ;Se obtiene la cantidad de parágrafos
Shr AX,1 ;ocupado por el codigo dividiendo por 16
Shr AX,1
Mov DX,AX
Mov AX,3100h ;y termina sin error 0, dejando el
Int 21h ;programa residente
end start