装配错误处理
Assembly error handling
我创建了一个函数用于在汇编中读取十进制数,我想做一些类似throwing的事情如果输入 非数字字符 ,则异常。
我的想法是相应地设置一些 flag(s),并在 main 中处理这些。
哪种 标志 最适合这种情况,我如何 设置 this/these?
所以如果你想使用一个实际的异常,这将是 abi 依赖的....请记住,如果你想创建一个 C++ 异常 可能 但你不想......如果它只是为了存储状态,只需将它放在寄存器中,或者复制到传入的地址,如果你需要它生活更高的调用堆栈...
可能对您有用的方法是编写一个预定义的地址并调用一个信号,例如 SIGINT 并让信号处理程序为您修复问题……这是一种笨拙的方式,可以完成诸如异常之类的事情。 ..
在x86架构上,进位标志(CF)在历史上一直用于此类目的,可能是因为它最方便操作:可以使用STC
和CLC
指令设置和清除它。中断标志和方向标志(IF、DF)具有相似的指令,但更改这些标志往往会对其他代码产生重大影响;特别是方向标志,通常需要各种调用约定以一种或另一种方式设置,中断标志屏蔽中断,这是一种不应该依赖于解析整数失败的可见效果(例如)。
虽然我不会将其与正确的异常抛出和处理进行比较,但在 return 之前设置进位标志可以指示错误,并且调用者可以检查进位标志(使用 jc
return 上的指令)以适当地处理错误。
我创建了一个函数用于在汇编中读取十进制数,我想做一些类似throwing的事情如果输入 非数字字符 ,则异常。 我的想法是相应地设置一些 flag(s),并在 main 中处理这些。 哪种 标志 最适合这种情况,我如何 设置 this/these?
所以如果你想使用一个实际的异常,这将是 abi 依赖的....请记住,如果你想创建一个 C++ 异常 可能 但你不想......如果它只是为了存储状态,只需将它放在寄存器中,或者复制到传入的地址,如果你需要它生活更高的调用堆栈...
可能对您有用的方法是编写一个预定义的地址并调用一个信号,例如 SIGINT 并让信号处理程序为您修复问题……这是一种笨拙的方式,可以完成诸如异常之类的事情。 ..
在x86架构上,进位标志(CF)在历史上一直用于此类目的,可能是因为它最方便操作:可以使用STC
和CLC
指令设置和清除它。中断标志和方向标志(IF、DF)具有相似的指令,但更改这些标志往往会对其他代码产生重大影响;特别是方向标志,通常需要各种调用约定以一种或另一种方式设置,中断标志屏蔽中断,这是一种不应该依赖于解析整数失败的可见效果(例如)。
虽然我不会将其与正确的异常抛出和处理进行比较,但在 return 之前设置进位标志可以指示错误,并且调用者可以检查进位标志(使用 jc
return 上的指令)以适当地处理错误。