Система команд микропроцессорного ядра MicroBlaze

№ 1’2004
PDF версия
В предыдущей публикации цикла была дана общая характеристика и рассмотрена архитектура семейства микропроцессорных ядер MicroBlaze, которые предназначены для применения в проектах, реализуемых на базе ПЛИС серии FPGA фирмы Xilinx.

В предыдущей публикации цикла была дана общая характеристика и рассмотрена архитектура семейства микропроцессорных ядер MicroBlaze, которые предназначены для применения в проектах, реализуемых на базе ПЛИС серии FPGA фирмы Xilinx [1]. Продолжая тему, настоящая статья представляет подробное описание системы команд этих ядер.

Общая характеристика команд MicroBlaze

В системе команд микропроцессорного ядра MicroBlaze при классификации по функциональному признаку можно выделить девять групп инструкций. К первой группе относятся инструкции, предназначенные для выполнения основных арифметических операций. В эту группу входят команды сложения, вычитания, умножения, деления и сравнения двух 32-разрядных операндов. Значение одного из операндов, участвующих в арифметических операциях, содержится в регистре общего назначения, номер которого указан в команде. В качестве второго операнда может использоваться значение, заданное непосредственно в коде команды, или содержимое другого регистра общего назначения.

Вторую группу образуют логические инструкции. Эти команды выполняют поразрядные операции «Логическое И» (поразрядное умножение), «Логическое ИЛИ» (поразрядное сложение), «Исключающее ИЛИ». В качестве операндов могут выступать значения содержимого двух регистров общего назначения, а также содержимое любого регистра общего назначения и константа, указанная в тексте команды.

В третью группу входят команды сдвига. Они позволяют реализовать операции арифметического или циклического сдвига данных, записанных в регистре общего назначения, номер которого указан в тексте команды. В этой группе предусмотрены инструкции, предназначенные для осуществления сдвига данных как в сторону младшего разряда, так и в направлении старшего разряда.

В процессе выполнения одной команды сдвиг может производиться как на один, так и на несколько разрядов. Операции циклического и арифметического сдвига данных могут выполняться с использованием разряда переноса регистра статуса или без его участия.

Четвертую группу составляют инструкции преобразования типов данных. Команды этой группы предназначены для реформирования данных различной длины до 32-разрядного значения. Как правило, для этих целей используется операция знакового расширения.

Пятая группа включает в себя команды передачи данных. В нее входят инструкции, используемые для пересылки данных различной длины из памяти в регистры общего назначения и, наоборот, из регистра в ячейки памяти. Передача данных может осуществляться в форме 32-разрядных значений (слов), 16-разрядных значений (полуслов) и 8-разрядных значений (байт).

Шестая группа объединяет инструкции, предназначенные для управления последовательностью выполнения команд в программе. К этой группе относятся инструкции переходов, а также команды возврата из подпрограмм и процедур обслуживания прерываний. Инструкции передачи управления в программе представлены как в безусловной форме, так и в условных вариантах (то есть исполнение команды возможно только при выполнении определенного условия).

В седьмую группу входят инструкции ввода-вывода. Эти команды предназначены для организации обмена данными между регистрами общего назначения и входными-выходными интерфейсами, соответствующими спецификации FSL (Fast Simplex Link). Для каждого режима чтения данных, поступающих через входной интерфейс FSL, предусмотрены соответствующие версии инструкций, которые используются для записи считанной информации в выбранный регистр общего назначения. Несколько вариантов команд вывода позволяют реализовать различные режимы передачи данных из любого регистра общего назначения через выходной интерфейс FSL.

Восьмую группу образуют специальные команды. Эти инструкции выполняют операции чтения информации из регистра статуса и записи ее в регистр общего назначения, а также записи содержимого выбранного регистра общего назначения в регистр состояния.

Последняя группа объединяет команды, используемые для работы с кэш-памятью. В нее входят инструкции записи в кэш-память данных и в кэш-память команд.

Форматы команд поддерживаемых микропроцессорным ядром MicroBlaze

