русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Быстрая вставка и исключение битовых строк.


Дата добавления: 2015-06-12; просмотров: 604; Нарушение авторских прав


Команды двойного смещения также делают возможным :

  • Быструю вставку битовой строки из регистра в произвольное местоположение бита в большей битовой строке в памяти, без нарушения битов по обеим сторонам от вставляемых битов.
  • Быстрое исключение битовой строки в регистр с произвольного местоположения в большей битовой строке в памяти, без нарушения битов по обеим сторонам от исключаемых битов.

Следующие примеры программ иллюстрируют вставку и исключение битов при различных условиях :

  1. Вставка битовой строки в память (когда битовая строка длиной от 1 до 25 бит, т.е. вставить 4 байта или меньше) :
2. ; Вставить выровненную по правому краю битовую строку из регистра3. ; в битовую строку в памяти.4. ;5. ; Допущения :6. ; 1. Основание массива строки выровнено по двойным словам.7. ; 2. Длина битовой строки задана непосредственно значением и8. ; битовое смещение содержится в регистре.9. ;10. ; Регистр ESI содержит выровненную по правому краю битовую11. ; строку, которую надо вставить.12. ; Регистр EDI содержит битовое смещение начальной позиции13. ; подстроки.14. ; Также используются регистры EAX и ECX.15. ;16. MOV ECX,EDI ; сохранить исходное смещение17. SHR EDI,3 ; разделить смещение на 8 (адрес байта)18. AND CL,7H ; получить три младших бита смещения19. MOV EAX,[EDI]strg_base ; переместить строку длиной в двойное20. ; слово в EAX21. RDR EAX,CL ; правое выравнивание поля старых22. ; битов23. SHRD EAX,ESI,длина ; получили новые биты24. ROL EAX,длина ; правое выравнивание поля новых битов25. ROL EAX,CL ; доставить в конечную позицию26. MOV [EDI]strg_base,EAX ; заменить двойное слово в памяти
  1. Вставка битовой строки в память (когда битовая строка длиной от 1 до 31 битa, т.е. вставить 5 байт или меньше) :
28. ; Вставить выровненную по правому краю битовую строку из регистра29. ; в битовую строку в памяти.30. ;31. ; Допущения :32. ; 1. База массива строки выровнена по двойным словам.33. ; 2. Длина битовой строки задана непосредственно значением и34. ; битовое смещение содержится в регистре.35. ;36. ; Регистр ESI содержит выровненную по правому краю битовую37. ; строку, которую надо вставить.38. ; Регистр EDI содержит битовое смещение начальной позиции39. ; подстроки.40. ; Также используются регистры EAX, EBX, ECX и EDI.41. ;42. MOV ECX,EDI ; временно сохранить смещение43. SHR EDI,5 ; разделить смещение на 32 (двойное44. ; слово)45. SHL EDI,2 ; умножить на 4 (адрес байта)46. AND CL,1FH ; получить пять младших битов смещения47. MOV EAX,[EDI]strg_base ; переместить младшую строку длиной в48. ; двойное слово в EAX49. MOV EDX,[EDI]strg_base+4 ; переместить оставшуюся строку50. ; длиной в двойное слово в EDX51. MOV EBX,EAX ; временное сохранение части строки52. SHRD EAX,EDX,CL ; смещение на заданное число бит53. ; внутри двойного слова54. 55. SHRD EAX,EBX,CL ; смещение на заданное число бит56. ; внутри двойного слова57. SHRD EAX,ESI,длина ; получили новые биты58. ROL EAX,длина ; правое выравнивание поля новых битов59. MOV EBX,EAX ; временное сохранение строки60. SHLD EAX,EDX,CL ; смещение на заданное число бит61. ; внутри слова62. SHLD EDX,EDX,CL ; смещение на заданное число бит63. ; внутри слова64. MOV [EDI]strg_base,EAX ; заменить двойное слово в памяти65. MOV [EDI]strg_base+4,EDX ; заменить двойное слово в памяти
  1. Вставка битовой строки в память (когда битовая строка длиной 32 битa, т.е. вставить 4 или 5 байт) :
