При выполнении этой программы возникает ошибка в строке "shl ax, 2h" (почти в конце программы): sseg segment 'stack' db 128 dup (?) sseg ends dseg segment 'data' text1 db 'Programa zarabotala', 13, 10, '$' text2 db '((D^2-A)^2\D^2+B)-20 = $' textA db 'Vvedite A $' textB db 'Vvedite B $' textD db 'Vvedite D $' A dw 0 B dw 0 D dw 0 rez dw ? dseg ends cseg segment 'code' assume cs:cseg, ds:dseg, ss:sseg start proc far mov ax, dseg mov ds, ax m1: lea dx, text1 call WrStr mov dx,offset textA call WrStr call inint mov A,bx mov dx,offset textB call WrStr call inint mov B,bx mov dx,offset textD call WrStr call inint mov D,bx mov dx,offset text2 call WrStr m2: mov ax,A mul ax add ax,B mov bx,ax mov ax,D imul ax sub ax,A mul ax div bx sub ax,20 mov rez, ax m3: xor cx,cx ; обнуляємо cx mov bx,10 ; заносимо число 10d в регістр bx mod1: xor dx,dx ; обнуляємо dx div bx ; ділення результату ax на bx push dx ; записуємо в dx остачу від ділення inc cx ; сх:=сх+1 збільшується к-сть цифр числа or ax,ax ; якщо ax:=0 jnz mod1 ; якщо 0<ax<0 переходимо на мітку вище print: ; мітка print pop dx ; заносимо цифру старшого розряду із стека в dx add dl,30h ; отримуємо ASCII код цієї цифри (числа) mov ah,2 ; виведення його на екран з використанням ; функції 02 int 21h ; Преривання MS-DOC loop print ; сх:=сх-1 Перехід на мітку print якщо 0<cx<0 ;------------------------------------------------------------------------------------------------ m4: mov ah,1 ; щоб програма не закривалася відразу int 21h ; і була можливість побачити результат mov ah, 4ch ; функція завершення програми Int 21h ; Преривання MS-DOC Start endp ; кінець процедури Start ;------------------------------------------------------------------------------------------------ WrStr proc near ; початок процедури WrStr. mov ah, 09h ; виведення на екран рядка символів int 21h ; обмежених символом $ або кодом 24h. ret ; повернення з процедури. WrStr endp ; кінець процедури WrStr. ;------------------------------------------------------------------------------------------------- inint proc near push cx push dx push bx push si xor si, si xor bx, bx xor cx, cx mov ah, 01h int 21h cmp al, '-' jne short ii1 inc si ii0: mov ah, 01h int 21h ii1: cmp al, 39h ja short ii2 sub al, 30h jb short ii2 mov cl, al shl bx, 1h mov ax, bx shl ax, 2h add bx, ax add bx, cx jmp short ii0 ii2: test si, si jz short ii3 neg bx ii3: mov ah, 02h mov dl, 0Dh int 21h mov dl, 0Ah int 21h pop si pop bx pop dx pop cx ret inint endp Cseg ends end start
Там же написано - строка 110. В этой простыне считать строки никого не привлекает - пиши конкретную команду в которой ошибка.
Kroleg Сказано же тебе - читай доки, иначе скоро модераторы тебя забанят. Нельзя же каждую букву спрашивать... Просто у тебя компилятор с ассемблера или старый или компилит для процессора 86 или 286 - я точно не знаю когда появились команды сдвига на произвольное число.
хочется посоветовать - используйте редактор умеющий нумеровать строки покурите мануалы по директивам управляющими множеством допустимых команд аля .486 и прочие и если неохота заморачиваться сразу выставьте максимальный охват