В системе команд микропроцессорного ядра MicroBlaze используется в основном два типа формата инструкций. Структура этих вариантов форматов команд показана на рис. 1. Длина всех инструкций, независимо от типа формата, составляет тридцать два двоичных разряда.

Рис. 1. Основные варианты форматов команд, поддерживаемых микропроцессорным ядром MicroBlaze

Команды, которые относятся к первому типу формата (типу А), включают в себя пять полей. Первые четыре поля инструкции являются основными, а последнее — вспомогательным. Основными полями инструкций типа А являются:

  • поле кода операции;
  • поле номера регистра общего назначения, предназначенного для записи результатавыполняемой операции;
  • поле номера регистра, содержащего значение первого операнда;
  • поле номера регистра, содержащего значение второго операнда.

Длина поля кода операции составляет пять двоичных разрядов. Поля команды, используемые для записи номеров регистров, содержат по пять разрядов. Вспомогательное поле, длина которого составляет одиннадцать разрядов, может использоваться для указания дополнительных параметров команды, например, типа операндов. Если дополнительные параметры в инструкции не требуются, то это поле заполняется нулевыми разрядами.

Команды, принадлежащие ко второму типу формата (типу В), состоят из четырех полей, первые три из которых выполняют те же функции и имеют ту же длину, что и в инструкциях типа А:

  • поле кода операции;
  • поле номера регистра, предназначенного для записи результата выполняемой операции;
  • поле номера регистра, содержащего значение первого операнда;
  • поле значения второго операнда, указываемого непосредственно в инструкции.

Как видно из рис. 1, формат команд, относящихся к типу В, позволяет указывать непосредственно в составе инструкции значение 16-разрядной константы. При этом в качестве операнда обычно используется результат знакового расширения этого значения до 32-разрядного слова. Для того чтобы получить непосредственное 32-разрядное значение операнда, в системе команд микропроцессорного ядра MicroBlaze предусмотрена специальная инструкция расширения IMM. Эта команда позволяет использовать в последующей инструкции типа В 32-разрядное значение константы.

Группа арифметических команд

Арифметические команды микропроцессорного ядра MicroBlaze обеспечивают выполнение операций сложения, вычитания, умножения, деления и сравнения над двумя 32-разрядными операндами. Первым параметромв арифметической команде всегда является номер одного из регистров общего назначения, который используется для записи результата выполняемой операции. В качестве номера регистра может использоваться любое число в диапазоне от 1 до 31. Второй параметр определяет номер регистра общего назначения, который содержит значение первого операнда. В роли второго операнда может выступать константа, значение которой задается непосредственно в коде команды, или содержимое любого регистра общего назначения.

Таким образом, третий параметр арифметической команды определяет значение константы или номер регистра, содержимое которого используется в качестве второго операнда.

В системе команд микропроцессорного ядра MicroBlaze представлены восемь вариантов инструкций, предназначенных для выполнения операций сложения. Для вычисления суммы двух 32-разрядных слагаемых без учета переноса используются инструкции ADD, ADDK, ADDI и ADDIK, форматы которых представлены в таблице 1.

Таблица 1. Форматы команд сложения двух операндов без учета переноса

Команды ADD Rd,Ra,Rb и ADDK Rd,Ra,Rb выполняют сложение содержимого двух регистров общего назначения с номерами a и b без учета переноса. Инструкции ADDI Rd,Ra, Imm и ADDIK Rd,Ra,Imm предназначены для суммирования без учета переноса содержимого регистра общего назначения с номером a и значения, которое является результатом знакового расширения 16-разрядной константы Imm до 32-разрядного слова. Если инструкции ADDI или ADDIK предшествует команда IMM, то указанное в ней значение используется в качестве 16 старших разрядов второго слагаемого. Значение суммы, полученное в результате выполнения рассмотренных команд, записывается в регистр с номером d. После исполнения команд сложения ADD и ADDI флаг переноса (займа) Carry Flag (29-й разряд регистра статуса) устанавливается в состояние высокого логического уровня в том случае, если в результате выполненной операции происходит перенос из самого старшего разряда. В противном случае этот флаг переключается в сброшенное состояние (низкого логического уровня). В отличие от команд ADD и ADDI инструкции ADDK и ADDIK позволяют реализовать аналогичные операции, не изменяя при этом состояние флага переноса (займа) Carry Flag. Рисунок 2 в наглядной форме поясняет выполнение операций сложения без учета переноса.

