Разделы
Публикации
Популярные
Новые
Главная » Сопряжение цифровых, аналоговых сигналов

1 ... 14 15 16 17 18 19 20 ... 59

ствии с командой и в процессе ее выполнения может один или несколько раз обращаться к внешней памяти.

Для понимания работы микро-ЭВМ, а фактически и почти всякой ЭВМ с небольшой длиной слова важно знать, что одна машинная команда может иметь более одного слова в длину. Например, любая команда, обращающаяся к памяти (такая, как загрузить накопитель из такой-то ячейки памяти ), должна иметь 16 бит только для указания адреса ( ячейка памяти ), не считая некоторого количества битов, нужного для указания самого действия ( загрузить накопитель- ). Команда микропроцессора 8085 может иметь в длину от одного до трех слов (байтов); первый байт определяет операцию (например, загрузить накопитель ) и известен как код операции (КОП) в то время как следующие байты указывают все остальное (адрес, число), что необходимо для выполнения команды. Как мы скоро увидим, любая команда при письме обозначается одним мнемоническим сокращением (символом языка ассемблер), которое выглядит как одно слово, и это часто вводит в заблуждение начинающих, заставляя их ошибочно думать, что одна команда занимает одно слово в памяти. В зависимости от длины команды (от 1 до 3 байт) содержимое ПС увеличится при ее выполнении на I, 2 или 3, если это не команда перехода. (При выполнении команды перехода содержимое ПС может измениться на любую величину.)

Анатомия одного командного цикла. Чтобы получить представление о том, как действует микропроцессор, мы детально рассмотрим шаги, которые он совершает при выполнении одной из команд.

-325 нс-

-Кшандный циня

Машинные циклы Машинные такты

Тактовые HMnj/ibCbiv,

10/М

h-

и а А Старшая палоАина адреса

i младшая половянз

Ad-Mj У > <ввоа капа )

