|
|
|
по ассемблеру
|
|||
|---|---|---|---|
|
#18+
Приветствую, Уважаемые! Вот условие задачи: Написать программу на языке Ассемблера, которая позволяет ввести с клавиатуры массив из 6 целых чисел, поменять местами максимальный и минимальный элементы массива и вывести на экран полученный в результате массив. Вот мой примерный код к программе: .model small .stack 100h .data massiv dw 6 dup(?) msg1 db 0ah,0dh,"Vvodite chisla ",0ah,0dh,"$" msg2 db 0ah,0dh,"max = $" msg3 db 0ah,0dh,"min = $" c10 dw 10 .code start: mov ax,@data mov ds,ax mov ah,09h ; вывод приглашения для ввода чисел lea dx,msg1 int 21h mov di,0 ; в di - max mov si,32767 ; в si - min xor dx,dx ; в dx - очередное число input_loop: mov ah,01h ; ввод символа int 21h cmp al,0dh ; если enter je chislo ; то занести число в массив cmp al,20h ; если пробел je chislo ; то занести число в массив sub al,30h ; вычитаем '0' mov cl,al ; сохраняем цифру в cl mov ax,dx ; в ax - введенное число mul c10 ; умножаем на 10 xor ch,ch add ax,cx ; добавляем цифру из al mov dx,ax ; число снова в dx jmp input_loop chislo: mov bx,cx ; в bx - порядковый номер очередного числа shl bx,1 ; теперь - смещение очередного числа в массиве mov massiv[bx],dx ; записываем в массив число inc cx ; увеличиваем счетчик введенных чисел cmp dx,si ; сравниваем число с минимальным jb minimum ; если оно меньше, то jmp на minimum cmp dx,di ; сравниваем число с максиальным jg maximum ; если оно больше, то jmp на maximum jmp chislo_cont ; иначе jmp на chislo_cont minimum: mov si,dx ; запоминаем минимальное число в si jmp chislo_cont maximum: mov di,dx ; запоминаем максимальное число в di chislo_cont: xor dx,dx ; dx в ноль cmp cx,6 ; если ввели 6-ое число je end_input ; то конец ввода cmp al,0dh ; если был нажат enter je end_input ; то конец ввода jmp input_loop end_input: mov ah,09h ; вывод на экран msg2 lea dx,msg2 int 21h mov ax,di ; передаем в функцию output max через ax call output ; выводим это число lea dx,msg3 ; вывод на экран msg3 mov ah,9 int 21h mov ax,si ; передаем в ouptput min через ax call output ; выводим это число mov ah,4ch ; завершение программы int 21h output proc ; процедура вывода числа, находящегосы в ax xor cx,cx ; счетчик цифр div_loop: xor dx,dx ; подготовка к делению div c10 ; деление add dx,30h ; в dx - ASCII-код остатка от деления push dx ; сохраняем его в стеке inc cx ; инкремент счетчика cmp ax,0 ; деление, покуда частное не нулевое je out_loop jmp div_loop out_loop: ; цикл вывода числа pop dx ; извлекаем из стека очередной остаток mov ah,02h ; и выводим его на экран int 21h loop out_loop ; цикл продолжается cx раз xchg si,di ret output endp end start Просьба: пожалуйста подскажите есть ли ошибки в коде или недоработки. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2013, 20:27 |
|
||
|
по ассемблеру
|
|||
|---|---|---|---|
|
#18+
doink111Просьба: пожалуйста подскажите есть ли ошибки в коде или недоработки. СпасибоЕсть. Этот код писал не ты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2013, 20:28 |
|
||
|
по ассемблеру
|
|||
|---|---|---|---|
|
#18+
Интересно зачем непрофильным ВУЗам мучать детей ассемблером? Препод - садист и олдфаг наверное.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2013, 01:55 |
|
||
|
по ассемблеру
|
|||
|---|---|---|---|
|
#18+
всем спасибо. я понял, что смысла больше искать помощь на форумах нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2013, 22:28 |
|
||
|
по ассемблеру
|
|||
|---|---|---|---|
|
#18+
Попробуй http://wasm.ru/ (если он заработает). Или http://cyberforum.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2013, 22:43 |
|
||
|
по ассемблеру
|
|||
|---|---|---|---|
|
#18+
doink111всем спасибо. я понял, что смысла больше искать помощь на форумах нет. Интересные нынче люди пошли. Значит зарегался на форуме и первое же сообщение "пожалуйста подскажите есть ли ошибки в коде или недоработки". То есть код написал, а на работоспособность проверить не можешь?! Отсюда вывод: White OwlЭтот код писал не ты. А потому, никому не хочется этот код бесплатно проверять (первую часть работы ты взял откуда-то, а вторую просишь доделать вместо тебя). Дак ладно ещё если бы код был хоть как-то структурирован, а то ведь это простыня... обычная простыня букв. Ну уж по теме, как уже сказал, недоработка кода в том, что его даже читать влом, не говоря о том, что бы править или ещё что-то делать. Даже на асме придумали такую штуку как процедура (подпрограмма). И не только для того, что бы одну большую простыню разделить на две, а для того, что бы не писать то же самое по 5 раз и что бы логически разделить программу на несколько блоков. Кстати, спорим, что половина тех, кто мельком посмотрел код, даже не заметили, что в нём есть процедура. А ещё, никто не отменял отступы и разделение энтерами подблоков (ну. для более простого чтения). Комментарии просто порадовали. Сам то не очень умею их писать, а тут вообще перебор: mov di,0 ; в di - max mov si,32767 ; в si - min ///// нет, я то конечно понимаю, что это подготовка для записи указанных чисел в указанные регистры, однако не зная задачи этого кода я фиг бы догадался почему 0 - это max xor dx,dx ; в dx - очередное число //// фига.. очередное число - это 0??!!! просто с толку сбивает, вообще не понял зачем этот коммент тут Ну, это так, среди прочего. P.S. Если бы код был нормально написан, думаю реально кто-нить помог бы. Я даже ради прикола сам хотел код нормальный написать для примера "как надо", но фишка в том, что у меня линукс, а разные там виртуалки для использования dos прерываний мне ставить не хотелось. Потому помучил онлайн компиляторы и прекратил (они тоже не захотели дос прерывания отрабатывать) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2013, 23:18 |
|
||
|
по ассемблеру
|
|||
|---|---|---|---|
|
#18+
Думаю можно закрывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2013, 23:35 |
|
||
|
по ассемблеру
|
|||
|---|---|---|---|
|
#18+
8086 асмом эти изверги долго собираются студентов мучить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2013, 23:46 |
|
||
|
по ассемблеру
|
|||
|---|---|---|---|
|
#18+
Некоторые мучают самопальным асмом "учебной" виртуальной машины о 3-4 регистрах, включая указатели инструкции и стека. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2013, 23:51 |
|
||
|
по ассемблеру
|
|||
|---|---|---|---|
|
#18+
maytonКнут что-ли? А на курсе сравнительного языкознания студенты сами сочиняют ассемблеры, пишут для них компиляторы а препод с лаборантами потом мучаются и думают какую оценку поставить... И только треть студентов вообще делает ассемблеры с регистрами... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2013, 01:33 |
|
||
|
по ассемблеру
|
|||
|---|---|---|---|
|
#18+
Люди, зацените :) Насколько плохо для человека с ... ну наверное двухнедельным опытом (asm учил месяца 2, да и то половину времени архитектуру компов осваивал и другие премудрости)? int 80 (syscalls) вызывал намеренно только те, аналоги которых есть в досе :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2013, 04:07 |
|
||
|
по ассемблеру
|
|||
|---|---|---|---|
|
#18+
Програмёр...int 80 (syscalls) вызывал намеренно... ну и это не 86 азм :) возможно формат вэб странички поехал, но обычно метки прижимают влево, отступ у команд в один столбец (это не си :) ) И можно для разделения логических шагов отделять строчки пустым коментарием(он может быть подсвечен вашим редактором - легче глаз видит). Так-же комментнутой строчкой минусов можно отделять подпрограммки, описалово к ним. Описалово к подпрограммкам лучше оформлять ввиде: ;-------------- ; (in) ebx - смещение до секретного кода ;-- ; (used) eax - супер нужный регистр ;-- ; (out) нет правда если потом менять регистры - то замучаешься подправлять описалов (если программка очень и очень большая), если заточка на оптимизацию и каждый регистр на счету. ну это так - больше косметика... (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2013, 03:34 |
|
||
|
по ассемблеру
|
|||
|---|---|---|---|
|
#18+
kolobok0Програмёр...int 80 (syscalls) вызывал намеренно... ну и это не 86 азм :) возможно формат вэб странички поехал, но обычно метки прижимают влево, отступ у команд в один столбец (это не си :) ) И можно для разделения логических шагов отделять строчки пустым коментарием(он может быть подсвечен вашим редактором - легче глаз видит). Так-же комментнутой строчкой минусов можно отделять подпрограммки, описалово к ним. Описалово к подпрограммкам лучше оформлять ввиде: ;-------------- ; (in) ebx - смещение до секретного кода ;-- ; (used) eax - супер нужный регистр ;-- ; (out) нет правда если потом менять регистры - то замучаешься подправлять описалов (если программка очень и очень большая), если заточка на оптимизацию и каждый регистр на счету. ну это так - больше косметика... (круглый) асм тот, который в сети нашёлся :) Да в принципе все они одинаковы, синтаксис немного отличается и всё. Это же транслируемый язык, а не компилируемый, потому кроме синтаксиса особых различий иметь не может. Ну так мы и обсуждаем изначально косметику кода (ведь проблема автора в том, что в его коде даже разбираться не захотели, а я просто пример накатал от нечего делать, подумал надо вспомнить этот чудо язык немножко). Насчёт комментов, согласен. Оформил не лучшим образом, возьму на заметку :) По поводу отступов... У меня глаз отступ в 1 символ не очень улавливает (привык видимо уже), и когда в один символ, а не в 2, сложно глазами проследить что во что вложено и какой уровень вложенности. Так что, это на любителя наверное :) А по поводу меток? Я подумал так будет удобнее, ведь если метка - это точка входа в цикл, то ведь удобнее видеть, где этот цикл и к чему он относится. А то, если например у нас будет 3 вложенных цикла, то получится что-то типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Как по мне сложно понять что в чём :) Да и с функциями перепутать можно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2013, 05:59 |
|
||
|
по ассемблеру
|
|||
|---|---|---|---|
|
#18+
ПрограмёрЭто же транслируемый язык, а не компилируемый, потому кроме синтаксиса особых различий иметь не может.Это что за чушь? Во первых, любой язык компилируемый. Во вторых, различий кроме синтаксиса в разных асмах - множество. ПрограмёрНу так мы и обсуждаем изначально косметику кода (ведь проблема автора в том, что в его коде даже разбираться не захотели,В его не захотели разбираться вовсе не по причинам косметики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2013, 07:11 |
|
||
|
по ассемблеру
|
|||
|---|---|---|---|
|
#18+
White OwlВо первых, любой язык компилируемый. Ладно, это пропустим, мы о разном просто. Тут спорить можно вечно, ведь это терминология, не более. Учитывая, что перевод с ассемблера на язык машинных кодов называют трансляцией, а сам компилятор называют транслятором... В общем тот же процесс перевода кода в машинные кода называется компиляцией, потому и Вы тут разумеется правы. Я имел ввиду лишь то, что если команды переводятся 1 к 1, то как не крути, поменять можно только синтаксис этой команды. White OwlВо вторых, различий кроме синтаксиса в разных асмах - множество Пример можно? Чем они друг от друга отличаются кроме синтаксиса и каких-то прибамбасов не относящихся к коду (в принципе это тоже часть синтаксиса, например наличие структур - это просто возможность вместо смещения писать имя атрибута)?! Соглашусь что не прав, если покажите (расскажите) чем ещё разные версии асма различаются. White OwlВ его не захотели разбираться вовсе не по причинам косметики. Ну... например для меня это было основной причиной :) Мне легче было весь код по новой написать, чем разбираться что там написано и приводить представленный код к нормальному виду. Если в отношении кого-то ошибся, сорри. )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2013, 08:35 |
|
||
|
по ассемблеру
|
|||
|---|---|---|---|
|
#18+
Програмёрчем ещё разные версии асма различаются. возможностями макрогенераторов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2013, 16:40 |
|
||
|
по ассемблеру
|
|||
|---|---|---|---|
|
#18+
ПрограмёрWhite OwlВо первых, любой язык компилируемый. Ладно, это пропустим, мы о разном просто. Тут спорить можно вечно, ведь это терминология, не более. Учитывая, что перевод с ассемблера на язык машинных кодов называют трансляцией, а сам компилятор называют транслятором...Когда ты не знаешь терминологию, ты говоришь глупости. Когда ты говоришь глупости - тебе перестают верить. Програмёр В общем тот же процесс перевода кода в машинные кода называется компиляцией, потому и Вы тут разумеется правы. Я имел ввиду лишь то, что если команды переводятся 1 к 1, то как не крути, поменять можно только синтаксис этой команды.Нет. Нет. Процесс перевода кода с одного языка на другой называется трансляцией. Компиляция это один из типов трансляции: трансляция в код который хранится как отдельная структура (или файл) передающаяся на выполнение какому-либо исполняющему устройству. Ассемблер не переводится один к одному в машинные кода. Существуют множество команд в разных ассемблерах транслирующиеся в несколько машинных кодов. Так же существуют ассемблерные команды не являющиеся аналогами машинных кодов. ПрограмёрWhite OwlВо вторых, различий кроме синтаксиса в разных асмах - множество Пример можно? Чем они друг от друга отличаются кроме синтаксиса и каких-то прибамбасов не относящихся к коду (в принципе это тоже часть синтаксиса, например наличие структур - это просто возможность вместо смещения писать имя атрибута)?! Соглашусь что не прав, если покажите (расскажите) чем ещё разные версии асма различаются.Ассемблеры делаются для процессоров. Процессоры разного типа порождают разные ассемблеры. Сравни хотя бы RISC vs CISC архитектуры. Да даже и в одной архитектуре - например i8080 породил Z80 и i8086. А ассемблеры для этих трех процессоров хоть и похожи (потому что CPU родственные), но в то-же время и очень разные. К тому-же для одного и того-же процессора можно сделать два разных ассемблера. Для линейки 80x86 существуют много разных ассемблеров не совместимых друг с другом. Например для линейки i80x86 существуют: masm (от Микрософта), tasm (от Борланда), gnu asm (от GNU), wasm (от Watcom).. и еще с пол дюжины про которые я не помню. На перечисленных я просто сам писал когда-то... ПрограмёрWhite OwlВ его не захотели разбираться вовсе не по причинам косметики. Ну... например для меня это было основной причиной :)Ты еще маленький. Когда новизна от восторга "я знаю команды ассемблера" пройдет ты начнешь искать в этих задачах изюминку, загадку. Что-то, что позволит твоим мозгам не засохнуть. И вот тогда, очередной ленивый студент будет раздражать а не умилять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2013, 22:07 |
|
||
|
по ассемблеру
|
|||
|---|---|---|---|
|
#18+
Програмёр....Чем они друг от друга отличаются кроме синтаксиса и каких-то прибамбасов не относящихся к коду (в принципе это тоже часть синтаксиса, например наличие структур - это просто возможность вместо смещения писать имя атрибута)?!... тут как бы уже прозвучало. но на кошках... азм - язык низкоуровневый. Единственная оговорка - это когда некие фирмы данным названием пытаются обозвать нечто другое (см. си бимоль и иже). Низкоуровневый - это значит, что 1) набор инструкций(самого железа) (и их мнемоник соответственно) отличается от железа к железу. Отличается как по кол-венному составу так и по функциональному. Например под 86 семейством вы найдёте деление. На многих современных МК вы деления не найдёте. 2) одна и та же мнемоническая комманда, на разных камнях будет кодироваться в разные коды самой железки. Причём кодироваться будут с учётом специфики этого железа. Как уже прозвучало есть коды железа выполняюие несколько команд за раз, и есть ещё сжатие команд, при записи их в исполняющей последовательности (всякие там thumb mode). 3) помимо операций внутри АЛУ, существует окружение (т.е. специфика работы с внешним миром) и переферия распологающаяся прямо на этом камне (МК всякие). Т.е. существуют различные команды влияющие на поведение на самую микросхему и взаимодействие с окружением. Например вызов прерывания(8086 семейство), общение с ПДП(ARM), прерывание от сторожевой собаки(МК), переключение рабочего блока регистров или обращение к расширенной или дополнительной памяти(51), переключение блока рабочей памяти(STM) и т.д. и т.п.. 4) азрядностью, составом и назначением регистров. и т.д. думаю продолжать можно долго. Хотелось бы отметить плюсы и минусы: минусы... 1) долгий процесс разработки 2) качество решения сильно зависит от знаний и умений программиста(ов), чей опыт возможно меньше чем многолетний опыт разработчиков компиляторов более высокоуровневых языков. 3) сильная зависимость от железа. плюсы... 1) т.к. не имеем универсальных функций и библиотек - решение (возможно) более оптимально по размеру и скорости. 2) можно задействовать низкоуровневую специфику железа. 3) что написал - сам дурак. т.е. нет программерских решений от третих лиц, позволяющих нечаянно, либо специально вносить искажения в исполняющуюся программу. ик (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2013, 03:28 |
|
||
|
по ассемблеру
|
|||
|---|---|---|---|
|
#18+
White Owl, Да, на разных архитектурах разные наборы команд, risc и cisc отличаются сильно. А как часто Вы программируете ПК с архитекруторой risc? что-то я не помню, что бы программирование на masm, tasm, nasm так сильно отличалось между собой. Вот взять представленный мной код:писал на nasm, но если бы решил писать на tasm (нашёл бы компилятор нужный), то отличие было бы только в определении подпрограмм (там есть понятие процедуры), адрес получал бы через offset, вместо times использовал бы конструкцию dup, а указание размерности превратилось бы с byte в byte ptr. (ну, это если я ещё не сильно забыл то, что когда-то учил). А разницы в том, запускал бы я это на AMD или на intel процессоре вообще не было бы. Вроде ничего не забыл? А как Вы охарактеризуете эти отличия? Я например считаю это небольшими отличиями в синтаксисе. P.S. Нет, я конечно понимаю, что если вкопаться очень глубоко и писать какие-то гигинтские продукты типа целых ОС, то отличия между AMD и intel будут и с ними придётся столкнуться... Но я что-то не слышал, что бы для этих двух процессоров создавались отдельные типы asm в корне отличающиеся друг от друга. Ведь если и есть какие-то отличия в наборе команд или ещё в чём, то они не на столько значительны. А если не использовать 64-битные регистры и операции связанные с ними (64-битные операции), то программа вообще становится универсальной, так как в 64-битных процессорах идёт полная обратная совместимость с 32-битными процессорами. P.P.S. "ты ещё маленький" - Вы имели ввиду молодой или "зелёный"? Если да, то Вы правы, я же говорил, что изучал ассемблер в целом на протяжении нескольких недель (мой профильный язык совсем другой) ))). Если же Вы о чём-то другом, тогда Ваши слова не имеют смысла :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2013, 09:50 |
|
||
|
по ассемблеру
|
|||
|---|---|---|---|
|
#18+
ПрограмёрДа, на разных архитектурах разные наборы команд, risc и cisc отличаются сильно. А как часто Вы программируете ПК с архитекруторой risc?Лично я - редко. Но бывает. Но редко. Но бывает. Но речь то о том что "ассемблеров много разных". А частота использования какого-то одного семейства ни как не влияет на существование этого семейства. Програмёрчто-то я не помню, что бы программирование на masm, tasm, nasm так сильно отличалось между собой. Вот взять представленный мной код:писал на nasm, но если бы решил писать на tasm (нашёл бы компилятор нужный), то отличие было бы только в определении подпрограмм (там есть понятие процедуры), адрес получал бы через offset, вместо times использовал бы конструкцию dup, а указание размерности превратилось бы с byte в byte ptr. (ну, это если я ещё не сильно забыл то, что когда-то учил).Тебе мало?! Сам перечисляешь кучу различий и продолжаешь считать это одним и тем же языком? ПрограмёрА как Вы охарактеризуете эти отличия? Я например считаю это небольшими отличиями в синтаксисе.Читай определение ЯП: "формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под её управлением." Обрати внимание: разный синтаксис - разные ЯП. masm-tasm можно называть родственными, но это разные языки. ПрограмёрP.S. Нет, я конечно понимаю, что если вкопаться очень глубоко и писать какие-то гигинтские продукты типа целых ОС, то отличия между AMD и intel будут и с ними придётся столкнуться... Но я что-то не слышал, что бы для этих двух процессоров создавались отдельные типы asm в корне отличающиеся друг от друга.Ну так AMD специально создавала свой процессор чтобы он повторял систему команд Intel'овского. Естественно что разница в ассемблерах для них будет нулевой. ПрограмёрP.P.S. "ты ещё маленький" - Вы имели ввиду молодой или "зелёный"?Ну а что-же еще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2013, 17:34 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38508642&tid=1341534]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
149ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 488ms |

| 0 / 0 |