Рис. 2. Выполнение операций сложения двух операндов без учета переноса

Сложение двух операндов с учетом переноса, полученного при выполнении предыдущей операции, производится с помощью команд ADDC, ADDKC, ADDIC и ADDIKC, форматы которых приведены в таблице 2.

Таблица 2. Форматы команд сложения двух операндов с учетом переноса

Команды ADDC Rd,Ra,Rb и ADDKC Rd,Ra,Rb используются для вычисления суммы содержимого двух регистров общего назначения с номерами a и b с учетом состояния флага переноса перед выполнением этой операции.

Команды ADDIC Rd,Ra,Imm и ADDIKC Rd,Ra,Imm суммируют значение содержимого регистра с номером a с результатом знакового расширения 16-разрядной константы Imm, указанной непосредственно в инструкции, до 32-разрядного слова. Чтобы использовать в качестве второго слагаемого 32-разрядную константу, следует перед командой ADDIC или ADDIKC поместить инструкцию IMM. Для записи результата вычислений, выполняемых с помощью команд ADDC, ADDKC, ADDIC и ADDIKC, используется регистр общего назначения с номером d. Процесс выполнения команд сложения двух операндов с учетом переноса отображен на рис. 3.

Рис. 3. Осуществление операций сложения двух операндов с учетом переноса

При выполнении команд ADDC и ADDIC итоговое состояние флага переноса (займа) Carry Flag в регистре статуса зависит от полученного результата. При возникновении в результате операции сложения переноса из самого старшего разряда этот флаг переключается в установленное состояние (высокого логического уровня). При отсутствии переноса из самого старшего разряда в итоговой сумме флаг переноса (займа) сбрасывается в состояние низкого логического уровня. Инструкции ADDKC и ADDIKC выполняют операции сложения двух операндов с учетом переноса, сохраняя при этом исходное состояние флага переноса (займа).Для выполнения операций вычитания предусмотрены восемь вариантов инструкций. Вычисление разности двух операндов без учета займа выполняется с помощью инструкций RSUB, RSUBK, RSUBI и RSUBIK, форматы которых представлены в таблице 3.

Таблица 3. Форматы команд вычитания двух операндов без учета займа

Для получения разности содержимого двух регистров общего назначения с номерами b и a следует использовать команды RSUB Rd,Ra,Rb и RSUBK Rd,Ra,Rb. Команды RSUBI Rd,Ra,Imm и RSUBIK Rd,Ra,Imm позволяют вычесть значение содержимого регистра с номером a из значения, полученного в результате знакового расширения константы Imm, указанной непосредственно в инструкции, до 32-разрядного слова. Если команде RSUBI или RSUBIK предшествует инструкция IMM, то в качестве первого операнда используется 32-разрядное слово, состоящее из двух 16-разрядных значений, указанных в этих командах. При использовании рассмотренных инструкций вычитания следует обратить внимание на то, что результаты выполнения команд RSUBK и RSUBIK, в отличие от инструкций RSUB и RSUBI, не оказывают влияния на состояние флага переноса (займа). Рисунок 4 демонстрирует выполнение команд вычитания без учета займа.

Рис. 4. Вычисление разности двух операндов без учета займа

Для вычисления разности двух операндов с учетом значения займа, образовавшегося при выполнении предыдущей операции, предназначены инструкции RSUBC, RSUBKC, RSUBIC и RSUBIKC. Информация о форматах этих команд содержится в таблице 4.

Таблица 4. Форматы команд вычитания двух операндов с учетом займа