.( Старшая полааина адреса ~У~ 1 младшая полозина адреса

У Вывод данных

RD V

Л

т

/ г

Рис, 11.2. Временная диаграмма выполнения команды MOV М, В.

З^отя для применения микропроцессоров понимание на этом уровне не обязательно, оно внесет ясность в ваши представления об их работе и может оказаться полезным при отладке программ. На рис, 11.2 приведена временная диаграмма типичного командного цикла, в данном случае для команды MOV iВ. Эта команда передает содержимое



одного из ретистров ЦИ (регистра гВ) в ячешзушаиятн, адрес жоторой определяется парой байтов, оказавшейся в данный момент в регистрах Н и L. (Это называется косвенной адресацией; Н и L содержат соответственно старший и младший байты адреса.) Последовательность прохождения сигналов по линиям синхронизации, адресным линиям и линиям данных показана одновременно с происходящим ша трех контрольных линиях; линии ALE (Address Latch Enable - разрешение адресного режима), линии RD (Read - ЧТЕНИЕ) и линии WR* (Write - ЗАПИСЬ). Линия ALE необходима из-за того, что передача данных совмещена в шине адресов/да иных с передачей младших половин адресов.

Цикл этой конкретной команды подразделяется на два машинных цикла, Ml и Ма, в каждом из которых происходит одна передача данных в память или из памяти. Каждый из машинных циклов в свою очередь делится на машинные такты, от Ti до Т4, соответствующие тактовым импульсам системы. Во время Mi ЦП иолучйет из памяти код операции (которйя-в данном слуедае-имеет в длину только один байт), а в течение Мг он производит само перемещение данриж из регистра В в память. Для выполнения других команд может понадобиться до пяти машинных циклов, от Mj. до Ms, причем каждый цикл может содержать до шести машинных тактсш, от Ti до Те- Передача 1Ц№ных в память или из памяти всегда занимает один полный машинный цикл, в начале первого такта (Ti) которого обязательно присутствует имгьульс ALE. Младшие разряды адреса подаются на шину адресов/данных ADo- AD7 в течение такта Ti, а для их занесения в соответствующий регистр используется задний фронт импульса ALE. Во время остальных тактов каждого цикла линии адресов/данных можно использовать для числовых операций, синхронизация которых обеспечивается при помощи линий ЧТЕНИЕ и ЗАПИСЬ.

Любой командный цикл по необходимости начинается с машинного цикла Ml, который передает в'ЦП КОП команды и потому включает операцию выборки соответствующих данных из памяти в течение машинных тактов Та и Тз. Процессор заносит этот КОП с шины адресов данных в регистр кода операции примерно в середине такта Тз и во время такта Т4 переходит к выполнению команды. Выполнение многих команд не требует дальнейших обращений к памяти и потому заканчивается циклами Т4 ИЛИ Т5. Но в случае команды MOV В процессор обнаруживает (во время ТД, что он должен передать в память содержимое регистра В. Поэтому процессор начинает второй машинный цикл Ма, высылая в память адрес назначения, которым в данном примере служит содержимое пары регистров HL.

В течение машинных тактов Та и Тз процессор при помощи 8-бйтовой внутренней шины даннвж шединнет регистр -В с шиной данных и одновременно подает импульс на линию ЗАПИСЬ. Соединение поддерживается до тех пор, пока длится импульс ЗАПИСЬ, и данные должны быть зафиксированы фиксирующей схемой следящего типа до его шшнчания или лапус4саемой по фронту схемой по £го заднему



фронту Время, необходимое для того, чтобы память поняла , что к ней обращаются, и приняла данные, которые должны быть в ней записаны, составляет не менее двух машинных тактов. Его называют требуемым временем доступа в память и обозначают д. На этом заканчивается выполнение данной команды^-Далее ЦП начнет следующий машинный цикл Ml, чтобы получить КОП следующей команды, который находится в следующей ячейке памяти, если только последняя выполненная команда не была командой перехода.

Пользователь не может управлять последовательностью машинных тактов процессора, за исключением одного случая. Если на вход Ready (ГОТОВНОСТЬ) подать сигнал низкого уровня, то после такта Та процессор начнет совершать дополнителъны& такты; такой ждущий режим употребляется при передаче данных из внешних устройств (например, гибких дисков) или при обращении к медленно действующей памяти.

Скорость выполнения каманд. Тактовая частота микропроцессора 8085 может находиться в пределах от 0,5 до 5 МГц (для модели 8085А-2). ЦП содержит схему тактового генератора, так что внешний кристаллический резонатор просто присоединяется к выводам ИМС 1 и 2. ЦП имеет специальный выход для тактового сигнала, поскольку частота колебаний резонатора вдвое больше тактовой и для формирования рабочих тактовы: импульсов, системы.она делится пополам внутри схемы с помощью триггера. Фирма Intel рекомендует для микропроцессора 8085 стандартную тактоБую частоту 3,072 МГц (т. е. кристалл на 6,144 МГц). В этом случае длительность машинного такта приблизительно равна 325 не, а требуемое время доступа в память - около 525 не, чгв соответствует облегчшному режиму для МОП-памяти (подробнее см. разд. 11.10 и 11.11). При работе с такой тактовой частотой выполнение команды MOV М, В, которую мы только что рассмотрела, требует семи маиганных тактов или около 2,2 мкс. Конкретная величина- тактовой частоты 3,072 МГц выбрана потому, что она кратна тактовой частоте, необходимой для работы последовательных чипов В/В. Поскольку тасто бывает нужна последовательная связь с терминалом, этот выбор тактовой частотм системы облегчает подключение к ней необходимых дополнительных устройств.

11.3. Система команд

Описание микропроцессора выглядит иначе, чем описания большинства других микросхем, отчасти из-за присутствия в нем обширного раздела, посвященного системе команд . Для пользования микропроцессором важно ясно понимать, чю делают команды: как адресовать память ( типы адресации ), как обращаться к регистрам, куда попадают результаты арифметических операций, как устроить >-

1> О фнксируюиш сйнейах, слшцци$ а задускаемщ по фронту, см. разд. 11.8 [Прим. nepeei



условное ветвление (переходы) и т. д. Каждая команда микропроцессора 8085 состоит из одного, двух или трех байтов, причем первый байт - это КОП команды. КОП определяет природу команды; по КОПу ЦП определяет, нужны ли дополнительные байты, и, если да, ЦП их получит в последующих циклах Mg, М3. Поскольку байт КОПа состоит из 8 бит, может существовать ровно 256 разных КОПов, из числа которых микропроцессор 8085 использует 244. В табл. П.1 представлен полный список команд микропроцессора 8085.

В этой таблице команды даны не в шестнадцатеричном машинном представлении, а в виде мнемокодов языка ассемблера, поскольку процессор обычно программируют на этом более удобочитаемом языке, обозначая адреса и числа легко запоминаемыми именами вместо тех чисел, с которыми в действительности оперирует процессор. После того как программа написана на языке ассемблера, стандартная программа, известная также под названием ассемблер , преобразует мнемокоды и имена в числа. В связи с этим язык ассемблера называют входным языком в отличие от числового объектного языка , который процессор использует непосредственно. Таким образом, программа ассемблер переводит на объектный язык программы, составленные на входном языке, В процессе этого перевода одна команда языка ассемблер может быть преобразована в 1, 2 или 3 байт объектного языка в зависимости от конкретной команды. Более подробно о связи между входами и машинными языками будет сказано ниже.

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

Операции с регистрами. Микропроцессор 8085 имеет 8 регистров, которые в мнемокодах списка команд обозначены символом г , а при программировании на языке ассемблер обозначаются одной из букв А, В, С, D, Е, И, L и М. Буква А обозначает накопитель, а М - содержимое ячейки памяти, адрес которой содержится в регистрах HL. Например, запись MOV А, М означает переслать в накопитель содержимое ячейки памяти, адрес которой сейчас находится в паре регистров НЬ>. Можно представить себе, что это применение пары регистров превращает в регистр некоторую ячейку памяти.

Содержимое этих регистров можно увеличивать или уменьшать, а также пересылать (копировать) из одного регистра в другой. Кроме того, в регистры можно засылать непосредственные данные (т. е. данные, являющиеся частью программы). Запомните, что Команда вида MOV г!, г2 означает скопировать содержимое регистра г2 в регистр г1, оставив неизменным содержимое г2 . Другими словами,

MOV (приемник), (источник)

Типичными операциями с регистрами являются команды MOV А, В ( переслать содержимое регистра В в накопитель ) и MVI А, 4 ( загруч аить в накопитель константу 4 ). Все четыре операции с регистрами



Таблица 11.}

Система команд микропроцессора 8085

Операции с регистрами

1NR г приращение содержимого г;(г)- -(г)+1

DCR г уменьшение содержимого г 1:(г)-<-(г)-1

MOV г1, г2 переслать байт из г2 в г1:(г1) -(i2) MV1 г, d > переслать в г байт из d

Оцерации с накопителем

загрузка-запись >

LDA пп загрузить в А байт из рчейки с адресом пп;(А)- -(пп)

STA пп записать в ячейку с aAptcoM пп байт из А'.(пп)-<-(А)

MOV А, М загрузить А из ячейки с косвенным адресом (HL):(A)-<-((HL))

MOV М, А записать байт из А в ячейку с косвенным адресом (HL):((HL))-*- (А)

LDAX гр загрузить А из ячейки с косвенным адресом (гр): (А)((гр))

STAX грб) записать байт из А в ячейку с косвенным адресом (гр):((гр))- (А)

