Нахождение первого отрицательного элемента массива - Assembler
Формулировка задачи:
Не могу понять в чём проблема программа должна найти первый отрицательный элемент массива и записать его в файл а оно записывает 0.Срочно помогите пожалуйста буду очень благодарен.
.model small .stack 100h .data Len equ 10 ; Кол-во элементов массива Mas db 4,76,-30,54,-5,6,2,44,33,22 min db ? minus dw ? HANDLE1 DW ? OUTREC DB 1 dup (?) Filename db 'rezultat_7.txt',0 .code start: mov ax,@data mov ds,ax mov cx,Len ;Кол-во элементов массива ==числу повторений цикла mov bl,Mas[0] xor si, si jcxz exit mov si,0 cycl: cmp Mas[si],bl jg metka cmp al, '-' mov bl,Mas[si] mov min,bl metka: mov minus,si exit: xor bx,bx xor ax,ax mov bx,10 mov ax, minus div bl add ah,30h mov OUTREC, ah xor ax,ax xor bx,bx xor cx,cx xor dx,dx MOV AH,3CH ; Запрос на создание MOV CX,00 ; обычного файла. LEA DX, Filename ; ASCIIZ строка. INT 21H ; Вызов DOS-прерывания. MOV HANDLE1,AX ; Сохранение файлового номера. MOV BX,HANDLE1 ; Файловый номер. MOV AH,40H ; Запрос записи. MOV CX,1 ; Длина записи. lea dx, OUTREC ; Адрес области вывода. INT 21H ; Вызов DOS-прерывания. MOV AH,3EH ; Запрос на закрытие файла. MOV BX,HANDLE1 ; Файловый номер. INT 21H mov ax,4c00h int 21h end start
Решение задачи: «Нахождение первого отрицательного элемента массива»
textual
Листинг программы
.model small .386 ;************************************************************* .data db 'Begin of DATAseg' Len equ 10 Mas db 4,76,-30,54,-5,6,2,44,33,22 min db ? HANDLE1 dw ? outrec db 3 dup (?) Filename db 'D:\rezultat_7.txt',0 db 'End of DATAseg' .stack db 255 .code start: mov ax,@data mov ds,ax xor si,si mov cx,Len mov bl,Mas[si] cyc: sub bl,0 js good inc si mov bl,Mas[si] loop cyc jmp exit good: mov min,bl xor ah,ah mov al,0ffh sub al,min inc al xor si,si mov outrec[si],'-' mov bl,10 div bl or ax,3030h cmp al,30h jz skip inc si mov outrec[si],al skip: inc si mov outrec[si],ah MOV AH,3CH MOV CX,00 LEA DX, Filename INT 21H MOV HANDLE1,AX MOV BX,HANDLE1 MOV AH,40H MOV CX,3 lea dx, outrec INT 21H MOV AH,3EH MOV BX,HANDLE1 INT 21H exit: mov ah,4Ch int 21h end start