Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.143.0.89] |
|
Сообщ.
#1
,
|
|
|
Помогите пожалуйста написать хотя бы какие-нибудь из этих программы:
1) Обменять местами содержимое ячеек памяти со смещениями 0002h и 0004h 2) В массиве оставить только отрицательные числа, остальные элементы заменить нулями (размер элементов – 1 байт, количество элементов – 32). Длина вектора остается неизменной. С использованием обычных команд чтения/записи данных (без использования строковых операций). 3) В векторе оставить только отрицательные числа, остальные элементы убрать из вектора (размер элементов – 1 байт, количество элементов – 32). Длина вектора может уменьшиться. С использованием строковых операций. |
Сообщ.
#2
,
|
|
|
;[1]============================================================================== proc Change mov ax,[0002h] xchg ax,[0004h] mov [0002],ax ret endp ;[2]============================================================================== proc Sort_1 mov si,offset Dim mov cx,20h ;cx может быть от 0 до 65536, при использовании ecx до 4294967295 Next: cmp [si],0 jge ToZero inc si loop Next ret ToZero: xor al,al mov [si],al inc si jmp short Next endp ;[3]============================================================================== proc Sort_2 mov si,offset Dim mov di,si mov cx,20h ;cx может быть от 0 до 65536, при использовании ecx до 4294967295 cld Next: lodsb cmp al,0 jge ToZero inc di loop Next ret ToZero: xor al,al stosb jmp short Next Вторая подпрограмма работает быстрее чем третья! Добавлено Sorry... Не внимательно прочитал последнее задание думал, что нужно тоже самое, как и второе, только со строковыми инструкциями Исправляю: ;[3]============================================================================== proc Sort_2 mov si,offset Dim ;исходный массив push si ;сохраняем его адрес mov di,si ;указатель на выходной массив mov cx,20h ;cx может быть от 0 до 65536, при использовании ecx до 4294967295 xor dx,dx ;dx - счетчик длины выходного массива Next: lodsb ;загружаем байт cmp al,0 ;сравниваем с "0" jl NotZero ;если меньше - уходим на обработку Continue: loop Next ;если больше или равно - ничего не делаем pop di ;восстанавливаем адрес массива ret ;на выходе имеем адрес нового Массива в di и его длину в dx NotZero: stosb ;выгружаем отрицательный байт inc dx ;увеличиваем счетчик jmp short Continue endp |