Bob103

ASM_(4)

Dec 22nd, 2016
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .model small
  2. .stack 100h ;  сегмент стека
  3. .386 ;  разрещение трансляции команд процессора 386
  4. .data ; сегмент данных
  5. mas dw 20 dup (0); исходный массив
  6. result db 7 dup (?) ; число, которое будем выводить на экран
  7. nl DB 0Dh, 0Ah, '$' ; возврат каретки, перевод строки
  8. .code ; сегмент кода
  9. start:
  10. mov ax, @data; инициализациЯ сегментного
  11. mov ds,ax; регистра DS
  12. ; иницилизациЯ первой строки
  13. mov cx, 10; значение счетчика цикла
  14. mov bx, 3 ; добавление 3-х
  15. mov ax, 0 ;обнуление ax
  16. mov si, 0; индекс начального элемента в сх
  17. call init; вызов процедуры длЯ инциализации первых 10 эл
  18.  
  19. ; иницилизациЯ второй строки
  20. mov cx,10; значение счетчика цикла
  21. mov si, 20; индекс начального элемента
  22. mov ax, 5 ; первый эл. квадрат 3-ки
  23. call init2; вызов процедуры длЯ инциализации сл.10 эл.
  24.  
  25. mov si, 0; переход к 1-му элементу;
  26. mov cx, 2; кол-во строк
  27. show1: ; цикл вывода эл. массива на экран
  28. push cx
  29. mov cx,10; кол-во столбцов
  30. show2:
  31. mov ax, mas[si]; значние эл. массива помещаетсЯ в
  32. mov bl, 10; основание системы счислениЯ
  33. call byte_asc; вызов функции преобразованиЯ числа в строку
  34. mov ah, 09h ; вывод символа
  35. mov dx, offset result; вывод на экран строки
  36. int 21h
  37.  
  38. mov di,0 ; обнуление di
  39. masnull:
  40. mov result[di],0 ; обнуление result
  41. inc di ; счетчик
  42. cmp di,6 ; сравнение с 6
  43. jnz masnull ; если masnull не равно 0
  44.  
  45. add si,2; переход к сл.эл
  46. loop show2 ;повтор цикла
  47. pop cx  
  48. mov dx, offset nl
  49. int 21h
  50. loop show1 ;повтор цикла
  51. mov ax, 4C00h ;стандартный выход
  52. int 21h
  53.  
  54.  
  55. init proc
  56. go: add ax, bx; прибавление BX к
  57. mov mas [si], ax; запись результата умножениЯ в массив
  58. add si,2; переход к сл.элементу
  59. loop go; повтор цикла
  60. ret
  61. init endp
  62.  
  63. init2 proc
  64. go2:push ax
  65. mul ax; умножение предыдущего эл. на BX
  66. mov mas [si], ax; запись результата умножениЯ в массив
  67. add si,2; переход к сл.элементу
  68. pop ax ; извлекли ах
  69. add ax, 3 ; добавили к ах 3
  70. loop go2; повтор цикла
  71. ret
  72. init2 endp
  73.  
  74.  
  75. byte_asc proc; функциЯ преобразованиЯ числа  в строку
  76. pusha ;
  77. mov si, 5; максимальное кол-во цифр в числе
  78. one:
  79. mov dx,0 ; обнуление
  80. div bx; деление AX на BX
  81. add dl, 30h;преобразование числа в символ
  82. mov result[si], dl ; помещение результата
  83. dec si ; декрементировать
  84. cmp ax,0; сравнение Ђ• с нулем
  85. jnz one; если Ђ• не равно 0
  86. mov result[6], '$' ; конец строки
  87. popa ;
  88. ret
  89. byte_asc endp
  90. end start
Advertisement
Add Comment
Please, Sign In to add comment