問題描述
將小於 %ecx 的 1 推入堆棧 (push 1 less than %ecx to stack)
我正在嘗試將 比 %ecx 小一
的值壓入堆棧。
因此我嘗試了這條指令:
pushl $(%ecx ‑ 1)
但是我從 as
得到以下錯誤。
fact.s: Assembler messages:
fact.s:49: Error: register value used as expression
作為一種解決方法,我做了以下操作:
movl %ecx, %edx
subl $1, %edx
pushl %edx
但是有沒有辦法做到這一點不使用額外的寄存器(在這種情況下為 %edx
)?並在一條指令中?
參考解法
方法 1:
Without extra registers? Sure. dec/push/inc. One instruction? No.
decl %ecx
pushl %ecx
incl %ecx
方法 2:
Two instructions:
pushl %ecx
subl $1, (%esp) # or decl (%esp)
(by sps、Sami Kuhmonen、rkhb)