IN port считать данные из порта в А

OUT port записать данные из А в порт

с содержимым с непосредственными

регистров данными

MOV г, А загрузить в г данные из А

MOV А, г MVI А, d загрузить в А данные из г

ADD г AD1 d прибавить содержимое г к содержимому А

ADC г ACI d сложить с переносом

SUB г SU1 d вычесть содержимое г: (А)-<-(А)-(г)

SBB г SBI d вычесть с переносом (с заемом)

OR А г ORI d (А) (А) поразрядно ИЛИ с (г)

ANA г ANI d (А) - (А) поразрядно И с (г)

XRAr , XRI d (А)-<-(А) поразрядно Исключающее ИЛИ с (г)

СМР г CPI d установить флажки: Z, если (А) = (г), С, если (А)<(г)

циклические сдвиги А

4AL RAR циклический сдвиг А влево или вправо через разряд переноса

RLG RRG циклический сдвиг А внутри себя; крайний бит засылается в разряд переноса

СМА 1-е обращение Л

DAA десятичная коррекция А >

INR А увеличить содержимое А на 1

DCR А уменьшить содержимое А на !

XRA А заслать О в А

STG установить бит переноса 1

CMC обратить бит переноса

Операции с парами регистров >

LX1 гр, dd загрузить в пару регистров непосредственные данные



