8085 Инструкция: JMP - Брой машинни цикли, когато условието не е изпълнено?

Машинният код за JMP инструкцията се състои от: opcode - 11CCC010 (where CCC is the state of the flag bit used to set the condition) 8 bits и address за прескачане - да речем 16-битов адрес.

Първо има операция за извличане на операционния код, така че се нуждае от 1 машинен цикъл. Проверява се състоянието на флаговия бит. Ако условието е изпълнено, тогава адресът се чете, в противен случай не е. Проверката дали условието е изпълнено не трябва да изисква значителни часовникови цикли, тъй като се определя от състоянието на битовете на флага.

i - Сега, ако условието удовлетворява: не. необходими машинни цикли = 1 (за извличане) + 2 (за четене на адреса, който е 16 бита) = 3

ii. ако условието не удовлетворява: не трябва да има цикли на четене (след цикъла на извличане) и така необходимият брой машинни цикли трябва да бъде 1, т.е. само цикълът на извличане.

Но материалът, за който имам предвид, за да науча микропроцесори, казва, че ще са необходими 2 машинни цикъла, но не казва защо и оттам моето объркване. Трябва ли да бъде 1 машинен цикъл или 2 машинни цикъла?

В случай, че има известно объркване относно машинния цикъл и тактовия цикъл, моля, не се колебайте да отговорите във всеки.


person aste123    schedule 23.05.2014    source източник
comment
@lurker съжалявам, но тези sildes изглежда нямат информация за броя на тактовите цикли, необходими за всяка инструкция (оставете настрана JMP инструкцията). Просто показва какво прави дадена инструкция. Моля за извинение, ако съм пропуснал нещо, но слайдшоутата са наистина трудни за проследяване без индекс или страница със съдържание, каквито притежават повечето други документи.   -  person aste123    schedule 23.05.2014


Отговори (1)


Въпреки че не е интуитивен за тези от нас, свикнали с 8080 или z80, проверка на тази документация потвърждава вашето убеждение. JC отнема два машинни цикъла и седем тактови цикъла, ако условието не е изпълнено, но отнема три машинни цикъла и десет тактови цикъла, ако е изпълнено. Сравнете и контрастирайте с z80, където винаги има три машинни цикъла и десет тактови цикъла, независимо дали са взети или не.

Мисля обаче, че объркването ви е, защото си въобразявате, че нечетенето на адреса е по някакъв начин безплатно, но все още има компютър за увеличаване.

И двата клона на фамилията процесори имат базова цена за два цикъла. Това ще отчита декодирането и вземането на решение и, тъй като те са конвейерни, четенето на първия байт от целевия адрес ще е започнало другаде.

В този момент бих си представил, че 8085 е достатъчно интелигентен, че ако клонът няма да бъде взет, може да откаже да прочете втория байт от целевия адрес и просто да увеличи компютъра отново. 8080 и z80 вероятно са позволили четенето на втория байт да започне и доста вероятно не могат да увеличат компютъра без четене от него като цяло, така че те следват това и след това изхвърлят целия целеви адрес.

И така, накратко: не чака решение, за да започне да чете целевия адрес; след като четенето на ниския байт е в ход, той позволява това да завърши. Алтернативите биха били инструкция, която отнема повече време, ако се вземе разклонението, и необходимостта да можете да направите двойно увеличение без четене на компютъра, което вероятно не се появява иначе.

Всички спекулации, разбира се. Някой има ли действителен 8085 и логически анализатор? Те биха могли да проверят дали има първи цикъл на достъп, дори ако скокът не е направен.

person Tommy    schedule 23.05.2014
comment
Съжалявам, че не разбрах какво означава това that not reading the address is somehow free but there's still the PC to increment. Не знаех, че 8085 има piplining. Това може да обясни защо това е едно състояние на машината повече от това, което очаквах. - person aste123; 23.05.2014
comment
Да предположим, че току-що е прочело JC и е решило да не го приема. След това, за да стигне до следващата инструкция, трябва да направи PC' = PC + 2. Няма друго време, няма друго място, където компютърът трябва да бъде увеличен два пъти. Би било много малко вероятно те да могат да пренасочат компютъра към ALU, така че вероятно просто ще трябва да поискат две последователни стъпки. Дори ако може да избегне всякакви четения от паметта на целевия адрес, това едва ли ще има ефект. - person Tommy; 23.05.2014
comment
съжалявам, това е объркващо. Ако piplining влезе в действие и байтът от по-нисък ред вече се чете другаде, тогава компютърът вече е нагоре с 1 и в момента сочи към байт от по-висок ред (втора част) на целевия адрес. PC ще се увеличи отново, когато втората част от адреса бъде прочетена/извлечена; за да пропуснем това, трябва да увеличим компютъра с +1 вместо с +2 (надявам се, че съм прав). Освен това чрез скорошния си коментар искате да кажете, че умишленото увеличаване на компютъра (по неестествен начин) причинява страничен ефект и отнема допълнителни часовникови цикли? (Съжалявам, първият ми език не е английски) - person aste123; 24.05.2014
comment
@aste123 да. Спекулирам, че или вторият цикъл е защото ниската част от адреса се извлича или, ако не се извлича, това е защото няма друг начин да се постигне двойно увеличение. Те са алтернативи. - person Tommy; 24.05.2014
comment
stackoverflow.com/ въпроси/23838410/ - person Patt Mehta; 24.05.2014
comment
Имайте предвид, че 6502 също би бил по-бавен, ако вземе клон: 2 цикъла, когато не го вземе, и 3 цикъла, ако го вземе. Освен това, ако разклонението е било над две страници (разклонението е било 2 байта, един байт при 0xFF на предишната страница и следващият байт при 0x00 на следващата страница), тогава сте загубили още един цикъл. - person Alexis Wilke; 24.05.2014
comment
@AlexisWilke, но не е ли това, защото 6502 условни разклонения са относителни, така че има аритметична цена за вземане на едно? - person Tommy; 24.05.2014
comment
Наистина. 8-битово цяло число със знак, добавено към IP от след прочитане на инструкцията. - person Alexis Wilke; 25.05.2014