Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何保存和恢复堆栈_Assembly - Fatal编程技术网

Assembly 如何保存和恢复堆栈

Assembly 如何保存和恢复堆栈,assembly,Assembly,在模拟-数字混合电路模拟器中,模拟器在某些时刻保存其状态,有时需要恢复状态。数字设备模型是在C++(使用光纤)。当模拟模拟器请求回滚时,数字设备模型应变为先前状态,包括设置所有本地变量和EIP。你能给我一些指导方针吗?数字设备模型采用Visual C++。当数字模型使用VHDL时,我成功地处理了这种情况。在这种情况下,VHDL模型将编译为x86程序集。首先必须定义“状态”。堆栈中的全部内容在某个时间点?堆栈帧位于某个点之上?全局变量?堆变量?线程局部变量?很明显,若你们要拯救这个州,你们必须知道

在模拟-数字混合电路模拟器中,模拟器在某些时刻保存其状态,有时需要恢复状态。数字设备模型是在C++(使用光纤)。当模拟模拟器请求回滚时,数字设备模型应变为先前状态,包括设置所有本地变量和EIP。你能给我一些指导方针吗?数字设备模型采用Visual C++。当数字模型使用VHDL时,我成功地处理了这种情况。在这种情况下,VHDL模型将编译为x86程序集。

首先必须定义“状态”。堆栈中的全部内容在某个时间点?堆栈帧位于某个点之上?全局变量?堆变量?线程局部变量?很明显,若你们要拯救这个州,你们必须知道它到底是什么。我有点不清楚您是从头开始构建模拟器,还是试图修改现有的模拟器。我也不清楚光纤在这个模拟器中扮演什么角色。我正在修改现有的模拟器(向现有的模拟VHDL混合模拟器添加SystemC支持)。在VHDL情况下,VHDL模型在运行时编译为asm代码,这些进程也是我自己的进程,因此我可以更轻松地回滚。SystemC的情况不同,因为整个模型是用VC++编译成dll的。在SystemC的情况下,我单独保存信号(它们是特殊的SystemC对象),但我也应该保存/恢复局部变量和EIP。SystemC使用纤维进行处理:SystemC设备模型dll中的一些芦丁会定期调用。例如:运行时间(model,t)。我应该写两个rutins:rollback_at_now(模型);restore_rollback(model,t)可能我应该保存光纤中的所有局部变量(您提到了一些其他类型的变量,我稍后可能会保存)。设备包括数字进程(例如逻辑门)。光纤用于此子设备。