Продолжение

DAD rp прибавить содержимое гр к содержимому HL:(HL) {HL)-]-(rp)

INX rp увеличить на 1 содержимое пары регистров:(гр)- -(гр)-]-1

DCX гр уменьшить на 1 содержимое пары регистров: (гр)-<-(гр) -1

XCHG обменять содержимое пар регистров HL и DE

LHLD пп загрузить пару HL из HieeK с адресами пп и пп--1

SHLD пп записать содержимое пары HL в ячейки пп и пп-[-1

Операции со стеком

PUSH гр загрузить в стек содержимое пары регистров

восстановить из стека содержимое пары регистров установить указатель стека: (SP) -dd (HL) -(HL) + (SP)

POP rp ) LXISP, dd DAD SP INX SP DCX SP SPHL XTHL

увеличить на 1 содержимое указателя стека (SP) уменьшить на 1 содержимое указателя стека (SP) (SP) (HL)

обменять содержимое пары HL и верхней пары ячеек стека

(SP)+I (SP)-I

Переход

Обращение

Возврат

CALL nn

безусловный

если флажок нулевого признака сброшен (не равно) если флажок нулевого признака установлен (равно)

если флажок переноса сброшен

если флажок переноса установлен

если флажок четности сброшен если флажок четности установлен

если флажок знака сброшен (нуль или положительное число)

если флажок знака установлен (отрицательное число)

Управление: (разяое)

NOP никакой операции не производится HLT останов (ожидание или прерывание)

Примечание А-накопитель, d -8-битовое число или метка dd-Iб-битовое число или метка(х)-содержимое х, ((х))-содержимое ячейки ггшаяти с адресом s (х), М-байт, содержащийся в ячейке с адресом б HL, пп-Iб-битовый адрес или метка, р -8-битовый

адрес или метка порта г-регистры А, В, С, D, Е, Н, L и М (в ячейке (HL)), гр-обоз-начения е, D, Н двойных регистров ВС, DE, HL.

Команды пересылки и загрузки ие действуют иа флажки Толькс? дия пар регистров В (ВС) и D (DE), пары HL и SP запрещены Применяется после команд ADD или ADC, при-меиеиных к упаковаииой паре двоичио десятичных операндов. Числа предполагаются десятичными, за исключением шестнадцатеричиого ОппппН и двоичного ddddddddB 1б-бнтовые операции Из них ни одна не действует на флажки, кроме DAD, которая действует на флажки переноса Также и PUSH PSW (Processor Status Word, етсшсг состояния профессора. A+ -Ьфлажки) и POP PSW ((SP)) и ((SP)-1.) ч- (лр), (SP>{P)-2 (родержимое указателя стека уменьшается)



М икропрщессо ры i л

допускают замшу ©даого ш символен т1, г2 тшзяеушкшиушм М. При этом шответствующада .оовр ця пршзводаггся с соз^еряшшмад я-щейки памяти, адрес которой содержитш в HL ( юэсвенная адресация ). Приме^1 можетслужигь команда Ж)¥ В, М загрузшть в решстр В содержимое ячейки с Адресом жз Как мы скскр^ увидам, шжно

адресовать плмять и непосредственно, без аомоищ регистров HL.

Операции с накопителем. СЛ)едующие команды в списке относятся исжлючителмо к регистру накопит-еля. <Для йолнош картины мы еще раз переписали все команда с регистрами, яопользуюшде накопитель в качестве одного из регистров.)

Команды загрузки и записи (LDA, STA) пересылают данные из памяти в накопитель или из накопителя в память, причем адрес соответствующей ячейки памяти указывается в команде непосредственно ( прямая адресация ). То же самое могут делать при помощи косвенной адресации через регистры HL и команды MOV А, М и MOV М,А. Таким же образом команды LDAX и STAX позволяют пересылать данные между памятью и накопителем при помоеси косвенной адресации через другие пары регистров ВС лли DE. Наконец, команды IN и OUT осуществляют обмен данными между накопителем и портом ввода/вывода. Запомните, что такие об10значения, как IN, OUT, загрузить , запомнить , следует всегда понимать в отношении к ЦП: OUT значит переслать данные из ЦП во внешний мир . Это ЦП-центрическое соглашение относится и к обозначениям, связанным с самой структурой системы, таким, как ЧТЕНИЕ и ЗАПИСЬ; ЧТЕНИЕ оз-начаеТд что ЦП считывает данные из памяти или В/В.

