YuliyaMc
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору [more] Здравствуйте. У меня такая задача. Подсчитать в массиве количество элементов, равных введённому N Я решила, но вывод на экран не правильный. Положительное+положительное=положительное - выводит правильно. Положительное+отрицательное=положительное - выводит правильно Отрицательное+положительное= отрицательное -выводит НЕ правильно Отрицательное+отрицательное= отрицательное -выводит НЕ правильно Помогите, пожалуйста, разобраться. В emu8086 все это делаю Код: ; You may customize this and other start-up templates; ; The location of this template is c:\emu8086\inc\0_com_template.txt org 100h ; add your code here cr= 0dh ;kod simvola, vozvrat karetki(klavishi Enter) lf= 0ah ;perevod stroki begin: lea dx,zapros ;soo mov ah,9 int 21h mov cx,3 mov si,0 start1: push cx push si mov ah,0ah lea dx,string int 21h ;vvod stroki xor ax,ax lea si,string+2 ;ñèìâîë ââåäåííîé ñòðîêè mov negflag, ax cmp byte ptr [si],'-' jne m2 not negflag inc si jmp m m2: cmp byte ptr[ si],'+' jne m inc si m: cmp byte ptr [si],cr je ex1 cmp byte ptr[ si], '0' cmp byte ptr[si],'9' ja err mov bx,10 mul bx sub byte ptr[si],'0' add al,[si] adc ah,0 inc si jmp m Err: lea dx,errmsg mov ah,9 int 21h jmp start1 ex1: cmp negflag,0 je ex neg ax ex: mov si,0 pop si pop cx mov mas[si],al inc si mov ah,9 lea dx, null int 21h loop start1 start2: mov bx,0 lea bx, mas mov cx, 3 mov ax,0 cikl: add ax, [bx] inc bx loop cikl mov cl,al ;kopiruem xor ax,ax mov ah,9 ;vivod na ekran soobsheniya lea dx, rez int 21h xor ax,ax mov ax,cx ;kopiruem ;vivod push -1 ;soxranim priznak kontsa chisla v steke mov cx,10 ;pomeshaem v register delitel cmp ax, 0 ;proveryaem znak chisla jge l ;esli + , to perexodim neg ax ;inache menyaem znak chisla push ax ;sozranyaem chislo pered vizovom funktsii mov ah, 2 ;vivod na ekran znaka "-" mov dl, '-' int 21h pop ax ;pomeshaem chislo v ax L: xor dx,dx ;otshishaetsya registr div cx ;delim chislo v ax na 10:chastnoe v ax, ostatok v dx push dx ;pomeshaem v register cmp ax,0 ; ostalsya 0? jne L ;esli net, to prodoljaem mov ah,2h L2: pop dx cmp dx,-1 je e ;esli ravno, to perexodim add dl,'0' ;preobrazovanie int 21h ; vivod jmp L2 ;prodoljit e: mov ah,0 int 16h ret zapros db 'Vvedite element',cr,lf,'$' zapros1 db 'summa',cr,lf,'$' ravni db 'Eto kvadrat',cr,lf,'$' neravni db 'Eto pryamougolnic',cr,lf,'$' string db 255, 0, 255 dup (?) errmsg db 'Nedopustim simvol',cr,lf,'$' null db 13,10, '$' negflag dw ? rez db 'Rezultat slojeniya',cr,lf,'$' mas db 3 dup (?) i db 0 len dw $-mas end begin | |