67. ; Вставить выровненную по правому краю битовую строку из68. ; регистра в битовую строку в памяти.69. ;70. ; Допущения :71. ; 1. База массива строки выровнена по двойным словам.72. ; 2. Длина битовой строки 32 бита и битовое смещение73. ; содержится в регистре.74. ;75. 76. ; Регистр ESI содержит 32-битовую строку, которую надо вставить.77. ; Регистр EDI содержит битовое смещение начальной позиции78. ; подстроки.79. ; Также используются регистры EAX, EBX, ECX и EDI.80. ;81. MOV EDX,EDI ; сохранить исходное смещение82. SHR EDI,5 ; разделить смещение на 32 (двойное83. ; слово)84. SHL EDI,2 ; умножить на 4 (адрес байта)85. AND CL,1FH ; изолировать пять младших битов86. ; смещения87. MOV EAX,[EDI]strg_base ; переместить младшую строку длиной в88. ; двойное слово в EAX89. MOV EDX,[EDI]strg_base+4 ; переместить оставшуюся строку90. ; длиной в двойное слово в EDX91. MOV EBX,EAX ; временное сохранение части строки92. SHRD EAX,EDX ; смещение на заданное число бит93. ; внутри двойного слова94. SHRD EDX,EBX ; смещение на заданное число бит95. ; внутри двойного слова96. MOV EAX,ESI ; переместить 32-разрядное поле в97. ; положение98. MOV EBX,EAX ; временное сохранение части строки99. SHLD EAX,EDX ; смещение на заданное число бит100. ; внутри слова101. SHLD EDX,EBX ; смещение на заданное число бит102. ; внутри слова103. MOV [EDI]strg_base,EAX ; заменить двойное слово в памяти104. MOV [EDI]strg_base+4,EDX ; заменить двойное слово в памяти
  1. Изъятие битовой строки из памяти (когда битовая строка длиной от 1 до 25 бит, т.е. изъять 4 байта или меньше) :
106. ; Изъять выровненную по правому краю битовую строку в регистр107. ; из битовой строки в память.108. ;109. ; Допущения :110. ; 1. База массива строки выровнена по двойным словам.111. ; 2. Длина битовой строки задана непосредственно значением и112. ; битовое смещение содержится в регистре.113. ;114. ; Регистр EAX содержит выровненную по правому краю дополненную115. ; нулями битовую строку, которую надо изъять.116. ; Регистр EDI содержит битовое смещение начальной позиции117. ; подстроки.118. ; Также используются регистры EDI и ECX.119. ;120. MOV ECX,EDI ; временное сохранение смещения121. SHR EDI,3 ; разделить смещение на 8 (адрес байта)122. AND CL,7H ; получить три младших бита смещения123. MOV EAX,[EDI]strg_base ; переместить строку длиной в двойное124. ; слово в EAX125. SHR EAX,CL ; смещение на заданное количество126. ; битов внутри двойного слова127. AND EAX,маска ; изъять битовое поле в EAX
  1. Изъятие битовой строки из памяти (когда битовая строка длиной от 1 до 32 бит, т.е. изъять 5 байт или меньше) :
129. ; Изъять выровненную по правому краю битовую строку в регистр130. ; из битовой строки в памяти.131. ;132. ; Допущения :133. ; 1. База массива строки выровнена по двойным словам.134. ; 2. Длина битовой строки задана непосредственно значением и135. ; битовое смещение содержится в регистре.136. ;137. ; Регистр EAX содержит выровненную по правому краю дополненную138. ; нулями битовую строку, которую надо изъять.139. ; Регистр EDI содержит битовое смещение начальной позиции140. ; подстроки.141. ; Также используются регистры EAX, EBX и ECX.142. ;143. MOV ECX,EDI ; временно сохранить смещение144. SHR EDI,5 ; разделить смещение на 32 (двойное145. ; слово)146. SHL EDI,2 ; умножить на 4 (адрес байта)147. AND CL,1FH ; получить пять младших битов смещения148. MOV EAX,[EDI]strg_base ; переместить младшую строку длиной в149. ; двойное слово в EAX150. MOV EDX,[EDI]strg_base+4 ; переместить оставшуюся строку151. ; длиной в двойное слово в EDX152. SHRD EAX,EDX,CL ; смещение на заданное число бит153. ; внутри двойного слова154. SHRD EAX,EDX,CL ; смещение на заданное число бит155. ; внутри двойного слова156. AND EAX,маска ; изъять битовое поле в EAX


<== предыдущая лекция | следующая лекция ==>
Koманды циклического сдвига. | Команда перехода


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.081 сек.