Скопировать из первого массива во второй сначала отрицательные числа, а затем - неотрицательные - Assembler
Формулировка задачи:
Область в сегменте данных содержит массив однобайтных знаковых чисел
Занести эти данные в другую область сегмента данных в формате слов в следующей последовательности
Сначала отрицательные числа затем положительные
Решение задачи: «Скопировать из первого массива во второй сначала отрицательные числа, а затем - неотрицательные»
textual
Листинг программы
_STACK segment para stack db 1024 dup(?) _STACK ends _DATA segment N dw 10 ArrayA db 72, -58, -59, -109, 75, -127, 50, -40, 35, -9 ArrayB db 10 dup(?) CrLf db 0Dh, 0Ah, '$' _DATA ends _TEXT segment assume cs:_TEXT, ds:_DATA, ss:_STACK main proc ;инициализация сегментного регистра данных mov ax, _DATA mov ds, ax mov cx, [N] lea si, [ArrayA] lea di, [ArrayB] cld @@ForNegative: lodsb or al, al jns @@NextNegative stosb @@NextNegative: loop @@ForNegative mov cx, [N] lea si, [ArrayA] cld @@ForNonNegative: lodsb or al, al js @@NextNonNegative stosb @@NextNonNegative: loop @@ForNonNegative ;завершение программы mov ax, 4C00h int 21h main endp _TEXT ends end main
Объяснение кода листинга программы
- _STACK - сегмент стека
- _DATA - сегмент данных
- N - переменная в сегменте данных, содержащая число 10
- ArrayA - массив в сегменте данных, содержащий числа -58, -59, -109, 75, -127, 50, -40, 35, -9
- ArrayB - массив в сегменте данных, изначально содержащий 10 нулей
- CrLf - строка в сегменте данных, содержащая символы перевода строки 0Dh и 0Ah, а также символ доллара $
- _TEXT - сегмент кода
- main - процедура в сегменте кода, являющаяся точкой входа в программу
- mov - команда загрузки (перемещения) регистра/регистров из памяти/в память или из регистра в регистр
- ax - регистр общего назначения, используемый в качестве регистра индекса
- ds - сегментный регистр данных
- lea - команда определения адреса (смещения)
- si - сегментный регистр индекса для операций со строками
- di - сегментный регистр индекса для операций со строками
- cld - команда очистки (флаг направления) для операций со строками
- lodsb - команда загрузки (перемещения) байта из памяти в регистр al и в регистр dl
- or - команда логического ИЛИ
- jns - команда перехода, если результат операции (или) отрицательный
- stosb - команда записи (перемещения) байта из регистра al в память
- loop - команда перехода, выполняется до тех пор, пока условие истинно
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д