Команды RSUBIC Rd,Ra,Imm и RSUBIKC Rd,Ra,Imm выполняют вычитание значений содержимого регистра с номером a с участием флага займа из операнда, который является результатом знакового расширения 16-разрядной константы Imm, указанной непосредственно в инструкции, до 32-разрядного слова. Для использования в этих командах в качестве первого операнда 32-разрядной константы следует непосредственно перед ними вставить инструкцию IMM, которая определяет старшие шестнадцать разрядов слова. Вычисление разности содержимого двух регистров общего назначения с номерами b и a с участием значения флага займа производится с помощью команд RSUBC Rd,Ra,Rb и RSUBKC Rd,Ra,Rb. Для записи результата вычислений, выполняемых с помощью команд вычитания, используется регистр общего назначения с номером d, который указывается в качестве первого параметра этих инструкций.

После выполнения команд вычитания с учетом займа RSUBC и RSUBIC состояние флага переноса (займа) регистра статуса изменяется в зависимости от полученного результата.

Инструкции RSUBKC и RSUBIKC применяются в том случае, когда при выполнении операции вычитания с учетом займа необходимо сохранить исходное состояние флага переноса (займа). Рисунок 5 иллюстрирует выполнение операций вычитания с учетом займа.

Инструкции умножения поддерживаются только теми элементами семейства микропроцессорных ядер MicroBlaze, которые реализуются на основе ПЛИС, имеющих в своем составе встроенный аппаратный умножитель. Для выполнения операций умножения двух 32-разрядных операндов предусмотрены две разновидности инструкций, форматы которых представлены в таблице 5.

Таблица 5. Форматы команд умножения двух операндов

Команда MUL Rd,Ra,Rb предназначена для перемножения содержимого двух регистров общего назначения с номерами b и a. В инструкции MULI Rd,Ra,Imm первым сомножителем является значение содержимого регистра с номером a. В качестве второго сомножителя выступает значение, полученное в результате знакового расширения 16-разрядной константы Imm, которая задается непосредственно в инструкции, до 32-разрядного слова. Если инструкции MULI предшествует команда IMM, то указанное в ней значение используется в качестве 16 старших разрядов второго сомножителя. Результат применения команд умножения MUL и MULI представляет собой 64-разрядное значение. Старшие 32 разряда произведения отбрасываются, а младшие записываются в регистр общего назначения с номером d, который указывается в качестве первого параметра инструкций умножения. Осуществление операций умножения двух операндов показано на рис. 6. Обозначение LSW (Least Significant Word), используемое на этом рисунке, соответствует процедуре выделения последнего (младшего) 32-разрядного слова в значении результата операции.

Рис. 6. Выполнение операций умножения двух операндов

Система команд семейства микропроцессорных ядер MicroBlaze содержит два варианта команд целочисленного деления, которые доступны только элементам, реализуемым на основе кристаллов FPGA, обладающих встроенными аппаратными умножителями. При этом в процессе описания конфигурации ядра должна быть указана опция использования встроенного аппаратного делителя. Форматы команд целочисленного деления IDIV и IDIVU приведены в таблице 6.

Таблица 6. Форматы команд целочисленного деления двух операндов

В качестве делимого в обоих вариантах инструкций деления выступает содержимое регистра общего назначения с номером b, который указывается в форме последнего параметра команд. Делителем является значение содержимого регистра с номером a, который задается в виде второго параметра инструкций. При использовании команды IDIV Rd,Ra,Rb содержимое регистров b и a интерпретируется как целое число со знаком. В инструкции IDIVU Rd,Ra,Rb значения делимого и делителя представляют собой целые числа без знака. Результат выполнения операции деления сохраняется в регистре с номером d, который определяется значением первого параметра инструкций IDIV и IDIVU.

Если содержимое регистра делителя представляет собой нулевое значение, то флаг деления на ноль Divide_By_Zero Flag (25-й разряд регистра статуса) устанавливается в состояние высокого логического уровня. При этом в регистр, предназначенный для записи результата, заносится нулевое значение. В случае, когда значение делителя отличается от нуля, флаг Divide_By_Zero Flag находится в сброшенном состоянии. Рисунок 7 иллюстрирует выполнение операций целочисленного деления.

