Этот сайт ждет реконструкции!
Обязательно зайдите к нам еще раз как-нибудь.
Если вы что-то искали и не нашли, или у вас возникли вопросы, пишите на e-mail: ivan@ignatiev.su

Сортировка массива на Assembler`е для KP580 (советский аналог Intel 8080)

Задачка которая начала менять моё мышление, одна из первых полноценных программ написанных мной на Assembler`е (до этого писал только asm вставки в коды на C++ и Pascal`е и под современную платформу i386). Написана в рамках курса «Архитектура компьютеров».
Никаких лишних слов, только комментарии к строкам (для тех кто забыл напоминаем, что все что после ; – комментарий).
Сортировка обменом по убыванию (методом «пузырька») на Assembler`е для процессора КР580 (советский аналог данного процессора Intel8080):

	mvi c,5  	; c = 5
next:	lxi h,arr	; помещаем адрес на массив в пару HL
	mov d,c	; d = c
move:	mov a,m 	; помещаем первый элемент массива в аккумулятор a = arr[d]
 
	inx h   	; переходим к следующему элементу массива,	arr[d+1]
 
	sub m 	; a = a - m, arr[d] - arr[d+1]
	jnc endif	; если получилось положительное число значит a > m , arr[d] > arr[d+1], заканчиваем итерацию
 
 
			; иначе меняем местами
	add m		; a = a + m
	mov b,m	; b = m , b = arr[d+1]
	mov m,a	; m = a , arr[d+1] = arr[d]
	dcx h		; переходим к предыдущему элементу, arr[d]
	mov m,b	; m = b, arr[d] = b
	inx h		; возвращаемся на текущий элемент, arr[d+1] на следующей итерации просто arr[d]
endif:dcr d		; d--
	jnz move 	; если d <> 0 , то продолжаем цикл перемещения  move
	dcr c		; c--
	jnz next 	; если c <> 0 то продолжаем цикл next
 
 
	hlt		; выходим из программы
 
	arr db 02h, 01h, 03h, 04h, 05h ;заданный массив

Эмуляторы данного процессора достаточно широко распространены в Интернет и перевод по i386 тоже думаю не составит больших проблем.

А так же в продолжении темы о сортировках: Сортировка массива методом вставки

Tags: , ,

RSS 2.0 - Узнай первым, о обновлениях в комментариях к этой записи

62 комментария

  1. У вас ошибка. При выполнении команды SUB M получается arr[d] – arr[d+1], а не наоборот.
    ПРавильнее было бы так:
    mov d,c
    inx H
    mov a, m
    DCX H
    SUB M
    При таком порядке действительно будет arr[d+1] – arr[d]

    • Иван Игнатьев

      Спасибо большое, да ошибся при комментировании в комментариях, исправил. Но код менять не нужно, сам код получился верный т.к. сортировка по убыванию.

  2. А как бы это выглядело, если бы использовалась сортировка вставками, не подскажете? :)

  3. Здравствуйте! Мне очень нужна сортировка методом деления на ассемблере! пожалуйста, помогите!

  4. Здравствуйте
    очень помог Ваш метод «пузырька», а не могли бы Вы помочь с такой проблемой:
    треб в массиве определить четные и нечет элем, а затем чет отсортировать по возр, а нечет по убыванию

    Заранее спасибо

    • Могу посоветовать, сначала скопировать четные элементы в одну область памяти, а нечетные в другую смежную, отсортировать любым из стандартных методов.

      Для определения четности, надо смотреть на флаг четности (если не изменяет память- «p» ). Он ставиться, когда в числе четное кол-во единиц. Четное кол-во единиц может быть, только в нечетных числах.
      Ну и не забыть про ноль.

  5. Уважаемый Иван Игнатьев, выручите меня пожалуйта)

    Дали задание на курсовой:»Разработать программу сортировки массива по убыванию.Адрес начала массива лежит в регистровой паре BC.Длина массива в регистре D»

    Я к сожаление ничего не смыслю в ассемблере.Но судя по вашему блогу, у вас есть навыки. Помогите мне плиз.
    Посути программа которую вы написали почти совпадает с моим заданием.

  6. Код программы на языке ASSEMBLER

    START: MOV H,D; B→H
    MOV L,C; C→L
    LOOP1: PUSH H; помещаем HL в стек
    MOV C,D; D→C
    LOOP2: MOV A,M; помещаем первый элемент в А
    INX H; переходим к следующему элементу массива
    CMP M; сравниваем текущий и след. элемент массива
    JNC LOOP3; Если текущий элемент больше следующего, заканчиваем
    ; итерацию, иначе меняем местами текущий и след. элемент
    MOV B,M; M(HL+1) →В
    MOV M,A; А→ M(HL)
    DCX H; переход к предыдущему элементу Н-1
    MOV M,B В → M(HL)
    INX H; возвращение на текущий элемент
    LOOP3: DCR C; C-1
    JNZ LOOP2; если С не равно нулю, то переходим на метку LOOP2
    DCR D; D-1
    POP H; возвращаем HL из стека
    JNZ LOOP1; если D не равно нулю, то переходим на метку LOOP1
    STOP: HLT

    Вот,что вышло из моих стораний, вопрос верно ли я переделал программу под свое условие…

    • Не знаю, под какой процессор вам нужно, но если переделывать мой вариант под ваш, то в моей программе просто нужно заменить регистр С на D
      и вместо

      lxi h, arr;

      написать ,

      mov h,b; 
      mov l,c;

      и убрать строку

      arr db 02h, 01h, 03h, 04h, 05h ;заданный массив
  7. Спасиб, впринципе я так и сделал. ток заменил еще способ сравнивания чисел командой CMP M
    А процессор такойже интел 8080

  8. Николай

    Доброго времени суток)
    Иван, подскажите пожалуйста!
    А что, если стоит точно такая же задача сортировки, но массив состоит из 2х_байтных чисел? Изменится ли сама идея решения данной задачи, или можно преобразовать ваш код для её решения?

    • Идея сама не измениться, теоретически код можно преобразовать считывай подряд по байту за одну итерацию. Если вам нужна реализация конкретно под КР580.

  9. Уважаемый Иван Игнатьев, помогите мне пожалуйта.

    Дали задание на экзамен :”В памяти, начиная с адреса 0840h по адрес 084Fh, расположен массив положительных чисел без знака. Числа имеют длину 1 байт. Составить программу , которая расположит элементы массива в возрастающем порядке.”

    Прошу мне помочь пожалуйста, ваша программа частично подходит но я не могу понять что там надо поменять для моего задания.
    Буду весьма признателен если поможете спасете еще одну душу от задолженности!!!

    • Вам необходимо воспользоваться алгоритмом сортировки по возрастанию http://ignatiev.su/blog/posts/assembler_insert_sort/

      там необходимо заменить все arr на 0840h , а в регистр с поместить число 16 (mov c, 5 заменить на mov c, 16, т.к. между 0840h и 084Fh включительно – 16 элементов), и удалить строку «arr db … «.

      Думаю для вас это будет самый простой вариант.

  10. Большое спасибо Иван, что так быстро ответили на мой проблему, у меня еще один вопрос ??
    Эмулятор процессора для KP580 почему-то не запускает код или мне надо все команды перевести в машинный код вручную там где идут непосредственно адреса ??
    Я пробовал вставлять в эмулятор для emu8086v408r но он тоже выдает синтаксическую ошибку в первых 6 или 7 строчках!!!

    • к сожалению я не знаю какой именно эмулятор КР580 (Intel 8080) вы используете

      emu8086 имитирует процессор Intel 8086 (отечественный аналог – КР1810), там немного другой ассемблер, потому просто «скопипастить» этот кд вам не удастся

  11. Вот такой у меня эмулятор он подходит??
    программная модель стенда
    УМПК-80
    на базе микропроцессорв
    К580ВМ80 версия 2.0
    Курский государственный технический университет

    • Да этот эмулятор подходит, единственная его особенность, он не поддерживает десятичные значения в коде, поэтому arr надо заменять на 0840 (без h на конце), а в регистр С поместить – 1F ( 16 в десятичном представлении).

      Следующие что необходимо сделать это выполнить Ассемблирование программы (Alt + F9) ну и вручную заполнить область данных с 0840 по 084F различными числами и можно жать Выполнить (F9).

  12. Извините, что еще докучаю вам, но я так не могу понять как вручную заполнить область данных с 0840 по 0840F в остальном же я все исправил и программа работает отлично!!

  13. Уже разобрался спс еще раз за оказанную помощь!!!

  14. Сегодня сдал большое вам спасибо вы меня спасли !!

  15. Александр

    Привет Иван !Вот порекомендовали к вам обратиться!Помогите пожалуйста если сможете!Вообщем такое задание:

    1) Используя инструкции косвенной адресации загрузить константы X, Y, Z в двоично-десятичном коде в регистры B, D, E соответственно.
    2) Используя косвенную адресацию, записать в память с адресами 0860, 0861, 0862 X, Y, Z соответственно.
    3) Используя прямую адресацию, загрузить в B, D, E значения Y, Z, X соответственно.
    4) Загрузить содержание всех внутренних регистров в стек, очистить содержание регистров, восстановить из стека содержимое регистров.
    5) Посчитать значение сумм X+Y, Y+Z, X+Z, используя инструкцию десятичной коррекции DAA. Загрузить полученные суммы в регистр A, по адресам памяти 0864, 0863 соответственно.
    X = 20, Y = 30, Z = 50
    Вот мой примерный код:

    MVI B
    LXID
    MOV M,B
    STA
    MOV M,D
    STA
    MOV M,A
    STA
    LXIH
    MOV E,M
    INX H
    MOV B,M
    INX H
    MOV D,M
    PUSH A
    PUSH B
    PUSH D
    PUSH H
    MVIA
    LXIB
    LXID
    LXIH
    POP H
    POP D
    POP B
    POP A
    MOV A,B
    ADD D
    DAA
    STA
    MOV A,E
    ADD B
    DAA
    STA
    MOV A,E
    ADD D
    DAA
    RST 6

  16. Здравствуйте, наслышала о Вашем сайте и не могу не обратиться… Помогите пожалуйста, вообще ничего не понимаю.
    Нужно разработать программу определения наибольшего числа полученного при вычитании смежных чисел (вычитать в следующем порядке: ячейки памяти 1501-1500; 1502-1501; 1503-1502 и т. д.). Числа записаны в дополнительном коде. Массив расположен в памяти с ячейки 1500 по 150F. Найденное число поместить в регистровую пару ВС.
    для процессора КР580

    • Ответил вам на указанный e-mail

      Основную часть, продублирую тут:

      В вашем случае могу подсказать вам алгоритм:
      0. Помещаем в HL стартовый адрес массива, помещаем в какой-нибудь регистр 0 (например в регистр С) , там где мы будем хранить минимальные значения
      1. проверяем достигло ли значение в HL адреса конца массива, если да выходим
      2. помещаем в акумулятор (регистр A) число по адресу HL (mov A, M)
      3. переходим на следующий адрес (добавить к HL единицу inx h;)
      4. вычитаем из аккумулятора значение по адресу хранящемуся HL (к значению обращаются через регистр M)
      5. сравниваем значение в аккумуляторе и в регистре C (через команду cmp)
      6. если значение меньше переходим к шагу 1 (оператор переход jc)

  17. Надеюсь, разберусь) Спасибо Вам огромное!

  18. Здравствуйте! Очень важно знать, будут ли изменения в программе, если массив состоит из дробных чисел?

    • дробных в смысле вещественных ? и если вещественных, то с плавающей или с фиксированной запятой ?

      но в любом случае у вас уже число будет состоять из двух частей, каждые из которых нужно сравнивать отдельно, поэтому небольшие изменения, в месте где сравниваются два числа будут, в остальном нет.

      Хотя вы не назвали какой у вас процессор, если он поддерживает вычитание вещественных чисел, то никаких изменений не будет (именно вещественных, если вы представляете дробные числа, отдельно знаменатель, отдельно числитель, тогда это абзац выше).

  19. Возникла такая проблема: на защиту лабораторной дали написать программу, которая бы искала 2 одинкавых элемента в 2-х масивах. Ну например даны 2 масива:
    mas1:db 1 3 2 5 8 и
    mas2:db 7 3 6 5 8
    Принцип мне понятен: сравниваем каждый элемент с соответствующим ему по номеру, НО. Не хватает регистров, и не знаю куда мне можно занести числа которые совпадают (мне их потом ещё нужно умножить).
    Я так предпологаю, что нужно отправить 1 из масивов в стек после сравнения, занести элемент масива в аккумулятор, и оттуда в переменную.

  20. Всім привіт допоможіть будь-ласка написати задачу:
    на мові Асемблер мікропроцесора Intel8080 програму визначення скільки разів у масиві зустрічаються підряд три нульові комірки

    • conquest
      Вот собственно Ваша программа.

      org 0800h
      lxi h,mas
      mvi e,0
      mvi c,0
      lda k_el
      mov b,a
      mst:
      mov a,m
      cmp e
      jz mt1
      jnz ccc
      mt1:
      inx h
      mov a,m
      dcr b
      cmp e

      jz mt2
      jnz ccc
      mt2:
      inx h
      mov a,m
      dcr b
      cmp e
      jz mt
      jnz ccc
      mt:
      inr c
      inx h
      dcr b
      jnz mst
      jz kin
      ccc:
      inx h
      dcr b
      jnz mst
      hlt
      kin:
      k_el:db 6
      mas:db 0,0,0,1,2,3

      end

  21. Всё, со своей программой разобрался, + ещё написал часы, которые считают время против часовой стрелки, и каждые 30 сек заносят в регистры 0 и 1.
    2 conquest вам нужно что-то типо этого
    mov a,m
    cpi 0
    jz met
    met: inx h
    mov a,m
    cpi 0
    jz met1
    met1: inx h
    mov a,m
    cpi 0
    jz met2
    met2: inr C ; это допустим наш счётчик

    • Великолепно, что вы смогли разобраться сами!
      Уж простите, но не мог ответить на все вопросы в последний месяц, просто не было времени, но если возникнут еще, то пишите на e-mail.

      • Да я и сам, рад). По ассемблеру 80-му проблемы уже вряд ли возникнут, т.к. изучение его длится только 1 семестр. Во 2 семестре будем учить СИ, тогда наверное понадобится немного помощи)
        Кстати, осталось много программ, мог бы выложить сюда парочку самых сложных.

  22. Здравствуйте! Помогите, пожалуйста, с программой. Задача: разработать программу подсчёта количества положительных элементов массива. Длина массива заранее неизвестна (но не более ff в 16-чной системе), адрес первого элемента хранится в ячейках 1501 (младший брат) и 1502 (старший брат). Признак конца массива – число ff в 16-чной системе. Результат подсчёта сохранить в ячейке 1500.

    • Если я правильно понял задачу, то вот:
      Начнём с того, что если нам известно количество элементов массива, то признак конца массива нам не нужен, мы просто введём счётчик элементов, и от него будем отнимать 1. Дальше мы просто сравниваем каждый элемент массива с нулём, если больше, то прибавляем наш счётчик, если меньше, то переходим к след. элементу.
      Вот примерчик:
      org 0800h
      lxi h,mas
      lda k_el ;счётчик элементов массива
      mov d,a
      lda kil ;счётчик элементов которые больше 0
      mov c,a
      cikl:
      mov a,m
      cpi 0
      jm mt1
      inr c
      inx h
      dcr d
      jnz cikl
      mt1:
      inx h
      dcr d
      jnz cikl
      hlt
      mas:db 1,2,3,-3,-4
      k_el:db 5
      kil:db 0

      end

  23. Помогите пожалуйста!)я не знаю как это сделать….не получается никак((

    Вычислить значение выражения: y=a*(b-x) при a=0,5h ,b=f2h , x-сумма чисел от 1 до 7.вычислить суммы от 1 до 6.оформить в виде подпрограммы.

    • Попробовал написать чёто, но в правильности сомневаюсь. Говорю сразу, что прога не дописана, дописал до момента с умножением, и там получилась небольшая запара, т.к пробовал на числах а=30, В=40
      Да и с суммой чисел от 1 до 7 схалтурил немного =Р
      org 0800h
      lda aaa
      mov c,a
      lda bbb
      mov b,a
      lda kl
      mov l,a
      lda xxx
      mt1:
      mov a,e
      inr a
      mov e,a
      inr e
      cpi 7
      add e
      dcr l
      jnz mt1
      inr a
      sta xxx
      call plus
      hlt
      plus:
      mov l,a
      mov a,b
      sub l
      mvi l,0
      mov l,a
      mov a,c
      mts:
      add a
      dcr l
      jnz mts

      ret
      yyy:db 0
      kl:db 7
      xxx:db 0
      aaa:db 30
      bbb:db 40
      end

  24. 10. Дан массив из 15 чисел со знаком. Посчитать произведение элементов массива. Массив считать из порта 03h и разместить в стеке.

    а вот это попробуйте пожалуйста!!))

    • Вы не уточняете, какой процессор вам нужен и подобные вопросы повторюсь лучше присылать мне на e-mail, я отвечу на них быстрее.

      Полностью задач за других я не решаю, чисто технически ваше задание решается след. путем:

      ;СЧИТЫВАНИЕ МАССИВА ИЗ ПОРТА В СТЕК
      mov d,15 ; счетчик элементов массива
      read: in 03h ; помещаем значение в порту 03h в аккумулятор A
      mov b,a ; сохраняем значение аккумулятора в регистр B
      push b; сохраняем регистровую пару BC в стек
      dcr d; уменьшаем счетчик элементов
      jnz read; пока не ноль
       
      mov d, 15
      mult: pop b ; получаем значение из массива из стека
      ;УМНОЖАЕМ (значение элемента массива расположено в регистре B)
      dcr d; уменьшаем счетчик элементов
      jnz read; пока не ноль
  25. Здравствуйте,помогите пожалуйста!!!я не знаю как это сделать….не получается никак((
    программа,которая бы реализовывала чтение из паралельного запись в последовательный порт из N байт с промежуточной обработкой и поиск минимального значения на ассемблере для КР580.

    • Какие порты, важно только при проектировании архитектуры ЭВМ. У ассемблера процессора КР580, есть две команды IN для считывания значения с порта в аккумулятор и OUT для вывода значения из аккумулятора в порт.

      IN номер параллельного порта
      ; обработка, данные хранятся в аккумуляторе (регистр А)
      OUT номер последовательного порта

      Для поиска минимального значения используйте команду сравнения CMP reg. Эта команда сравнивает значение в аккумуляторе A с значением в указанном регистре reg. Если А < reg, то флаг C будет = 1. А дальше следует использовать команды условных переходов JC , JNC.

  26. Помогиде пажалуста,уминя задание такое.
    начат памяти 8100Н адреса,64 элемента сартироват по мере нарастания,праграма саздат для к580 микрапрацесоров в язике асемблер.

    • Внимательно просмотрите и разберите программы написанные комментариями других пользователей. Все необходимые для вас моменты были разобраны.

      Здесь не пишут готовых программ. Вам придется подумать самому. Если нужно задавайте более конкретные вопросы (условие задачи само по себе вопросом не является, задание выдавалось вам) на e-mail: ivan@ignatiev.su .

  27. Здравствуйте, Иван! У меня есть задача, состаящая в том, чтобы переместить массив с какого-то адреса ААААН, причем, нужно учесть, что массив может быть больше, чем 255 чисел, а конец поиск конца массива определять из правила больше/меньше. Подскажите, пожалуйста, ооочень нужно, ну просто очень!

    • на ваше сообщение, я ответил по e-mail
      Вообще не следует, дублировать свои сообщения везде подряд. Это смело смахивает за спам, и я не узнаю, что вы мне написали.

  28. Всем привет!! Помогите пожалуйста с программой….(((( Вообще не понимаю что и куда надо делать…(((
    Разработать программу нахождения наименьшего положительного числа в массиве, состоящем из 16-ти чисел(в ячейках памяти с 1500 по 150F), если числа отображены в прямом коде. Найденное число поместить в регистр С.

  29. Здравствуйте. Подскажите, каким способом лучше и проще организовать операцию деления. Для КР580.

  30. Помогите пожалуйста..
    Разработайте программу подсчета количества элементов массива равных 00. Длина массива заранее не известна(но не более FF16), адрес 1-го элемента массива хранится в ячейках 1501 (младший байт) и 1502(старший байт), признак конца массива – число FF16. Результат подсчета сохранить в регистре В

  31. Prastite pagalusta za angliski
    u menya prablemi s ruskim

    Prastite no kto nibut znayert campilator(ili emulator) dlya 8080
    katori bi ponimal kamandu

    u mena emu8086 no ona ne ponimaet etu kamandu

  32. Помогите пожалуйста организовать ручной ввод в программах. (программириование Intel 8080).
    mes macro msg
    mov ah,9
    lea dx,msg
    int 21h
    endm

    abc macro char
    mov dx,0
    add char,’0′
    mov dl,char
    mov ah,2
    int 21h
    sub char,’0′
    endm

    d_seg segment
    a db 5
    b db 9
    c db 3
    str db ‘Ishodnie dannie:’,10,13,’$’
    str2 db ‘Rezultat sortirovki po vozrastaniju’,10,13,’$’
    str3 db ‘Press any key$’
    enter db 10,13,’$’
    space db ‘ ‘,’$’
    strA db ‘A=’,'$’
    strB db ‘B=’,'$’
    strC db ‘C=’,'$’
    d_seg ends
    c_seg segment
    assume ds:d_seg,cs:c_seg
    start:mov ax,d_seg
    mov ds,ax

    mes enter
    mes str
    mes enter
    mes strA
    abc a
    mes space
    mes strB
    abc b
    mes space
    mes strC
    abc c
    mes enter

    mov al,a
    mov bl,b
    mov cl,c

    cmp al,bl
    jl CONTINUE
    xchg al,bl
    CONTINUE:
    cmp al,cl
    jl CONTINUE2
    xchg al,cl
    CONTINUE2:
    cmp bl,cl
    jl CONTINUE3
    xchg bl,cl
    CONTINUE3:
    mov a,al
    mov b,bl
    mov c,cl

    mes enter
    mes str2
    mes enter
    mes strA
    abc a
    mes space
    mes strB
    abc b
    mes space
    mes strC
    abc c
    mes enter
    mes enter
    mes str3
    mov ah,1
    int 21h
    mov ah,4ch
    int 21h
    c_seg ends
    end start

    вторая задача:
    mes macro msg
    mov ah,9
    lea dx,msg
    int 21h
    endm

    dseg segment
    k dw 10
    m db 10
    pos db 0
    mas db 1,3,6,8,9,1,4,7,2,3,7,9,4,5,8,9 ;ax=mas-1
    str db ‘Ishodnii massiv elementov v neypakovannom BCD formate ‘,10,13,’$’
    str1 db 10,13,’Poluchinii massiv elementov v ypakovannom BCD formate ‘,10,13,’$’
    str2 db 10,13,’Press any key’,10,13,’$’
    enter db 10,13,’$’
    space db ‘ $’

    dseg ends
    cseg segment
    assume cs:cseg, ds:dseg

    vivod proc
    xor cx,cx
    k_del:
    sub dx,dx
    div k
    add dx,’0′
    push dx
    inc cx
    cmp ax,0
    jne k_del
    k3:
    pop dx
    mov ah,2
    int 21h
    loop k3
    ret
    vivod endp

    abc proc
    xor si,si
    xor di,di
    mov bx,16
    mov cx,16
    dec bx
    m2:
    mov al,mas[si]
    mul m
    inc si
    add al,mas[si]
    mov mas[di],al
    cmp si,bx
    je m1
    inc di
    inc si
    loop m2
    m1:
    ret
    abc endp

    start:
    mov ax,dseg
    mov ds,ax

    mes enter
    mes str
    mes enter
    mov bl, 0
    met2: mov al, mas[bx]
    mov ah,0

    call vivod

    mes space
    inc bl
    cmp bl,15
    jle met2

    call abc

    mes enter
    mes str1
    mes enter
    mov bl, 0
    met1: mov al, mas[bx]
    mov ah,0
    call vivod
    mes space
    inc bl
    cmp bl,7
    jle met1
    mes enter
    mes str2
    mov ah,1
    int 21h
    mov ah, 4ch
    int 21h

    cseg ends
    end start

    и 3:
    char1 macro b
    add b,’0′
    mov dl,b
    mov ah,2
    int 21h
    sub b, ’0′
    endm
    char macro a
    xor ax, ax
    xor bx, bx
    xor dx, dx
    mov ax, a
    mov bx, 10
    div bx
    add dl,’0′
    mov ah, 2
    int 21h
    endm

    mes macro str
    mov ah,9
    lea dx,str
    int 21h
    endm

    d_seg segment
    min db 0
    max db 0
    n_min dw 1
    n_max dw 1
    raz db 0
    a db 2,6,4,1,7,9,3
    n=$-a
    enter db 10,13,’$’
    str db 10,13,’Ishodnie dannie: $’
    str1 db 10,13,’Rezultat: $’
    str2 db 10,13,’Nomer naimenshego chisla: $’
    str3 db 10,13,’Nomer maximalnogo chisla: $’
    str4 db 10,13,’Raznost max i min chisel: $’
    str5 db 10,13,’Press any key……..$’
    space db ‘ $’
    d_seg ends
    c_seg segment
    assume cs:c_seg, ds:d_seg

    start:
    mov ax,d_seg
    mov ds,ax

    xor si,si
    mov al,a[si]
    mov min,al
    mov max,al
    inc si
    m3:
    mov al,a[si]
    cmp al,max
    jle m1
    mov max,al
    mov bx,si
    inc bx
    mov n_max,bx
    m1:
    cmp al,min
    jge m2
    mov min,al
    mov bx,si
    inc bx
    mov n_min,bx
    m2:
    inc si
    cmp si,n
    jl m3
    mov al,max
    sub al,min
    mov raz,al

    mes str
    mes enter
    xor si,si
    povtor:
    char1 a[si]
    mes space
    inc si
    cmp si,n
    jne povtor

    mes enter
    mes str1
    mes enter
    mes str2
    char n_min
    mes enter
    mes str3
    char n_max
    mes enter
    mes str4
    char1 raz
    mes enter
    mes enter
    mes str5
    mov ah, 1
    int 21h
    mov ah,4ch
    int 21h
    c_seg ends
    end start

    очень нужно срочно.. помогите.. а то програмы написал, но препод требует ручной ввод, а у меня не получается(((

  33. Помогите пожалуйста.
    нужно написать программу, которая создаёт новый поток.
    Етот поток должен генерировать ряд Фибионаччи з 10-ти елементов, пользуясь итерацийным алгоритмом.

  34. помогите решить пожалуйста задачку на цпу580.:Существуют массивы А и B содержащие по n элементов каждый, массив А и В это однобайтовые двоично-десятичные числа. Необходимо Сформировать массив С из массивов А и В по правилам: 1. Все элементы массива представляют положительные двухбайтовые двоичные числа.
    2. Элементы массива С представляют отсортированные по убыванию элементы массивов А и В.
    Младший байт указателя начала массива А расположен в ячейке с адресом 0800h, а старший 0801h соответственно. В последующих ячейках памяти размещаются указатели начал массивов B и C соответственно. Число n показывающее количество элементов массивов А и B располагается в ячейке с адресом 0806h. Все указатели массивов и число элементов массивов задаются при выполнении лабораторной работы на УМК преподавателем.

  35. здравствуйте! выручите, пожалуйста…
    Нужно перемножить два десятичных четырехразрядных числа…это на УОУ Электроника-580
    прошу Вас, помогите

  36. в памяти начиная с адреса 0840h по адрес 084Fh, расположен массив положительных чисел без знака. Числа имеют длину 1 байт. Составить программу которая расположит элементы массива в возрастающем порядке. К580)) Ребят помогите пожалуйста ))))

  37. С отрицательными числами как данный алгоритм реализовать?

Оставить комментарий