Главная » Просмотр файлов » Volume 2B Instruction Set Reference N-Z

Volume 2B Instruction Set Reference N-Z (794102), страница 37

Файл №794102 Volume 2B Instruction Set Reference N-Z (Intel and AMD manuals) 37 страницаVolume 2B Instruction Set Reference N-Z (794102) страница 372019-04-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 37)

Here, the parameters are released both from the calledprocedure’s stack and the calling procedure’s stack (that is, the stack being returnedto).In 64-bit mode, the default operation size of this instruction is the stack size, i.e. 64bits.Operation(* Near return *)IF instruction = Near returnTHEN;IF OperandSize = 32THENIF top 4 bytes of stack not within stack limitsTHEN #SS(0); FI;EIP ← Pop();ELSEIF OperandSize = 64THENIF top 8 bytes of stack not within stack limitsTHEN #SS(0); FI;RIP ← Pop();ELSE (* OperandSize = 16 *)IF top 2 bytes of stack not within stack limitsTHEN #SS(0); FI;tempEIP ← Pop();tempEIP ← tempEIP AND 0000FFFFH;IF tempEIP not within code segment limitsTHEN #GP(0); FI;EIP ← tempEIP;FI;FI;RET—Return from ProcedureVol. 2B 4-259INSTRUCTION SET REFERENCE, N-ZIF instruction has immediate operandTHEN IF StackAddressSize = 32THENESP ← ESP + SRC; (* Release parameters from stack *)ELSEIF StackAddressSize = 64THENRSP ← RSP + SRC; (* Release parameters from stack *)ELSE (* StackAddressSize = 16 *)SP ← SP + SRC; (* Release parameters from stack *)FI;FI;FI;FI;(* Real-address mode or virtual-8086 mode *)IF ((PE = 0) or (PE = 1 AND VM = 1)) and instruction = far returnTHENIF OperandSize = 32THENIF top 12 bytes of stack not within stack limitsTHEN #SS(0); FI;EIP ← Pop();CS ← Pop(); (* 32-bit pop, high-order 16 bits discarded *)ELSE (* OperandSize = 16 *)IF top 6 bytes of stack not within stack limitsTHEN #SS(0); FI;tempEIP ← Pop();tempEIP ← tempEIP AND 0000FFFFH;IF tempEIP not within code segment limitsTHEN #GP(0); FI;EIP ← tempEIP;CS ← Pop(); (* 16-bit pop *)FI;IF instruction has immediate operandTHENSP ← SP + (SRC AND FFFFH); (* Release parameters from stack *)FI;FI;(* Protected mode, not virtual-8086 mode *)IF (PE = 1 and VM = 0 and IA32_EFER.LMA = 0) and instruction = far RETTHEN4-260 Vol.

2BRET—Return from ProcedureINSTRUCTION SET REFERENCE, N-ZIF OperandSize = 32THENIF second doubleword on stack is not within stack limitsTHEN #SS(0); FI;ELSE (* OperandSize = 16 *)IF second word on stack is not within stack limitsTHEN #SS(0); FI;FI;IF return code segment selector is NULLTHEN #GP(0); FI;IF return code segment selector addresses descriptor beyond descriptor table limitTHEN #GP(selector); FI;Obtain descriptor to which return code segment selector points from descriptor table;IF return code segment descriptor is not a code segmentTHEN #GP(selector); FI;IF return code segment selector RPL < CPLTHEN #GP(selector); FI;IF return code segment descriptor is conformingand return code segment DPL > return code segment selector RPLTHEN #GP(selector); FI;IF return code segment descriptor is non-conforming and return codesegment DPL ≠ return code segment selector RPLTHEN #GP(selector); FI;IF return code segment descriptor is not presentTHEN #NP(selector); FI:IF return code segment selector RPL > CPLTHEN GOTO RETURN-OUTER-PRIVILEGE-LEVEL;ELSE GOTO RETURN-TO-SAME-PRIVILEGE-LEVEL;FI;FI;RETURN-SAME-PRIVILEGE-LEVEL:IF the return instruction pointer is not within ther return code segment limitTHEN #GP(0); FI;IF OperandSize = 32THENEIP ← Pop();CS ← Pop(); (* 32-bit pop, high-order 16 bits discarded *)ESP ← ESP + SRC; (* Release parameters from stack *)ELSE (* OperandSize = 16 *)EIP ← Pop();EIP ← EIP AND 0000FFFFH;CS ← Pop(); (* 16-bit pop *)ESP ← ESP + SRC; (* Release parameters from stack *)RET—Return from ProcedureVol.