Рис. 7. Осуществление операций целочисленного деления

К группе арифметических команд относятся также инструкции сравнения двух целочисленных операндов CMP и CMPU. Информация о форматах этих команд содержится в таблице 7.

Таблица 7. Форматы команд сравнения двух целочисленных операндов

Инструкции CMP Rd,Ra,Rb и CMPU Rd,Ra,Rb предназначены для сравнения значений содержимого регистров общего назначения с номерами a и b. Результат выполнения операции сравнения заносится в регистр с номером d. Различие инструкций CMP и CMPU заключается в типе сравниваемых операндов. При выполнении команды CMP Rd,Ra,Rb значения содержимого регистров a и b воспринимаются как целые числа со знаком. При использовании команды CMPU Rd,Ra,Rb содержимое регистров a и b интерпретируется как целочисленные значения без знака. Фактически инструкции сравнения выполняют операцию вычитания содержимого регистра a из содержимого регистра b, результат которой записывается в регистр d. Если значения содержимого регистров с номерами a и b равны, то в регистр d заносится нулевое значение. Когда сравниваемые операнды не равны, результат выполнения команд CMP и CMPU отличен от нуля.

При этом информация о соотношении величин содержимого регистров с номерами a и b содержится в старшем (знаковом) разряде регистра d. Рисунок 8 поясняет процесс выполнения инструкций сравнения двух целочисленных операндов.

Рис. 8. Выполнение инструкций сравнения двух целочисленных операндов

Группа логических команд

В командах, входящих в эту группу, используются три параметра, из которых два последних определяют значения операндов. Первым операндом в логических операциях всегда является содержимое регистра общего назначения, номер которого указывается в виде второго параметра команды. В роли второго операнда может выступать либо содержимое другого регистра общего назначения, либо результат знакового расширения до 32 разрядов 16-разрядной константы, значение которой указывается непосредственно в коде инструкции. При мнемонической форме записи команд номер второго регистра и значение константы задается в форме третьего параметра. Чтобы использовать в качестве второго операнда 32-разрядную константу, следует перед соответствующей логической командой поместить инструкцию IMM. Результат выполнения логической операции записывается в регистр общего назначения, номер которого определяет первый параметр инструкции.Форматы команд поразрядных операций «Логическое И» (поразрядное умножение) представлены в таблице 8.

Таблица 8. Форматы команд поразрядных операций «Логическое И»

Для поразрядного умножения содержимого двух регистров общего назначения с номерами a и b предназначена команда AND Rd,Ra,Rb. Команда ANDI Rd,Ra,Imm выполняет операцию «Логическое И» над соответствующими разрядами содержимого регистра с номером a и значения, полученного в результате знакового расширения константы Imm до 32-разрядного слова. Рисунок 9 поясняет процесс выполнения этих команд.

Рис. 9. Выполнение поразрядных операций «Логическое И»

Кроме того, в системе команд микропроцессорного ядра MicroBlaze присутствует еще одна разновидность инструкций, реализующих операцию «Логическое И» с инверсией второго операнда. Форматы этих команд приведены в таблице 9.

Таблица 9. Форматы команд поразрядных операций «Логическое И» с инверсией второго операнда

Инструкция ANDN Rd,Ra,Rb используется для поразрядного умножения содержимого регистра с номером a и инвертированного значения содержимого регистра с номером b.

Команда ANDNI Rd,Ra,Imm предназначена для выполнения поразрядной операции «Логическое И» над содержимым регистра с номером a и инвертированного значения, полученного в результате знакового расширения константы Imm до 32-разрядного слова.

Выполнение команд ANDN и ANDNI иллюстрирует рис. 10.

Рис. 10. Выполнение поразрядных операций «Логическое И» с инверсией второго операнда