Далее в списке перечислены относящиеся к накопителю арифметические команды (ADD, SUB и т. д.). Во всех случаях операция совершается с данными из лакопителя и из регистра (или непосредственными), и результат загружается в накопитель. Так, команда SUB г вычитает содержимое регистра из накопителя, оставляя неизменным содержимое регистра. Выполняя эти операции, ЦП устанавливает флажки условий (т. е. специальные блты в регистре флажков ), по которым впоследствии можно установить, оказался результат операции положительным, отрицательным или равным нулю и вызвал ли он переполнение \ Команда СМР только устанавливает флажки л не меняет содержимое накопителя. Флажки условий важны при осуществ-

Регистр флажков, он же регистр состояний или регистр признаков. Его 5 двоичных разрядов (разряды, или тщ, условий) даеют специальные названия. Это (1) разряд переноса, (2) дополнительный разряд переноса, (3) разряд знака, (4) разряд нулевого признака и (5) разряд ветности. одержимое каждого из этих регистров осо^ бым образом зависит от результатов некоторых операций. Если один из битов условий установлен в 1 (т. е. в соответстБугош разряде содержится 1), говорят, что уста-йовдеи флажок этого условия, в противном случае - что этот флажсж сброшен, а разряд 04Bii№H. Шприпге^р, фл-ажок переноса стяжш, еаш разряд а&рт@са содержит 1 (или JSht переноса установлен в 1), и сброшеи, если разряд переноса очищен. Содержимое регистра флажков часто называют словом (или байтом) состояния.- Прим. персе.



лении условных переходов, которые мы вскоре изучим. Для управления разрядом переноса существуют две команды: STC устанавливает в нем 1, а CMC обращает его содержимое.

Чтобы очистить разряд переноса, можно применить последовательность команд STC, CMC (или, что скорее, трюк вроде ANA А).

Упражнение И.1 Написать серию команд, которая удваивает число в ячейке пп, т. е. (пп)- -(пп)*2.

Команды ANA, ORA, XRA выполняют логические операции (И, ИЛИ, Исключающее ИЛИ) с содержимым накопителя. Например, при помощи логического И можно выделить отдельный бит из байта данных:

ANI 04 JNZ адрес

Эта пара команд смотрит на разряд D2 накопителя (DO - его младший разряд), и, если в разряде D2 оказалась единица, осуществляет переход по указанному адресу, в противном случае выполняется следующая команда. Попробуйте установить отдельный бит при помощи логического ИЛИ и обратить его при помощи Исключающего ИЛИ. Например, команда XRI 80Н обращает самый старший разряд накопителя (Н после числа означает его шестнадцатеричное представление, В - двоичное; в остальных случаях предполагается, что число десятичное. Таким образом 80H=80i6=100000002). Исключающее ИЛИ можно использовать для засылки нуля в накопитель ( XRA А ) так же, как и команду SUB А .

Циклические команды RAL и RAR производят циклический сдвиг содержимого накопителя на один разряд влево или вправо через разряд переноса; таким образом, накопитель вместе с разрядом переноса действует как 9-битовый кольцевой регистр. Циклические команды с поочередным сложением RLC и RRC осуществляют циклический сдвиг без участия разряда переноса, но вместо этого засылают в него бит первоначального содержимого накопителя, который при сдвиге выходит за его разрядную сетку. Команда обращения СМА производит 1-е обращение содержимого накопителя, т. е. обращает каждый его бит. Не существует команды для 2-го обращения (изменения знака), поэтому в качестве такой команды употребляется последовательность

СМА INR А

поскольку 2-е обращение числа - это его 1-е обращение плюс I.

Операция с парами регистров. Пары регистров (ВС, DE, HL) содержат необходимые для адресации и формирования индексов J 6-битовые слова, для действий с которыми предусмотрено песколъко специальных команд. Команда LXI загружает в пару регистров непосредственное 2-байтовое число. Команда двойного сложения DAD прибавляет содержимое некоторой пары регистров к содержи-



