Почему вылетает прога??
;ђҐиЁвм бЁб⥬г га ўҐЁ©
; / A+(B-C)*D, Ґб«Ё 0<=C<2
;Y =|
; \ A+B/C
; C ¬ҐпҐвбп ®в Cn ¤® Ck c и Ј®¬ DELC
;****************************************************
DSEG SEGMENT
; Ёбе®¤лҐ ¤ лҐ - з «®
TextA db '‚ўҐ¤ЁвҐ Ђ:$'
TextB db '‚ўҐ¤ЁвҐ B:$'
TextD db '‚ўҐ¤ЁвҐ D:$'
TextCn db '‚ўҐ¤ЁвҐ CN:$'
TextCk db '‚ўҐ¤ЁвҐ CK:$'
TextDELC db '‚ўҐ¤ЁвҐ и Ј ‘:$'
C dw ?
A dw ?
B dw ?
D dw ?
Cn dw ?
Ck dw ?
DELC dw ?
TextPA db 'A=$'
TextPB db 'B=$'
TextPD db 'D=$'
TextPCn db 'Cn=$'
TextPCk db 'Ck=$'
TextPDELC db 'и Ј=$'
TextPY db 'Y=$'
TextPC db 'C=$'
;Ёбе®¤лҐ ¤ лҐ - Є®Ґж
Y dw ?
User_String db 10,11 dup (?)
Text10 db '‘ва®Є б«ЁиЄ®¬ ¤«Ё п',10,13,'$'
Text20 db '—Ёб«® ўҐ ¤®ЇгбвЁ¬®Ј® ¤Ё Ї §® ',10,13,'$'
Text30 db 'ЌҐ¤®ЇгбвЁ¬л© бЁ¬ў®« - '
Symv db ' ',10,13,'$'
Text40 db 'Џ®ўв®аЁвҐ ўў®¤',10,13,'$'
New_Line db 10,13,'$'
Ish db '?бе®¤лҐ ¤ лҐ: ',10,13,'$'
Buffer db 6 dup (?),'$'
Otw db 'ђҐ§г«мв в : ',10,13,'$'
Pr1 db ' $'
DSEG ENDS
Stacks segment
dw 100 dup (?)
Stacks ends
Codes segment
MAIN PROC far
Assume CS:codes, DS:dseg, SS:stacks
Mov AX,Dseg
Mov DS,AX
; Ё¤ЁўЁ¤г «м п з бвм Їа®Ја ¬¬л - з «®
;============================================
LEA DX, TextA
CALL PRT
CALL VVOD
Mov A,AX
CALL NL; ЇҐаҐў®¤ бва®ЄЁ
;============================================
LEA DX, TextB
CALL PRT
CALL VVOD
Mov B,AX
CALL NL
;============================================
LEA DX, TextD
CALL PRT
CALL VVOD
Mov D,AX
CALL NL
;============================================
LEA DX, TextCn
CALL PRT
CALL VVOD
Mov Cn,AX
CALL NL
;===========================================
LEA DX, TextCk
CALL PRT
CALL VVOD
Mov Ck,AX
CALL NL
;==========================================
LEA DX, TextDELC
CALL PRT
CALL VVOD
Mov DELC,AX
CALL NL
;===========================================
LEA DX, Ish
CALL PRT
;+++++++++++++++++++++++++++++++++++++++++++
LEA DX, TextPA
CALL PRT
Mov AX,A
CALL PRN
CALL NL
;+++++++++++++++++++++++++++++++++++++++++++
LEA DX, TextPB
CALL PRT
Mov AX,B
CALL PRN
CALL NL
;+++++++++++++++++++++++++++++++++++++++++++
LEA DX, TextPD
CALL PRT
Mov AX,D
CALL PRN
CALL NL
;++++++++++++++++++++++++++++++++++++++++++
LEA DX, TextCn
CALL PRT
Mov AX, Cn
CALL PRN
CALL NL
;++++++++++++++++++++++++++++++++++++++++++
LEA DX, TextCk
CALL PRT
Mov AX, Ck
CALL PRN
CALL NL
;+++++++++++++++++++++++++++++++++++++++++
LEA DX, TextDELC
CALL PRT
Mov AX, DELC
CALL PRN
CALL NL
;+++++++++++++++++++++++++++++++++++++++++
LEA DX, Otw
CALL PRT
Mov AX, Cn
Mov C, Ax ; C:=CN
;=========================================
BL3:
CMP C,2
JG BL5
;=========================================
BL4:
CMP C,0
JGE BL7
JMP BL6
;=========================================
BL5:
CWD
MOV AX,B
IDIV C
MOV Y,AX
;=========================================
BL6:
MOV AX,B
SUB AX,C
IMUL D
MOV BX, A
SUB BX,AX
MOV Y,AX
;=========================================
BL7:
LEA DX,TextPY
CALL PRT
MOV AX,Y
CALL PRN
CALL probel
LEA DX,TextPC
CALL PRT
MOV AX,C
CALL PRN
CALL NL
;Є ‘ ¤®Ў ў«пҐ¬ и Ј
MOV AX,C
ADD AX,DELC
;Ў«®Є 9 - Їа®ўҐаЄ ‘<=CK
MOV C,AX
JNG BL3
Mov AH,4CH
Mov DS,AX
;Ё¤ЁўЁ¤г «м п з бвм Їа®Ја ¬¬л - Є®Ґж
MAIN ENDP
;********************************************
CONVBA PROC
push CX
push DX
push SI
push AX
Mov CX,6
C10:Mov byte PTR [BX],' '
Inc BX
Loop C10
Mov SI,10
OR AX,AX
JNS C20
NEG AX
C20:xor DX,DX
Div SI
Add DX,30h
Dec BX
Mov [BX],DL
OR AX,AX
JNZ C20
POP AX
OR AX,AX
JNS C30
Dec BX
Mov byte PTR [BX],'-'
C30:POP SI
POP DX
POP CX
RET
CONVBA endp
;********************************************
ReadKeys PROC
push AX
LEA DX,User_String
Mov AH,0AH
Int 21h
Sub CH,CH
Mov CL,User_String+1
Add DX,2
POP AX
RET
ReadKeys ENDP
;********************************************
VVOD PROC
Inp:CALL ReadKeys
Mov BX,DX
CALL ASCII_BIN
JNC Valid
CMP DI,00FFH
JNE Inv_Char
OR AX,AX
JNZ Range_Er
LEA DX,Text10
Mov AH,09h
Int 21h
JMP Povtor
Range_Er:LEA DX,Text20
Mov AH,09h
Int 21h
JMP Povtor
Inv_Char:LEA DX,Text30
Mov AL,[DI]
Mov Symv,AL
Mov AH,09h
Int 21h
Povtor:LEA DX,Text40
Mov AH,09h
Int 21h
JMP Inp
Valid:
RET
VVOD ENDP
;********************************************
ASCII_BIN PROC
push BX
push CX
Sub AX,AX
Sub DX,DX
Mov DI,00FFH
CMP CX,7
JG No_Good
Blanks:CMP byte PTR[BX],' '
JNE Chk_Neg
Inc BX
Loop Blanks
Chk_Neg:CMP byte PTR[BX],'-'
JNE Chk_Pos
Inc BX
Dec CX
CALL CONV_AB
JC Thru
CMP AX,32768
JA No_Good
Neg AX
JS Good
Chk_Pos:CMP byte PTR[BX],'+'
JNE Go_Conv
Inc BX
Dec CX
Go_Conv:CALL CONV_AB
JC Thru
CMP AX,32767
JA No_Good
Good:CLC
JNC Thru
No_Good:STC
Thru:POP CX
POP BX
RET
ASCII_BIN ENDP
;********************************************
CONV_AB PROC
push BP
push BX
push SI
Mov BP,BX
Sub BX,BX
Chk_Pt:CMP DX,0
JNZ Range
CMP byte PTR DS:[BP],'.'
JNE Range
Dec CX
Mov DX,CX
JZ End_Conv
Inc BP
Range:CMP byte PTR DS:[BP],'0'
JB Non_Dig
CMP byte PTR DS:[BP],'9'
JBE Digit
Non_Dig:Mov DI,BP
STC
JC End_Conv
Digit:Mov SI,10
push DX
MUL SI
POP DX
Mov BL,DS:[BP]
And BX,0FH
Add AX,BX
JC End_Conv
Inc BP
LOOP Chk_Pt
CLC
End_Conv:POP SI
POP BX
POP BP
RET
CONV_AB Endp
prt proc
; ў ॣЁбвॠdx еа Ёвбп ¤аҐб з « ⥪бв Є®в®ал© г¦® ЇҐз в вм
push ax
mov ah,09h
int 21h
pop ax
ret
prt endp
prn proc
; ў ॣЁбвॠax еа Ёвбп 楫®Ґ зЁб«® Є®в®а®Ґ 㦮 ЇҐз в вм
push bx
push dx
push ax
lea bx,buffer
call convba
mov dx,bx
mov ah,09h
int 21h
pop ax
pop dx
pop bx
ret
prn endp
NL proc
push dx
lea dx,NEW_LINE
CALL PRT
pop dx
ret
NL endp
PROBEL proc
push dx
lea dx,pr1
CALL PRT
pop dx
ret
PROBEL endp
CODES ENDS
END MAIN
Пихнув етот текст в файл типа ассм.. можно понять что она решает задачу вида
Y= A+(B-C)*D, если 0<=С<2
A+B/C во всех остальных случаях
С меняется от CN до СК с шагом DELC.
Эй, слушайте. Давайте кинем исходный код винды и посмотрим, почему же она глючит, а?
Stacks segment [SIZE=3]stack[/SIZE]
dw 100 dup (?)
Stacks ends
И саму программу надо бы завершать корректно:
...
mov ax, 4C00h
int 21h
MAIN ENDP
...
Скажи, пожалуйста, где ты взяла этот код?
Всю прогу кроме индивидуальных частей программы, нам дала лекторша..индувидуалки(они отделены) мы писали сами... как видишь