На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> несложные задания на ассемблере, tasm
    Помогите пожалуйста написать хотя бы какие-нибудь из этих программы:
    1) Обменять местами содержимое ячеек памяти со смещениями 0002h и 0004h
    2) В массиве оставить только отрицательные числа, остальные элементы заменить нулями (размер элементов – 1 байт, количество элементов – 32). Длина вектора остается неизменной. С использованием обычных команд чтения/записи данных (без использования строковых операций).
    3) В векторе оставить только отрицательные числа, остальные элементы убрать из вектора (размер элементов – 1 байт, количество элементов – 32). Длина вектора может уменьшиться. С использованием строковых операций.
      ExpandedWrap disabled
        ;[1]==============================================================================
        proc    Change  
           mov  ax,[0002h]
           xchg ax,[0004h]
           mov  [0002],ax
           ret
        endp


      ExpandedWrap disabled
        ;[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


      ExpandedWrap disabled
        ;[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...
      Не внимательно прочитал последнее задание :-?
      думал, что нужно тоже самое, как и второе, только со строковыми инструкциями
      Исправляю: :rolleyes:
      ExpandedWrap disabled
        ;[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
      Сообщение отредактировано: Qraizer -
      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0197 ]   [ 14 queries used ]   [ Generated: 19.05.24, 22:56 GMT ]