Операции поразрядного сложения двух операндов осуществляются с помощью инструкций OR и ORI, форматы которых определены в таблице 10.

Таблица 10. Форматы команд поразрядных операций «Логическое ИЛИ»

Команда ORI Rd,Ra,Imm выполняет поразрядную операцию «Логическое ИЛИ» содержимого регистра с номером a и значения, являющегося результатом знакового расширения константы Imm до 32-разрядного слова. Поразрядное сложение содержимого двух регистров общего назначения с номерами a и b реализует команда OR Rd,Ra,Rb. Последовательность выполнения операций «Логическое ИЛИ» показана на рис. 11.

Рис. 10. Выполнение поразрядных операций «Логическое И» с инверсиейвторого операнда

Форматы инструкций XOR и XORI, предназначенных для выполнения поразрядной операции «Исключающее ИЛИ», представлены в таблице 11.

Таблица 11. Форматы команд поразрядных операций «Исключающее ИЛИ»

Инструкция XORI Rd,Ra,Imm выполняет поразрядную операцию «Исключающее ИЛИ», в которой участвует содержимое регистра с номером a и значение, полученное в результате знакового расширения константы Imm до 32-разрядного слова. Команда XOR Rd,Ra,Rb осуществляет аналогичную операцию, операндами которой является содержимое двух регистров общего назначения с номерами a и b. Выполнение поразрядных операций «Исключающее ИЛИ» демонстрирует рис. 12.

Рис. 12. Выполнение поразрядных операций «Исключающее ИЛИ»

Литература

  1. Зотов В.
    PicoBlaze — семейство восьмиразрядных микропроцессорных ядер, реализуемых на основе ПЛИС фирмы Xilinx.//
    Компоненты и технологии» № 4 2003.
  2. Зотов В.
    Система команд микропроцессорного ядра PicoBlaze, реализуемого на основе ПЛИС семейств Spartan-II, Spartan-IIE, Virtex, Virtex-E //
    Компоненты и технологии» № 5 2003
  3. Зотов В.
    Особенности микропроцессорного ядра PicoBlaze, предназначенного для применения в проектах, реализуемых на основе ПЛИС семейства Virtex-II // Компоненты и технологии. 2003. № 6.
  4. Зотов В.
    Особенности микропроцессорного ядра PicoBlaze, предназначенного для применения в проектах, реализуемых на основе ПЛИС семейства CoolRunner-II// Компоненты и технологии. 2003. № 7.
  5. Зотов В. Проектирование цифровых устройств на основе ПЛИС фирмы Xilinx в САПР WebPack ISE. М.: Горячая линия — Телеком. 2003.
  6. Зотов В.
    ModelSim — система HDL-моделирования цифровых устройств // Компоненты и технологии. 2002. № 6.
  7. Зотов В.
    Функциональное моделирование цифровых устройств, проектируемых на базе ПЛИС фирмы Xilinx в среде САПР WebPACK ISE // Компоненты и технологии. 2002. № 7.
  8. Зотов В.
    Временное моделирование цифровых устройств, проектируемых на базе ПЛИС фирмы Xilinx в среде САПР WebPACK ISE // Компоненты и технологии. 2002. № 8.
  9. Spartan-3 FPGA Handbook. Xilinx, Inc. 2003.
