Проблемы с прерываниями

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
8ull
Сообщения: 1
Зарегистрирован: 28 май 2010, 20:39

Условие:
Написать программу для 8086, запускающую себя N раз (N число в диапазоне [1, 255]).
При запуске и окончании программы выдавать номер текущей копии.

Код:

.model small
.stack 100h
.data
message1 db "message1",0d,0ah,'$'
kol db 0
num db 0
sizep db 0
a1 dw 0ah
SS_Seg dw ?
SP_Seg dw ?
str db "new.txt",0
bufkol db 5 dup(?)
bufnum db 5 dup(?)
param dw 0000
dd parameters
dd 0,0
FILENAME DB 't.exe',0
PARAMETERS Db sizep,kol," ",num,13
ZSEG SEGMENT
ZSEG ENDS
.code
.186
start:

call aFile
call chislo
call size
mov ax,0
mov al,num
cmp kol,al
je loopfinish
inc num
mov ax,0
mov ah,09h
lea dx,message1
int 21h
mov ah,0Ch
mov al,01h
int 21h




MOV BX,ZSEG *
MOV AX,ES *
SUB BX,AX

MOV AH,4AH
INT 21H
mov ax,0
mov ah,09h
lea dx,message1
int 21h

mov ah,0Ch
mov al,01h
int 21h
push ds
pop es
pusha
push ds
push es
mov SS_Seg,ss
mov SP_seg,sp
MOV AH,4BH
MOV AL,0
mov bx, offset param
mov dx, offset filename
INT 21H

mov ss,cs:SS_Seg
mov sp,cs:SP_Seg
pop es
pop ds
popa
mov ah,0Ch
mov al,01h
int 21h
mov ax,0900h
lea dx,message1
int 21h
mov ah,0Ch
mov al,01h
int 21h


loopfinish:
mov ah,4ch

int 21h

aFile proc near
mov ax,@data
push es
mov si,80h
cmp byte ptr [si],0
je exit1
xor ch,ch
mov cl,byte ptr [si]
lea bx,bufkol
inc si
inc si
dec cx
lab10:
pop ds
mov dl,byte ptr [si]
push ds
mov ds,ax
cmp dl,' '
je loopn
mov [bx],dl
inc bx
inc si
loop lab10
mov [bx],00h
jmp exit1
loopn:
inc si
dec cx
lea bx,bufnum
lab11:
pop ds
mov dl,byte ptr [si]
push ds
mov ds,ax
mov [bx],dl
inc bx
inc si
loop lab11
mov [bx],00h

exit1:
mov ds,ax
mov es,ax
pop ax
ret
aFile endp

chislo proc near
mov si,0
mov ax,0
mov bl,bufkol[si]

sub bx, 30h
add al,bl

loopbase1:
inc si
xor bx,bx
cmp bl,00h
je loopbase4
mov bl,bufkol[si]
sub bx, 30h
add ax,bx
loopbase4:
mov kol,al
mov si,0
mov ax,0
mov bl,bufnum[si]
sub bx, 30h
add al,bl

loopbase2:
inc si
xor bx,bx
cmp bl,00h
je loopbase3
mov bl,bufnum[si]
sub bx, 30h
add ax,bx
loopbase3:
mov num,al
ret
chislo endp

size proc near
mov ax,0
mov si,0
cmp bufnum[si],00h
je loopsize3
loopsize1:
inc si
cmp bufnum[si],00h
jne loopsize1
loopsize3:
mov ax,si
add sizep,al
mov si,0
cmp bufkol[si],00h
je loopsize4
loopsize2:
inc si
cmp bufkol[si],00h
jne loopsize2
loopsize4:
mov ax,si
add ax,2
add sizep,al

ret
size endp

end start


Не работают прерывания, в чем может быть проблема?
Ответить