如何用汇编语言强制更改CS
和IP
?
ORG
指令可用于更改IP
的数量,但您如何更改CS
?
基本上我想用汇编来实现多线程。
许多论坛,包括堆栈溢出问题都说它不可能,但那么C有多线程选项,即使是汇编代码也是如此?
答案 0 :(得分:6)
要更改cs:ip
,只需使用jmp
(例如jmp segment:offset
)或长call
(例如call segment:offset
)进行长跳转,具体取决于您的需要。 jmp
link和call
link可以使用多种不同的寻址模式。实现多线程与简单地改变cs:ip
完全不同。
答案 1 :(得分:2)
我认为你可以只使用
jmp segment:offset
call segment:offset
答案 2 :(得分:1)
只有远程控制传输指令(jmp,call,ret)才能更改CS或EIP寄存器。我认为CS寄存器只能在实模式下更改。
RET基本上取ESP(堆栈指针)的值并将其推送到IP / EIP。然后ESP增加8加上立即偏移(如果存在)。
答案 3 :(得分:1)
要更改 cs
和 ip
寄存器,请在 AT&T 语法中使用以下内容:
ljmp $segment, $offset
或英特尔语法中的以下内容:
jmp segment:offset