мому пары HL; например, DAD D прибавит к содержимому HL содержимое пары DE. Это единственная двух регистровая команда, которая может устанавливать флажки (DAD может устанавливать флажок переноса). Команды INX и DCX увеличивают или уменьшают на 1 содержимое пары регистров и очень важны для операций с индексами (доступ в последовательно расположенные ячейки памяти).

Программа П.1 передвигает список щ 50 байт, расположенный в памяти, начиная с ячейки 1000 Н, в 50 ячеек, расположенных, начи-

LXI Н, 1ВВВН LXI D, 2В00Н MVI В, 5в LOOP: MOV А М STAX D ШХ Н ШХ D DCR В JNZ LOOP

начальный адрес введенного списка начальный адрес списка на выходе начальное значение счетчика цикла извлечь число записать его

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

Программа П.1

ная С ячейки 2000 Н. В качестве счетчика цикла, управляющего разрядом нулевого признака, мы здесь употребили один регистр В. Если надо передвинуть более чем 256 байтов, в качестве счетчика цикла приходится употреблять пару регистров, как это показано в следующем примере (программа 11.2), где список из 4096 байтов передвигается из

LX1 Н, 2000Н LXI D,3000H LX1 В, -1000Н LOOP: MOV А, М STAX D

ШХ Н 1NX D

WR С JNZ LOOP ШR В JNZ LOOP

начальное значение счетчика цикла

переслать байт и увеличить содержимое указателен

повторить, если младший указатель не О

выйти из цикла, если оба указателя содержат нули

Программа 11.2

положения С началом в ячейке 2000 Н в положение с началом в ячейке 3000 Н. В этом примере в качестве счетчика цикла использована пара



регистров ВС, причем начальное значение параметра цикла равно взятой с обратным знаком его длине, а увеличение параметра цикла и контроль нулевого признака производятся отдельно в каждом из регистров В, С (двухрегистровая команда DCX не устанавливает флажки). После первого шага в ВС будет находиться число - OFFE и т. д.

Поскольку пара регистров HL часто употребляется как указатель при передаче данных между накопителем и памятью, команды LHLD (load HL direct, загрузить HL непосредственно) и SHLD (store HL direct, запомнить HL непосредственно) особенно употребительны. Они загружают (или записывают) содержимое двойного регистра HL из ячейки (в ячейку) памяти с указанным в команде адресом (прямая адресация). С помошью этих команд можно переносить указатели в двойной регистр HL, как это показано, напри- мер, в таком отрывке программы:

LHLD POINT

MOV А,М

INX Н

SHLD POINT

Предполагается, что в ячейке памяти с адресом POINT (два слова) хранится указатель массива; программа восстанавливает указатель, считывает из указанной ячейки хранящееся там слово, увеличивает указатель и сохраняет его в памяти для дальнейшего употребления. Другой распространенный прием получения данных из массивов или таблиц - это складывать смещение (положение относительно начала массива, засылаемое в HL, с хранящимся в DE базовым адресом (первый адрес массива):

LXI Н,п

DAD D

MOV А.М

Эта программа прибавляет к базовому адресу смещение п, причем результат оказывается в двойном регистре HL (для косвенной адресации). Базовый адрес, который хранится в DE, не изменяется, поэтому можно многократно получать данные из массива, засылая в HL другие смещения.

Операция со стеком. В отличие от воображаемой ЭВМ МС-16, которую мы рассматривали в гл. 10, большинство современных микропроцессоров имеет встроенные операции со стеком. Стек - это набор последовательных ячеек памяти, действующих как известный стек XYZT в калькуляторах фирмы Hewlett -Packard: можно втолкнуть (занести) числа в стек и вытолкнуть (извлечь) их в обратном порядке: входящее последним выходит первым. Это напоминает механическое устройство для раЗхМена монет в автобусе (или приспособление для выдачи подносов в столовой). Стек микропроцессора 8085 оперирует только с двойными словами, которые содержатся в двойных регистрах или в регистре накопителя



1 ... 14 15 16 17 18 19 20 ... 59
© 2004-2024 AVTK.RU. Поддержка сайта: +7 495 7950139 в тональном режиме 271761
Копирование материалов разрешено при условии активной ссылки.
Яндекс.Метрика