Если откомпилить прогу masm 5.1 все компилится но в результате получаем бесконечный цикл вывода значений. Если откомпилить в masm 611 то выдает LINK : fatal error L1002: z2 : unrecognized option name Помогите понять в чем ошибка. Код (Text): d_seg segment 'data' A dw 1d B dw 2d D dw 3d X dw 0 str0 db ' ',10,13,'$' str1 db 'Vipolnil BMKSS-3',10,13,'!!!_START_!!!',10,13,'$' str2 db '!!!_FINISH_!!!',10,13,'$' str_1 db '1+2=','$' str_2 db '1+3+10=','$' str_3 db '1-3+10=','$' str_4 db '11-4+7=','$' d_seg ends c_seg segment 'code' assume ds:d_seg, cs:c_seg START: mov ah,9h lea dx,str1 int 21h ;======================================РАСЧЕТ ПЕРВОЙ ФОРМУЛЫ======================================== xor ax,ax mov ax,A mov dx,B add ax,dx mov X,ax mov ah,9h ; вызов 9 функции lea dx,str_1 ; вычисляем адрес строки и кладем его в dx int 21h ; вызываем 21 прерывание call OutText ;=====================================РАСЧЕТ ВТОРОЙ ФОРМУЛЫ========================================= xor ax,ax mov B,10d mov ax,A mov dx,D add ax,dx mov cx,B add ax,cx mov X,ax mov ah,9h ; вызов 9 функции lea dx,str_2 ; вычисляем адрес строки и кладем его в dx int 21h ; вызываем 21 прерывание call OutText ;====================================РАСЧЕТ ТРЕТЬЕЙ ФОРМУЛЫ========================================= xor ax,ax mov ax,D mov cx,B add ax,cx mov dx,A sub dx,ax mov X,dx mov ah,9h ; вызов 9 функции lea dx,str_3 ; вычисляем адрес строки и кладем его в dx int 21h ; вызываем 21 прерывание call OutText ;=====================================РАСЧЕТ ЧЕТВЕРТОЙ ФОРМУЛЫ====================================== xor ax,ax mov A,4 mov B,7 mov D,11 mov ax,A mov bx,B add ax,bx mov cx,D sub cx,ax mov X,cx mov ah,9h ; вызов 9 функции lea dx,str_4 ; вычисляем адрес строки и кладем его в dx int 21h ; вызываем 21 прерывание call OutText ;==================================ПОДПРОГРАММА=============================================== OutText proc mov dx,X ; заносим значение в регистр dx mov ax,dx ; заносим значение регистра dx в ax mov bx,10d ; значение 10 в dx xor cx,cx ; очистка регистров non_zero_1: ; метка xor dx,dx ; очистка регистров div bx ; делим на 0 для перевода в строку push dx ; заносим полученое значение в стек inc cx ; инкреминируем cmp ax, 0 ; сравниваем ax c 0 jne non_zero_1 ; если ноль то переходим к метке mov ah, 2h ; функция установки курсора write_digit_loop1: pop dx ;вынимаем значение из стека add dl, 30h ; переходим к значению по таблице ASSCII int 21h ; вывод полученого значения loop write_digit_loop1 ; уменьшаем итерации mov ah, 9h lea dx, str0 int 21h ret OutText endp ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++КОНЕЦ ВЫЧИСЛЕНИЙ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ mov ah, 9h lea dx, str2 int 21h mov ah, 1h int 21h int 20h c_seg ends end START
да и приведите строки как компилите и линкуете линкер у вас 16 bit али хатчевским 32 битным пытаетесь дос прогу сделать
Компилятор 16 битный , добавил строки mov ax,d_seg mov ds,ax А как тогда подпрограмму оформить чтобы повторно в нее не входить , я просто у Калашникова читал там так показано как сделал.