小编use*_*453的帖子

汇编指针算术LEA指令

LEA指令是否支持负位移?

mov rax, 1
lea rsi, [rsp - rax]
Run Code Online (Sandbox Code Playgroud)

当我在我的asm文件中使用上面的代码时,我得到了错误:

$ nasm -f macho64 test.asm
$ error: invalid effective address
Run Code Online (Sandbox Code Playgroud)

我知道我们可以在C中做这样的事情:

void foo(char *a, size_t b) {
    *(a - b) = 1;
}
Run Code Online (Sandbox Code Playgroud)

那我假设:

lea rsi, [rsp - rax]    
Run Code Online (Sandbox Code Playgroud)

将工作.

我还尝试使用以下命令查看GCC编译器的功能:

$ gcc -S foo.c // foo.c has the function foo(above) in it
Run Code Online (Sandbox Code Playgroud)

但是我的asm knowleage对我来说还不够理解GCC编译器的asm输出.

谁能解释原因:

lea rsi, [rsp - rax]    ;; invalid effective address
Run Code Online (Sandbox Code Playgroud)

不起作用.我正在使用它们来实现同样的目标:

;; assume rax has some positive number
neg rax    
lea rsi, [rsp + rax] …
Run Code Online (Sandbox Code Playgroud)

assembly pointer-arithmetic

5
推荐指数
1
解决办法
776
查看次数

使按钮一次只打开一个窗口(通过关闭Toplevel窗口启用按钮)

我想NewWinButton一次只创建一个新窗口,这意味着如果

if NewWin.winfo_exists() == 1:
   NewWinButton.config(state='disabled')
else:
   NewWinButton.config(state='normal')
Run Code Online (Sandbox Code Playgroud)

如果我在新窗口中添加一个按钮(QuitButton在本例中),我可以使这个工作:

import tkinter as tk

root = tk.Tk()
root.title('Main Window')
root.geometry('400x400')

def get_new_win():

    NewWin = tk.Toplevel(root)
    NewWin.title('New Window')
    NewWin.geometry('300x300')
    NewWinButton.config(state='disable')

    def quit_win():
        NewWin.destroy()
        NewWinButton.config(state='normal')

    QuitButton = tk.Button(NewWin,text='Quit', command=quit_win).pack()

NewWinButton = tk.Button(root,text='New Window', get_new_win).pack()

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

当且仅当我QuitButton用来关闭新窗口时,这是有效的; 但是,如果我在新窗口中使用关闭按钮,则NewWinButton将保持"禁用"状态.

谁能告诉我如何解决这个问题?

python tkinter

4
推荐指数
1
解决办法
7435
查看次数

标签 统计

assembly ×1

pointer-arithmetic ×1

python ×1

tkinter ×1