2B 4-261INSTRUCTION SET REFERENCE, N-ZFI;RETURN-OUTER-PRIVILEGE-LEVEL:IF top (16 + SRC) bytes of stack are not within stack limits (OperandSize = 32)or top (8 + SRC) bytes of stack are not within stack limits (OperandSize = 16)THEN #SS(0); FI;Read return segment selector;IF stack segment selector is NULLTHEN #GP(0); FI;IF return stack segment selector index is not within its descriptor table limitsTHEN #GP(selector); FI;Read segment descriptor pointed to by return segment selector;IF stack segment selector RPL ≠ RPL of the return code segment selectoror stack segment is not a writable data segmentor stack segment descriptor DPL ≠ RPL of the return code segment selectorTHEN #GP(selector); FI;IF stack segment not presentTHEN #SS(StackSegmentSelector); FI;IF the return instruction pointer is not within the return code segment limitTHEN #GP(0); FI;CPL ← ReturnCodeSegmentSelector(RPL);IF OperandSize = 32THENEIP ← Pop();CS ← Pop(); (* 32-bit pop, high-order 16 bits discarded; segment descriptorinformation also loaded *)CS(RPL) ← CPL;ESP ← ESP + SRC; (* Release parameters from called procedure’s stack *)tempESP ← Pop();tempSS ← Pop(); (* 32-bit pop, high-order 16 bits discarded; segmentdescriptor information also loaded *)ESP ← tempESP;SS ← tempSS;ELSE (* OperandSize = 16 *)EIP ← Pop();EIP ← EIP AND 0000FFFFH;CS ← Pop(); (* 16-bit pop; segment descriptor information also loaded *)CS(RPL) ← CPL;ESP ← ESP + SRC; (* Release parameters from called procedure’s stack *)tempESP ← Pop();tempSS ← Pop(); (* 16-bit pop; segment descriptor information also loaded *)ESP ← tempESP;SS ← tempSS;4-262 Vol.

2BRET—Return from ProcedureINSTRUCTION SET REFERENCE, N-ZFI;FOR each of segment register (ES, FS, GS, and DS)DOIF segment register points to data or non-conforming code segmentand CPL > segment descriptor DPL (* DPL in hidden part of segment register *)THEN SegmentSelector ← 0; (* Segment selector invalid *)FI;OD;For each of ES, FS, GS, and DSDOIF segment selector index is not within descriptor table limitsor segment descriptor indicates the segment is not a data orreadable code segmentor if the segment is a data or non-conforming code segmentand the segment descriptor’s DPL < CPL or RPL of code segment’ssegment selectorTHEN SegmentSelector ← 0; (* Segment selector invalid *)OD;ESP ← ESP + SRC; (* Release parameters from calling procedure’s stack *)(* IA-32e Mode *)IF (PE = 1 and VM = 0 and IA32_EFER.LMA = 1) and instruction = far RETTHENIF OperandSize = 32THENIF second doubleword on stack is not within stack limitsTHEN #SS(0); FI;IF first or second doubleword on stack is not in canonical spaceTHEN #SS(0); FI;ELSEIF OperandSize = 16THENIF second word on stack is not within stack limitsTHEN #SS(0); FI;IF first or second word on stack is not in canonical spaceTHEN #SS(0); FI;ELSE (* OperandSize = 64 *)IF first or second quadword on stack is not in canonical spaceTHEN #SS(0); FI;FIFI;IF return code segment selector is NULLRET—Return from ProcedureVol.

