35.2.1.10 ОПЕРАЦИИ СО СТЕКОМ




Push to stack



	Memory[Automodified_EA] = Source
Как правило в CISC процессорах данные команды часто являются выделенными (кроме того адресса возврата при вызове подпрограмм тоже ложаться в этот стек). Например x86:
	PUSH	source

		ESP = ESP - 4	  ; Stack pointer register
		MOV	[ESP], source


POP destination MOV destination,[ESP] ESP = ESP + 4

Для RISC машин это самые обычные команды загрузки/выгрузки связанные с памятью, только используется автоинкрементальная/автодекрементальная форма для EA. Например 68K (оно не RISC, но принцип тот-же):
	add	(a4)+,d0	// A4 = A4 + 4  after memory access
	mov	d2,-(a4)	// A4 = A4 - 4  before memory access
Часто режим обновления задается мнемоникой, например PPC:
	ld	r2,4(r3)	// обыная загрузка  
	ldu	r2,4(r3)	// загрузка с обновлением регистра r3
				// после операции
				// r3 = r3 + ((sign_ext(4)) << 2)

	std	r2,4(r3)	// просто запись
	stdu	r2,4(r3)	// обновление r3, потом запись
Заметим, что для PPC - Load обновляет базовы регистр для EA - после, а Store - до (реально просто запись идет по новому EA, а обновление происходит паралельно, то есть если сделать: stdu r2,2(r2) то в память будет записано старое значение r2 (до обновления). Некоторые прхитектуры поддерживают как pre-, так post-обновление и это кодируется в команде. Собственно для архитектур в которых stack pointer не забит жестко аппаратно какой регистр будет служить stack pointer определяется соглашениями по runtime (ABI = Application Binary Interface) для конкретной платформы. --------------------------------------------------------------------------- o Push to Stack X86 PUSH (8)/16/32 R M I --------------------------------------- Z80 PUSH 16 R --------------------------------------- ARM STMcc 32 RR


Pop from stack



	Destination = Memory[Automodified_EA]
Читайте комментарии для push. --------------------------------------------------------------------------- o Pop from Stack X86 POP 16/32 R M --------------------------------------- Z80 POP 16 R --------------------------------------- ARM LDMcc 32 RR --------------------------------------------------------------------------- Note: so, we also may describe TRAPs, conditional TRAPs and stack framing operations, Rotates. That also additional CPUs we must to add: o Zilog Z8000

Index Prev Next