Вход

Просмотр полной версии : Содержимое стека после POP AF/PUSH AF



Dec
25.04.2020, 20:46
Будет ли содержимое стека гарантированно прежним после выполнения пары команд POP AF/PUSH AF? А на 8080/8085?

jerri
25.04.2020, 21:03
Будет ли содержимое стека гарантированно прежним после выполнения пары команд POP AF/PUSH AF? А на 8080/8085?

1.да
2.скорее всего да

Denn
26.04.2020, 00:56
Содержимое стека (ячеек памяти стека) будет затёрто значениями аккумулятора и регистра флагов. Если вопрос был про содержимое рег. пары [SP], то оно останется прежним.

Dec
26.04.2020, 01:11
Попробую перефразировать вопрос, что бы не было недопонимания. В вершине стека записано слово NNNN. CPU последовательно выполняет команды две команды: POP AF и PUSH AF. Будет ли на стеке гарантированно тоже самое число?

NEO SPECTRUMAN
26.04.2020, 06:28
Попробую перефразировать вопрос,
по версии emuzwin будет тоже самое (но это кривой эмулятор :) )

сами push pop на флаги не влияют чтобы что то повредить

но вот можно ли писать в недокументированные флаги
упоминания я не помню

только говориться что их можно читать

- - - Добавлено - - -

ну чисто визуально на кристале у AF все 16 битов
http://static.righto.com/images/z80/die_register_zoom.png
можно предположить что в них можно и писать

и что pop af : push af не будет давать никакого нового результата

ivagor
26.04.2020, 06:58
А на 8080/8085?
Нет

Dec
26.04.2020, 07:31
Нет
Ответ относится к обоим процессорам? А где можно об этом почитать?

ivagor
26.04.2020, 08:01
Про 8080 можно посмотреть например здесь (https://pastraiser.com/cpu/i8080/i8080_opcodes.html)
Про 8085 здесь (http://www.righto.com/2013/02/looking-at-silicon-to-understanding.html#ref1), в pdfах по первой и по третей ссылке

Lethargeek
26.04.2020, 08:21
Ответ относится к обоим процессорам? А где можно об этом почитать?
вот здесь можно, правда, на аглицком: https://retrocomputing.stackexchange.com/questions/12300/bit-one-of-the-intel-8080s-flags-register
вкратце - у 8080 вообще нет "регистра флагов" как такового, и при пуше байт конструируется
у 8085 вроде как уже отдельный регистр, но всё равно один бит принудительно обнуляется

Dart Alver
26.04.2020, 11:00
Будет ли содержимое стека гарантированно прежним после выполнения пары команд POP AF/PUSH AF?
Вопрос на засыпку однако ))
А насколько критичен ответ ? Если заменить на POP AF : DEC SP : DEC SP , то +1 лишний байт и +1 лишний такт, но гарантированно стек не рухнет ))

- - - Добавлено - - -

Упс ! Соврал, может рухнуть, как впрочем и на POP AF : PUSH AF . Если разрешены прерывания и попадём как раз в разрыв между командами, то что-нибудь точно изменится.

Destr
26.04.2020, 11:45
ну чисто визуально на кристале у AF все 16 битов
Нет, реально бро, ты смерти моей хочешь...
Вот заморочился я уже разглядыванием и расшифровкой этих блин картинок, тут ведь жизни не хватит!
Ну блин...

Denn
26.04.2020, 12:07
CPU последовательно выполняет команды две команды: POP AF и PUSH AF.

Упс, не обратил внимание на последовательность выполнения команд... думал, что PUSH, а затем POP. А какой вообще смысл в последовательности POP->PUSH ?



Будет ли на стеке гарантированно тоже самое число?

Не во всех случаях! Если до этого в стек было записано не командой PUSH AF, то незначащие биты регистра флагов будут принудительно перезаписаны константами.

jerri
26.04.2020, 13:18
Упс, не обратил внимание на последовательность выполнения команд... думал, что PUSH, а затем POP. А какой вообще смысл в последовательности POP->PUSH ?


в А перенести содержимое например B H D


Не во всех случаях! Если до этого в стек было записано не командой PUSH AF, то незначащие биты регистра флагов будут принудительно перезаписаны константами.

данные на вершине стека не поменяются на Z80

Denn
26.04.2020, 14:18
в А перенести содержимое например B H D

MOV A,x проще и логичнее.



данные на вершине стека не поменяются на Z80

А на i8080/85 поменяются:

http://900igr.net/up/datai/234958/0019-003-.png

т.к. D1="1", D3=D5="0" выставятся принудительно, независимо от того, что было ранее в стеке.

jerri
26.04.2020, 14:37
MOV A,x проще и логичнее.


я конечно извиняюсь но это не всегда возможно.
в HL например могут быть уже совершенно другие данные.

Denn
26.04.2020, 15:48
в HL например могут быть уже совершенно другие данные.

LDA xxxx

jerri
26.04.2020, 17:24
LDA xxxx

итак вот такой случай



ld hl,coords
push hl

;делаем какие то действия с вычислениями
;выходим по исключению
jp z,out


pop af
push af

;a требуемое нам содержимое H

pop hl - HL снова требуемое нам содержимое

;продолжаем вычисления.

out
pop hl
ret



ваши предложения.

Denn
26.04.2020, 17:54
ваши предложения.

MOV A,H
STA VAR_H+1

...

VAR_H:MVI A,0

LW
26.04.2020, 18:06
Шесть байт против двух.
Расточительство.

Dart Alver
26.04.2020, 18:51
ваши предложения.
Ну если

pop af
dec sp
dec sp

не катит, рискну ещё предложить:

ex (sp),hl
ld a,h
ex (sp),hl


Количество тактов правда возрастает в двое ))

jerri
26.04.2020, 19:10
Ну если

pop af
dec sp
dec sp

не катит, рискну ещё предложить:

ex (sp),hl
ld a,h
ex (sp),hl


Количество тактов правда возрастает в двое ))

на Z80 все нормально. I8080 придется как то по другому. ТС наверное все уже решил.

Denn
26.04.2020, 21:02
рискну ещё предложить:

ex (sp),hl
ld a,h
ex (sp),hl



Позже тоже об этом варианте подумал ;)