2B 4-263INSTRUCTION SET REFERENCE, N-ZTHEN GP(0); FI;IF return code segment selector addresses descriptor beyond descriptor table limitTHEN GP(selector); FI;IF return code segment selector addresses descriptor in non-canonical spaceTHEN GP(selector); FI;Obtain descriptor to which return code segment selector points from descriptor table;IF return code segment descriptor is not a code segmentTHEN #GP(selector); FI;IF return code segment descriptor has L-bit = 1 and D-bit = 1THEN #GP(selector); FI;IF return code segment selector RPL < CPLTHEN #GP(selector); FI;IF return code segment descriptor is conformingand return code segment DPL > return code segment selector RPLTHEN #GP(selector); FI;IF return code segment descriptor is non-conformingand return code segment DPL ≠ return code segment selector RPLTHEN #GP(selector); FI;IF return code segment descriptor is not presentTHEN #NP(selector); FI:IF return code segment selector RPL > CPLTHEN GOTO IA-32E-MODE-RETURN-OUTER-PRIVILEGE-LEVEL;ELSE GOTO IA-32E-MODE-RETURN-SAME-PRIVILEGE-LEVEL;FI;FI;IA-32E-MODE-RETURN-SAME-PRIVILEGE-LEVEL:IF the return instruction pointer is not within the return code segment limitTHEN #GP(0); FI;IF the return instruction pointer is not within canonical address spaceTHEN #GP(0); FI;IF OperandSize = 32THENEIP ← Pop();CS ← Pop(); (* 32-bit pop, high-order 16 bits discarded *)ESP ← ESP + SRC; (* Release parameters from stack *)ELSEIF OperandSize = 16THENEIP ← Pop();EIP ← EIP AND 0000FFFFH;CS ← Pop(); (* 16-bit pop *)ESP ← ESP + SRC; (* Release parameters from stack *)4-264 Vol.

2BRET—Return from ProcedureINSTRUCTION SET REFERENCE, N-ZELSE (* OperandSize = 64 *)RIP ← Pop();CS ← Pop(); (* 64-bit pop, high-order 48 bits discarded *)ESP ← ESP + SRC; (* Release parameters from stack *)FI;FI;IA-32E-MODE-RETURN-OUTER-PRIVILEGE-LEVEL:IF top (16 + SRC) bytes of stack are not within stack limits (OperandSize = 32)or top (8 + SRC) bytes of stack are not within stack limits (OperandSize = 16)THEN #SS(0); FI;IF top (16 + SRC) bytes of stack are not in canonical address space (OperandSize = 32)or top (8 + SRC) bytes of stack are not in canonical address space (OperandSize = 16)or top (32 + SRC) bytes of stack are not in canonical address space (OperandSize = 64)THEN #SS(0); FI;Read return stack segment selector;IF stack segment selector is NULLTHENIF new CS descriptor L-bit = 0THEN #GP(selector);IF stack segment selector RPL = 3THEN #GP(selector);FI;IF return stack segment descriptor is not within descriptor table limitsTHEN #GP(selector); FI;IF return stack segment descriptor is in non-canonical address spaceTHEN #GP(selector); FI;Read segment descriptor pointed to by return segment selector;IF stack segment selector RPL ≠ RPL of the return code segment selectoror stack segment is not a writable data segmentor stack segment descriptor DPL ≠ RPL of the return code segment selectorTHEN #GP(selector); FI;IF stack segment not presentTHEN #SS(StackSegmentSelector); FI;IF the return instruction pointer is not within the return code segment limitTHEN #GP(0); FI:IF the return instruction pointer is not within canonical address spaceTHEN #GP(0); FI;CPL ← ReturnCodeSegmentSelector(RPL);IF OperandSize = 32THENEIP ← Pop();CS ← Pop(); (* 32-bit pop, high-order 16 bits discarded, segment descriptorRET—Return from ProcedureVol.

Характеристики

Тип файла
PDF-файл
Размер
2,04 Mb
Материал
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6366
Авторов
на СтудИзбе
310
Средний доход
с одного платного файла
Обучение Подробнее