xosotin chelseathông tin chuyển nhượngcâu lạc bộ bóng đá arsenalbóng đá atalantabundesligacầu thủ haalandUEFAevertonxosofutebol ao vivofutemaxmulticanaisonbetbóng đá world cupbóng đá inter milantin juventusbenzemala ligaclb leicester cityMUman citymessi lionelsalahnapolineymarpsgronaldoserie atottenhamvalenciaAS ROMALeverkusenac milanmbappenapolinewcastleaston villaliverpoolfa cupreal madridpremier leagueAjaxbao bong da247EPLbarcelonabournemouthaff cupasean footballbên lề sân cỏbáo bóng đá mớibóng đá cúp thế giớitin bóng đá ViệtUEFAbáo bóng đá việt namHuyền thoại bóng đágiải ngoại hạng anhSeagametap chi bong da the gioitin bong da lutrận đấu hôm nayviệt nam bóng đátin nong bong daBóng đá nữthể thao 7m24h bóng đábóng đá hôm naythe thao ngoai hang anhtin nhanh bóng đáphòng thay đồ bóng đábóng đá phủikèo nhà cái onbetbóng đá lu 2thông tin phòng thay đồthe thao vuaapp đánh lô đềdudoanxosoxổ số giải đặc biệthôm nay xổ sốkèo đẹp hôm nayketquaxosokq xskqxsmnsoi cầu ba miềnsoi cau thong kesxkt hôm naythế giới xổ sốxổ số 24hxo.soxoso3mienxo so ba mienxoso dac bietxosodientoanxổ số dự đoánvé số chiều xổxoso ket quaxosokienthietxoso kq hôm nayxoso ktxổ số megaxổ số mới nhất hôm nayxoso truc tiepxoso ViệtSX3MIENxs dự đoánxs mien bac hom nayxs miên namxsmientrungxsmn thu 7con số may mắn hôm nayKQXS 3 miền Bắc Trung Nam Nhanhdự đoán xổ số 3 miềndò vé sốdu doan xo so hom nayket qua xo xoket qua xo so.vntrúng thưởng xo sokq xoso trực tiếpket qua xskqxs 247số miền nams0x0 mienbacxosobamien hôm naysố đẹp hôm naysố đẹp trực tuyếnnuôi số đẹpxo so hom quaxoso ketquaxstruc tiep hom nayxổ số kiến thiết trực tiếpxổ số kq hôm nayso xo kq trực tuyenkết quả xổ số miền bắc trực tiếpxo so miền namxổ số miền nam trực tiếptrực tiếp xổ số hôm nayket wa xsKQ XOSOxoso onlinexo so truc tiep hom nayxsttso mien bac trong ngàyKQXS3Msố so mien bacdu doan xo so onlinedu doan cau loxổ số kenokqxs vnKQXOSOKQXS hôm naytrực tiếp kết quả xổ số ba miềncap lo dep nhat hom naysoi cầu chuẩn hôm nayso ket qua xo soXem kết quả xổ số nhanh nhấtSX3MIENXSMB chủ nhậtKQXSMNkết quả mở giải trực tuyếnGiờ vàng chốt số OnlineĐánh Đề Con Gìdò số miền namdò vé số hôm nayso mo so debach thủ lô đẹp nhất hôm naycầu đề hôm naykết quả xổ số kiến thiết toàn quốccau dep 88xsmb rong bach kimket qua xs 2023dự đoán xổ số hàng ngàyBạch thủ đề miền BắcSoi Cầu MB thần tàisoi cau vip 247soi cầu tốtsoi cầu miễn phísoi cau mb vipxsmb hom nayxs vietlottxsmn hôm naycầu lô đẹpthống kê lô kép xổ số miền Bắcquay thử xsmnxổ số thần tàiQuay thử XSMTxổ số chiều nayxo so mien nam hom nayweb đánh lô đề trực tuyến uy tínKQXS hôm nayxsmb ngày hôm nayXSMT chủ nhậtxổ số Power 6/55KQXS A trúng roycao thủ chốt sốbảng xổ số đặc biệtsoi cầu 247 vipsoi cầu wap 666Soi cầu miễn phí 888 VIPSoi Cau Chuan MBđộc thủ desố miền bắcthần tài cho sốKết quả xổ số thần tàiXem trực tiếp xổ sốXIN SỐ THẦN TÀI THỔ ĐỊACầu lô số đẹplô đẹp vip 24hsoi cầu miễn phí 888xổ số kiến thiết chiều nayXSMN thứ 7 hàng tuầnKết quả Xổ số Hồ Chí Minhnhà cái xổ số Việt NamXổ Số Đại PhátXổ số mới nhất Hôm Nayso xo mb hom nayxxmb88quay thu mbXo so Minh ChinhXS Minh Ngọc trực tiếp hôm nayXSMN 88XSTDxs than taixổ số UY TIN NHẤTxs vietlott 88SOI CẦU SIÊU CHUẨNSoiCauVietlô đẹp hôm nay vipket qua so xo hom naykqxsmb 30 ngàydự đoán xổ số 3 miềnSoi cầu 3 càng chuẩn xácbạch thủ lônuoi lo chuanbắt lô chuẩn theo ngàykq xo-solô 3 càngnuôi lô đề siêu vipcầu Lô Xiên XSMBđề về bao nhiêuSoi cầu x3xổ số kiến thiết ngày hôm nayquay thử xsmttruc tiep kết quả sxmntrực tiếp miền bắckết quả xổ số chấm vnbảng xs đặc biệt năm 2023soi cau xsmbxổ số hà nội hôm naysxmtxsmt hôm nayxs truc tiep mbketqua xo so onlinekqxs onlinexo số hôm nayXS3MTin xs hôm nayxsmn thu2XSMN hom nayxổ số miền bắc trực tiếp hôm naySO XOxsmbsxmn hôm nay188betlink188 xo sosoi cầu vip 88lô tô việtsoi lô việtXS247xs ba miềnchốt lô đẹp nhất hôm naychốt số xsmbCHƠI LÔ TÔsoi cau mn hom naychốt lô chuẩndu doan sxmtdự đoán xổ số onlinerồng bạch kim chốt 3 càng miễn phí hôm naythống kê lô gan miền bắcdàn đề lôCầu Kèo Đặc Biệtchốt cầu may mắnkết quả xổ số miền bắc hômSoi cầu vàng 777thẻ bài onlinedu doan mn 888soi cầu miền nam vipsoi cầu mt vipdàn de hôm nay7 cao thủ chốt sốsoi cau mien phi 7777 cao thủ chốt số nức tiếng3 càng miền bắcrồng bạch kim 777dàn de bất bạion newsddxsmn188betw88w88789bettf88sin88suvipsunwintf88five8812betsv88vn88Top 10 nhà cái uy tínsky88iwinlucky88nhacaisin88oxbetm88vn88w88789betiwinf8betrio66rio66lucky88oxbetvn88188bet789betMay-88five88one88sin88bk88xbetoxbetMU88188BETSV88RIO66ONBET88188betM88M88SV88Jun-68Jun-88one88iwinv9betw388OXBETw388w388onbetonbetonbetonbet88onbet88onbet88onbet88onbetonbetonbetonbetqh88mu88Nhà cái uy tínpog79vp777vp777vipbetvipbetuk88uk88typhu88typhu88tk88tk88sm66sm66me88me888live8live8livesm66me88win798livesm66me88win79pog79pog79vp777vp777uk88uk88tk88tk88luck8luck8kingbet86kingbet86k188k188hr99hr99123b8xbetvnvipbetsv66zbettaisunwin-vntyphu88vn138vwinvwinvi68ee881xbetrio66zbetvn138i9betvipfi88clubcf68onbet88ee88typhu88onbetonbetkhuyenmai12bet-moblie12betmoblietaimienphi247vi68clupcf68clupvipbeti9betqh88onb123onbefsoi cầunổ hũbắn cáđá gàđá gàgame bàicasinosoi cầuxóc đĩagame bàigiải mã giấc mơbầu cuaslot gamecasinonổ hủdàn đềBắn cácasinodàn đềnổ hũtài xỉuslot gamecasinobắn cáđá gàgame bàithể thaogame bàisoi cầukqsssoi cầucờ tướngbắn cágame bàixóc đĩaAG百家乐AG百家乐AG真人AG真人爱游戏华体会华体会im体育kok体育开云体育开云体育开云体育乐鱼体育乐鱼体育欧宝体育ob体育亚博体育亚博体育亚博体育亚博体育亚博体育亚博体育开云体育开云体育棋牌棋牌沙巴体育买球平台新葡京娱乐开云体育mu88qh88

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *