assume CS: code, DS: data
code segment
begin:
mov AX, data
mov DS, AX
;xor ax,ax
mov cx,3
mov si,0
mov bx,0
external:
push cx
mov cx,3
mov si,0
iternal:
xor ax,ax
out 43h,al
in al,40h
;mov bh,i
mov array[bx][si],al
;inc i
inc si
loop iternal
pop cx
inc bx
loop external
mov cx,3
mov si,0
mov bx,0
exshow:
push cx
mov cx,3
mov si,0
ishow:
mov ah,02h
mov dl,array[bx][si]
;add dl,30h у меня символы!
int 21h
inc si
loop ishow
lea dx,nl ;переход на новую строку
pop cx
inc bx
loop exshow
exit:
mov ah,08h
int 21h
mov ax,4c00h
int 21h
code ends
data segment
array db 3 dup(3 dup(?))
i db 0
nl db 13,10,'$'
data ends
stk segment stack
dw 128 dup (0)
stk ends
end begin
array db 3 dup(3 dup(?))
var iax,ibx:word;где в переменных хранится текущее состояние ДПСЧ.
function random:word;{ »poµeñπpa óδñaτ¿ äBôX 16-í¿Γ¡δx »ceóño-c½πτa¡δx τ¿ce½:}
var q:word;
begin
asm
mov ax,iax
mov bx,ibx
xor ax,bx
shl ax,1
adc bx,0
xor bx,ax
xchg bl,bh
mov iax,ax
mov ibx,bx
end;
random := ibx;
end;
procedure randomize;
begin
asm
Mov AL,00000000b
Out 43h,AL
In AL,40h
Mov AH,AL
In AL,40h
XChg AL,AH
mov iax,ax
end;
ibx := 9821;
end;
dely macro time; (1)
local zd,c1,cikl,ii,ii1; (2) описываем все метки, используемые вмакроопределении
push cx; (3)помещаем в стек используемые в макроопределении регистры
push bx; (4)
push bp; (5)
push ax; (6)
push dx; (7)
mov cx,time; (8) задаём количество повторений цикла задержки zd – задержка в цикле 18.2 секунды
zd: push cx; (9)
mov bp,0;(10)
mov bx,1;(11)
cikl:
inc BP;(12)
mov ah,00h;(13)
int 1Ah;(14)
cmp BP,1;(15)
je ii;(16) переходим на метку ii на первой итерации цикла
jmp ii1;(17) на следующих итерациях переходим на метку ii1
ii: add bx,dx;(18) формируем значение на единицу больше, чем в регистре dx
ii1: ; (19)
cmp bx,dx;(20) если значение в регистре dx изменилось(сравниваем значение в dx с сформированным в строке 18 значением в регистре bx, которое на единицу больше, на единицу больше значение в dx станет через 18.2 сек)
jne cikl;(21) если нет, то новая итерация цикла
pop cx;(22) если да, конец макрокоманды задержки
loop zd;(23)
pop cx;(24)
pop bx;(25)
pop bp;(26)
pop ax;(27)
pop dx;(28)
endm;(29)
assume CS: code, DS: data
code segment
randomize proc
Mov AL,00000000b
Out 43h,AL
In AL,40h
Mov AH,AL
In AL,40h
XChg AL,AH
mov iax,ax
randomize endp
matr proc
mov cx,3
mov si,0
mov bx,0
call randomize
external:
push cx
mov cx,3
mov si,0
iternal:
mov ax,iax
mov bx,ibx
xor ax,bx
shl ax,1
adc bx,0
xor bx,ax
xchg bl,bh
mov iax,ax
mov ibx,bx
mov array[bx][si],ax
add si,2
loop iternal
pop cx
add bx,4
loop external
mov cx,3
mov si,0
mov bx,0
exshow:
push cx
mov cx,3
mov si,0
ishow:
mov ah,02h
mov dx,array[bx][si]
add dl,30h
int 21h
add si,2
loop ishow
;lea dx,nl ;переход на новую строку
pop cx
add bx,4
loop exshow
ret
matr endp
begin:
mov AX, data
mov DS, AX
mov cx,10
miganie:
push cx
call matr
dely 18
mov ah,02h ;сдвижка курсора обратно в начало строки
mov bh,00
mov dh,15
mov dl,0
int 10h
pop cx
loop miganie
exit:
mov ah,08h
int 21h
mov ax,4c00h
int 21h
code ends
data segment
array dw 3 dup(3 dup(0))
i db 0
nl db 13,10,'$'
iax dw 0
ibx dw 9821
data ends
stk segment stack
dw 128 dup (1)
stk ends
end begin
dely macro time; (1)
local zd,c1,cikl,ii,ii1; (2) описываем все метки, используемые вмакроопределении
push cx; (3)помещаем в стек используемые в макроопределении регистры
push bx; (4)
push bp; (5)
push ax; (6)
push dx; (7)
mov cx,time; (8) задаём количество повторений цикла задержки zd – задержка в цикле 18.2 секунды
zd: push cx; (9)
mov bp,0;(10)
mov bx,1;(11)
cikl:
inc BP;(12)
mov ah,00h;(13)
int 1Ah;(14)
cmp BP,1;(15)
je ii;(16) переходим на метку ii на первой итерации цикла
jmp ii1;(17) на следующих итерациях переходим на метку ii1
ii: add bx,dx;(18) формируем значение на единицу больше, чем в регистре dx
ii1: ; (19)
cmp bx,dx;(20) если значение в регистре dx изменилось(сравниваем значение в dx с сформированным в строке 18 значением в регистре bx, которое на единицу больше, на единицу больше значение в dx станет через 18.2 сек)
jne cikl;(21) если нет, то новая итерация цикла
pop cx;(22) если да, конец макрокоманды задержки
loop zd;(23)
pop cx;(24)
pop bx;(25)
pop bp;(26)
pop ax;(27)
pop dx;(28)
endm;(29)
assume CS: code, DS: data
code segment
randomize proc
Mov AL,00000000b
Out 43h,AL
In AL,40h
Mov AH,AL
In AL,40h
XChg AL,AH
mov iax,ax
randomize endp
random proc
mov ax,iax
mov bx,ibx
xor ax,bx
shl ax,1
adc bx,0
xor bx,ax
xchg bl,bh
mov iax,ax
mov ibx,bx
random endp
matr proc
mov cx,3
mov si,0
mov bx,0
call randomize
external:
push cx
mov cx,3
mov si,0
iternal:
push bx
call random
pop bx
mov array[bx][si],ax
add si,2
loop iternal
pop cx
add bx,4
loop external
mov cx,3
mov si,0
mov bx,0
exshow:
push cx
mov cx,3
mov si,0
ishow:
mov ah,02h
mov dx,array[bx][si]
add dl,30h
int 21h
add si,2
loop ishow
;lea dx,nl ;переход на новую строку
pop cx
add bx,4
loop exshow
ret
matr endp
begin:
mov AX, data
mov DS, AX
mov cx,10
miganie:
push cx
call matr
dely 18
mov ah,02h ;сдвижка курсора обратно в начало строки
mov bh,00
mov dh,15
mov dl,0
int 10h
pop cx
loop miganie
exit:
mov ah,08h
int 21h
mov ax,4c00h
int 21h
code ends
data segment
array dw 3 dup(3 dup(0))
i db 0
nl db 13,10,'$'
iax dw 0
ibx dw 9821
data ends
stk segment stack
dw 128 dup (1)
stk ends
end begin
dely macro time; (1)
local zd,c1,cikl,ii,ii1
push cx
push bx; (4)
push bp; (5)
push ax; (6)
push dx; (7)
mov cx,time
zd: push cx; (9)
mov bp,0;(10)
mov bx,1;(11)
cikl:
inc BP;(12)
mov ah,00h;(13)
int 1Ah;(14)
cmp BP,1;(15)
je ii
jmp ii1
ii: add bx,dx
ii1: ; (19)
cmp bx,dx
jne cikl
pop cx
loop zd;(23)
pop cx;(24)
pop bx;(25)
pop bp;(26)
pop ax;(27)
pop dx;(28)
endm;(29)
assume CS: code, DS: data
code segment
randomize proc
mov ah,2Ch
int 21h
mov Rand1,ax
mov Rand2,dx
randomize endp
random proc
mov ax,Rand1
mov bx,Rand2
mov cx,ax
mul RandA ; RandA - любое число
shl cx,1
shl cx,1
shl cx,1
add ch,cl
add dx,cx
add dx,bx
shl bx,1
shl bx,1
add dx,bx
add dh,bl
mov cl,5
shl bx,cl
add dh,bl
add ax,1
adc dx,0
mov Rand1,ax
mov Rand2,dx
mov bx,sp
mov cx,dx
mul word ptr ss:[bx+4]
mov ax,cx
mov cx,dx
mul word ptr ss:[bx+4]
add ax,cx
adc dx,0
mov ax,dx
random endp
matr proc
mov cx,3
mov si,0
mov bx,0
call randomize
external:
push cx
mov cx,3
mov si,0
iternal:
push cx
push bx
rand:
call random
;call randomize
cmp ax,30h ; число не менее
jl rand
cmp ax,39h ; число не более
jg rand
pop bx
pop cx
mov array[bx][si],ax
add si,2
loop iternal
pop cx
add bx,6
loop external
mov cx,3
mov si,0
mov bx,0
exshow:
push cx
mov cx,3
mov si,0
ishow:
mov ah,02h
mov dx,array[bx][si]
add dl,30h
int 21h
add si,2
loop ishow
lea dx,nl ;переход на новую строку
pop cx
add bx,6
loop exshow
ret
matr endp
begin:
mov AX, data
mov DS, AX
miganie:
push cx
call matr
dely 18
mov ah,02h ;сдвижка курсора обратно в начало строки
mov bh,00
mov dh,15
mov dl,0
int 10h
mov ah,06h
mov dl,0ffh
int 21h
cmp al,44h
jne miganie
;mov AH,2Ch
;int 21h
;mov AH,02h
; CH - час, CL - мин, DH - сек, DL - 1/100 сек
;int 21h
exit:
mov ax,4c00h
int 21h
code ends
data segment
array dw 3 dup(3 dup(0))
i db 0
nl db 13,10,'$'
Rand1 dw 20
Rand2 dw 10
RandA dw 38
;line db 15
data ends
stk segment stack
dw 128
stk ends
end begin