Код:
stck segment stack
dw 10h dup(0) ;16 слов, инициализированных нулем
stck ends
data segment
atmp db 0h
btmp db 0h
сtmp dw 0h
bol dw 0h
x dw (?)
massiv dw 4 dup (?)
massiv2 dw 4 dup (?)
i db 11b
data ends
PrcCode segment
podproc proc far
push bp ;С‘охранение регистра BP
mov bp,sp
mov bx,[bp+4]
cmp bl,al
jne e
mov bx, offset massiv2
mov [bx+di],si
inc di
e:
inc si
pop bp
ret 2
podproc endp
PrcCode ends ;конец сегмента подпрограммы
code segment
assume cs:code, ds:data,ss:stck
main:
mov dx, data
mov ds, dx
call input
;-------------------------------основная программа-------------------------
GO:
call mainproc
call outtoscreen2
pause: in al, 60h
cmp al, 01h
jne pause
quit: mov ax, 4C00h
int 21h
;--------------------------------------------------------------------------
beep proc
mov atmp,al
mov btmp,bl
mov сtmp,cx
mov bx,bol
cmp bol,1h
je next
mov bol,0h
jmp endbeep
next:
mov al, 24h
out 42h, al
mov al, 0Eh
out 42h, al
in al, 61h
or al, 00000011b
out 61h, al
xor cx, cx
l1: mov bx, cx
mov cx, 4h
l2: loop l2
mov cx, bx
loop l1
in al, 61h
and al, 11111100b
out 61h, al
mov al,atmp
mov bl,btmp
mov cx,сtmp
mov bol,0h
jmp inloop
endbeep:
ret
beep endp
;--------------------------------------------------------------------------
outtoscreen proc
mov bx, 8000h
mov di, 80*2
mov si,0h
beg:
mov bx, 8000h
cmp si,4h
je bye
outloop:
push bx
xor bx,bx
xor ax,ax
mov bx, offset massiv
mov ax, [bx+si]
pop bx
test ax, bx
jnz bit1
mov es:[di], 0730h ;если 0, вывести 0
jmp NxtBit
bit1: mov es:[di], 0731h ;если 1, вывести 1
NxtBit: inc di
inc di
shr bx, 1
jnc outloop
inc si
mov es:[di], 0720h
inc di
inc di
jmp beg
bye:
ret
outtoscreen endp
;--------------------------------------------------------------------
outtoscreen2 proc
mov bx, 8000h
mov di, 80*4
mov si,0h
beg2:
cmp si,4h
je bye2
outloop2:
mov es:[di], 0720h
push bx
xor bx,bx
xor ax,ax
mov bx, offset massiv2
mov al, [bx+si]
pop bx
shr al,4
add al,'0'
mov es:[di], al
inc di
push bx
xor bx,bx
xor ax,ax
mov bx, offset massiv2
mov al, [bx+si]
pop bx
and al,0Fh
add al,'0'
inc di
mov es:[di], al
inc di
inc di
inc si
mov es:[di], 0720h
inc di
inc di
jmp beg2
bye2:
ret
outtoscreen2 endp
;----------------------------------input-------------------------------
input proc
mov dx, 0B800h
mov es, dx
xor di, di
xor dx, dx
mov ax, 0720h
mov cx, 80*25
rep stosw
xor di, di
push si
mov si,0
opanki:
mov cx, 2h
inloop:
call beep
in al, 60h
cmp al, bl
je inloop
mov bl, al
cmp al, 01h
jne NotEsc
jmp quit
NotEsc: cmp al, 02h
je num1
cmp al, 39h
je space
cmp al, 0Bh
jne notlegal
shl dx, 1
mov es:[di], 0730h
mov bol,1h
jmp NxtNum
notlegal:
mov bol,0h
jmp inloop
space:
mov es:[di], 0720h
mov bol,1h
inc di
inc di
jmp inloop
num1: shl dx, 1
or dx, 1
mov es:[di], 0731h
mov bol,1h
jmp NxtNum
NxtNum:
inc di
inc di
dec cx
jnz inloop
mov dh,0h
mov x, dx
mov atmp,al
mov btmp,bl
mov bx, offset massiv
mov [bx+si],dl
mov dx,0b
mov bl,btmp
mov al,atmp
inc si
cmp si,4h
jl menche
;call outtoscreen
jmp GO
menche: jmp opanki
exitforinput:
ret
input endp
;---------------------------------------mainproc------------------------------
mainproc proc
obrab:
mov al,i
mov di,0h ;счётчик второго массива
mov cx,4h
mov si,0h;счётчик первого массива
LP:
mov bx, offset massiv
mov dl,[bx+si]
push dx
call far ptr podproc
loop LP
mov cx,4h
mov dl,99h
LP2:
mov bx, offset massiv2
mov [bx+di],dl
inc di
loop LP2
ret
mainproc endp
;----------------------------------------------------------------------
code ends
end main
Вроде как метка в том же сегменте находится. Помогите плиз.