Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > массив


Автор: susanin 22.4.2007, 22:50
вобщем такое задание: необходимо в массиве сосчитать количество чисел, которые больше 20 но меньше 50 и занести это их число в ВХ.... я набросал такой текст программки...но работает она неправилно....помогите пожалуйста исправить проблемку.....  где то в метках у меня ошибка, но вот как это исправить не пойму...
Код

Sseg    SEGMENT    STACK    'stack'
        DB    256    DUP    (?)
    Sseg    ENDS
; Сегмент данных
    Dseg    SEGMENT    'data'
     mas dw 5, 7, 10 ,22, 30
     kol dw  5

    Dseg    ENDS

    ; Сегмент кода
    Cseg    SEGMENT    'code'
    ASSUME    CS:Cseg, DS:Dseg, SS:Sseg
    Main PROC FAR
; настройка сегмента данных
        PUSH    DS         ; Занесение DS в стек
        MOV    AX, 0         ; Обнуление AX
        PUSH    AX         ; Занесение нуля в стек
        MOV    AX, Dseg ; Настройка DS на сегмент данных
        MOV    DS, AX

        MOV CX, kol ;заносим в CX кол-во повторов
        LEA SI,mas ;заносим в SI адрес первого элемента массива
        XOR BX,BX   ;обнуляем ВХ
cycle:  
        MOV AX,[SI]  ;заносим в АХ первый элемент
        CMP AX,20   ;сравниваем первое число с 20
        JG metka    ;если оно больше, то переходим к метке
incr:        INC SI ;пеерходим к следующему элементу
metka:              ;метка проверки <50
        CMP AX,50    ;сравниваем число с 50
        JG  incr ;если больше то переходим к метке увеличения элемента
       
        INC BX      ;в противном случае инкрементируем ВХ
       LOOP cycle    ;СХ--
  ;**************************************
       MOV AX, 4C00h
       int 21h
    Main    ENDP
    Cseg    ENDS
        END    Main

Автор: DemonFF 23.4.2007, 07:00
Код

Sseg    SEGMENT    STACK    'stack'
        DB    256    DUP    (?)
    Sseg    ENDS
; Сегмент данных
    Dseg    SEGMENT    'data'
     mas dw 5, 7, 10 ,22, 30
     kol dw  5

    Dseg    ENDS

    ; Сегмент кода
    Cseg    SEGMENT    'code'
    ASSUME    CS:Cseg, DS:Dseg, SS:Sseg
    Main PROC FAR
; настройка сегмента данных
        PUSH    DS         ; Занесение DS в стек
        MOV    AX, 0         ; Обнуление AX
        PUSH    AX         ; Занесение нуля в стек
        MOV    AX, Dseg ; Настройка DS на сегмент данных
        MOV    DS, AX

        MOV CX, kol ;заносим в CX кол-во повторов
        LEA SI,mas ;заносим в SI адрес первого элемента массива
        XOR BX,BX   ;обнуляем ВХ
cycle:  
        MOV AX,[SI]  ;заносим в АХ первый элемент
        CMP AX,20   ;сравниваем первое число с 20
        JNA incr    ;если оно не больше, то переходим к метке incr
        CMP AX,50    ;сравниваем число с 50
        JNB  incr ;если не меньше, то переходим к метке incr
        INC BX      ;в противном случае инкрементируем ВХ
incr:
    ADD SI,2 ;пеерходим к следующему элементу
       LOOP cycle    ;СХ--
  ;**************************************
    ;перед завершением работы программы в bx содержится
    ;количество элементов массива, удовлетворяющих условие
    MOV AX, 4C00h
       int 21h
    Main    ENDP
    Cseg    ENDS
        END    Main

Автор: susanin 23.4.2007, 09:37
DemonFF , спасибо!
П.С. тема закрыта!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)