Перестановка чисел местами - Assembler

Узнай цену своей работы

Формулировка задачи:

Добрый день, уважаемые друзья! Я написал программу на языке ассемблер по такой задаче: В сегменте данных определить три области: А – 1 байт под одно число; B – по 1 байту под три числа; S – по 1 байту под шесть чисел. В области S поменять местами 1 и 4, 2 и 5, 3 и 6 числа (адресация по базе с индексированием). В качестве буфера можно использовать или регистр BX или область А. ВОТ МОЙ КОД ПРОГРАММЫ,ПОДСКАЖИТЕ ПОЖАЛУЙСТА,КАК ПОМЕНЯТЬ ЧИСЛА МЕСТАМИ?
Листинг программы
  1. title ex_prog
  2. page ,132
  3. stack segment para stack 'stack'
  4. db 64 dup('stack ')
  5. stack ends
  6. dseg segment para public 'data'
  7. A db 1 dup(?)
  8. B db 3 dup(?)
  9. S db 6 dup(?)
  10. F db 35,12,46
  11. dseg ends
  12. cseg segment para public 'code'
  13. our_prog proc far
  14. assume cs:cseg,ds:dseg,ss:stack
  15. push ds
  16. mov ax,0
  17. push ax
  18. mov ax,dseg
  19. mov ds,ax
  20. mov al,F
  21. mov B,al
  22. mov al,F+1
  23. mov B+1, al
  24. mov al,F+2
  25. mov B+2, al
  26. mov BX, offset B
  27. mov al,[BX]
  28. mov S+2, al
  29. mov al,[BX]+1
  30. mov S+1,al
  31. mov al,[BX]+2
  32. mov S,al
  33. mov S+3,43
  34. mov S+4,23
  35. mov S+5,37
  36. mov A,0
  37. ret
  38. our_prog endp
  39. cseg ends
  40. end our_prog

Решение задачи: «Перестановка чисел местами»

textual
Листинг программы
  1. org 100h
  2. jmp start
  3.  
  4. mes0  db  13,10,' Digits: $'
  5. mes1  db  13,10,' Result: $'
  6. B     db  3 dup(0)            ; буфер
  7. S     db  6 dup(0),'$'        ; массив чисел маркером для fn.9)
  8.  
  9. start:
  10.    mov   ah,9            ; запрос на ввод чисел
  11.    mov   dx,mes0         ;
  12.    int   21h             ;
  13.  
  14.    mov   cx,6            ; макс.6 чисел
  15.    mov   di,S            ; адрес приёмника
  16.    mov   ah,8            ; ввод без эха средствами DOS
  17. input:                   ;
  18.    int   21h             ; сл.символ..
  19.    cmp   al,'0'          ; ингорируем всё,
  20.    jb    input           ;    ..кроме чисел
  21.    cmp   al,'9'          ;
  22.    ja    input           ;
  23.    stosb                 ; запись символа в DI
  24.    int   29h             ; вывод его на экран
  25.    loop  input           ; мотаем 6 раз..
  26. ;====================================================
  27.    mov   cx,3            ; сколько символов копировать
  28.    push  cx cx           ; запомним..
  29.    mov   si,S            ; источник
  30.    mov   di,B            ; приёмник
  31.    rep   movsb           ; скопировали первую триаду в буфер
  32.    pop   cx              ; восстановили СХ
  33.    mov   di,S            ; приёмник = источнику
  34.    rep   movsb           ; скопировали вторую триаду в первую
  35.    pop   cx              ;
  36.    mov   si,B            ; меняем источник на буфер
  37.    rep   movsb           ; скопировали первую триаду во-вторую
  38. ;====================================================
  39.    mov   ah,9            ; мессага
  40.    mov   dx,mes1         ;
  41.    int   21h             ;
  42.    mov   dx,S            ; выводим результат на экран
  43.    int   21h             ;
  44.  
  45. exit:                    ;
  46.    xor   ax,ax           ;
  47.    int   16h             ;
  48.    int   20h             ; выход

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.769 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы