Просмотр полной версии : Содержимое стека после POP AF/PUSH AF
Будет ли содержимое стека гарантированно прежним после выполнения пары команд POP AF/PUSH AF? А на 8080/8085?
Будет ли содержимое стека гарантированно прежним после выполнения пары команд POP AF/PUSH AF? А на 8080/8085?
1.да
2.скорее всего да
Содержимое стека (ячеек памяти стека) будет затёрто значениями аккумулятора и регистра флагов. Если вопрос был про содержимое рег. пары [SP], то оно останется прежним.
Попробую перефразировать вопрос, что бы не было недопонимания. В вершине стека записано слово 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 не будет давать никакого нового результата
Нет
Ответ относится к обоим процессорам? А где можно об этом почитать?
Про 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 . Если разрешены прерывания и попадём как раз в разрыв между командами, то что-нибудь точно изменится.
ну чисто визуально на кристале у AF все 16 битов
Нет, реально бро, ты смерти моей хочешь...
Вот заморочился я уже разглядыванием и расшифровкой этих блин картинок, тут ведь жизни не хватит!
Ну блин...
CPU последовательно выполняет команды две команды: POP AF и PUSH AF.
Упс, не обратил внимание на последовательность выполнения команд... думал, что PUSH, а затем POP. А какой вообще смысл в последовательности POP->PUSH ?
Будет ли на стеке гарантированно тоже самое число?
Не во всех случаях! Если до этого в стек было записано не командой PUSH AF, то незначащие биты регистра флагов будут принудительно перезаписаны константами.
Упс, не обратил внимание на последовательность выполнения команд... думал, что PUSH, а затем POP. А какой вообще смысл в последовательности POP->PUSH ?
в А перенести содержимое например B H D
Не во всех случаях! Если до этого в стек было записано не командой PUSH AF, то незначащие биты регистра флагов будут принудительно перезаписаны константами.
данные на вершине стека не поменяются на Z80
в А перенести содержимое например B H D
MOV A,x проще и логичнее.
данные на вершине стека не поменяются на Z80
А на i8080/85 поменяются:
http://900igr.net/up/datai/234958/0019-003-.png
т.к. D1="1", D3=D5="0" выставятся принудительно, независимо от того, что было ранее в стеке.
MOV A,x проще и логичнее.
я конечно извиняюсь но это не всегда возможно.
в HL например могут быть уже совершенно другие данные.
в HL например могут быть уже совершенно другие данные.
LDA xxxx
LDA xxxx
итак вот такой случай
ld hl,coords
push hl
;делаем какие то действия с вычислениями
;выходим по исключению
jp z,out
pop af
push af
;a требуемое нам содержимое H
pop hl - HL снова требуемое нам содержимое
;продолжаем вычисления.
out
pop hl
ret
ваши предложения.
ваши предложения.
MOV A,H
STA VAR_H+1
...
VAR_H:MVI A,0
Шесть байт против двух.
Расточительство.
Dart Alver
26.04.2020, 18:51
ваши предложения.
Ну если
pop af
dec sp
dec sp
не катит, рискну ещё предложить:
ex (sp),hl
ld a,h
ex (sp),hl
Количество тактов правда возрастает в двое ))
Ну если
pop af
dec sp
dec sp
не катит, рискну ещё предложить:
ex (sp),hl
ld a,h
ex (sp),hl
Количество тактов правда возрастает в двое ))
на Z80 все нормально. I8080 придется как то по другому. ТС наверное все уже решил.
рискну ещё предложить:
ex (sp),hl
ld a,h
ex (sp),hl
Позже тоже об этом варианте подумал ;)
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot