Advertisement
Guest User

Untitled

a guest
Jan 4th, 2017
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.00 KB | None | 0 0
  1. .model small
  2. .stack 100h
  3. .code
  4. start:
  5. jmp continue ; оставить место для матрицы
  6. razmer equ 4
  7. matrix dw 1,2,3,4
  8. dw 5,6,7,8
  9. dw 9,10,11,12
  10. dw 13,14,15,16
  11. continue:
  12. push cs
  13. pop ds ; направляем ds на сегмент кода
  14. mov si,2 ; si - указывает на matrix[0][1]
  15. mov bx,razmer ; в bx - размер матрицы
  16. shl bx,1 ; bx=bx*2, то есть bx указывает на matrix[1][0]
  17. mov ax,bx ; в ax - смещение, равное длине строки
  18. mov cx,razmer ; в cx - razmer
  19. dec cx ; количество перестановок на 1 меньше, чем размер матрицы
  20. loop1: ; внешний цикл по строкам
  21. push cx ; сохранить cx в стеке
  22. loop2: ; внутренний цикл по столбцам (выше главной диагонали)
  23. mov dx,matrix[bx] ; в dx - элемент ниже диагонали
  24. mov di,matrix[si] ; в di - элемент выше диагонали
  25. mov matrix[bx],di ; переставляем их
  26. mov matrix[si],dx
  27. add si,2 ; смещаемся вправо
  28. add bx,ax ; смещаемся вниз
  29. loop loop2 ; цикл повторяется cx раз
  30. pop cx ; восстанавливаем сохраненное cx
  31. push ax ; сохраняем в стеке длину строки
  32. mov ax,razmer ; вычисляем, на сколько сместиться, чтобы оказаться
  33. sub ax,cx ; главной диагональю
  34. inc ax
  35. shl ax,1
  36. add si,ax ; смещаемся на matrix[i][i+1], i - номер очередного ци
  37. mov bx,si ; уставнавливаем bx на si
  38. pop ax ; восстанавливаем длину строки
  39. add bx,ax ; смещаем bx на строку вниз
  40. sub bx,2 ; и на 1 элемент назад
  41. loop loop1 ; цикл, пока cx != 0
  42. mov ah,4ch
  43. int 21h
  44. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement