我想将 HTML 响应状态代码数字定义为一种类型,但不允许使用算术运算符,因为这对它们来说没有意义。
type Status_Code is range 100 .. 599;
function "+" (Left, Right : Status_Code) return Status_Code is
begin
pragma Assert (1 = -1);
return Left + Right;
end;
Run Code Online (Sandbox Code Playgroud)
上面 GNAT 上的代码片段会给出一个错误,指出断言将在运行时失败,但当我将两个数字加在一起时,这是错误的。当尝试对这样的类型进行算术时,有没有办法强制编译器错误或至少发出警告?
当尝试在 x86 程序集中为引导加载程序编写一些例程时,我遇到了一个错误,当发生除法错误时,程序将陷入无限循环。通过调查,我发现调用 int 0 会正常通过异常处理程序,然后继续执行程序的其余部分。为 x86 编写自己的异常处理程序,发生除法错误异常时的返回地址是指令的地址,这意味着它将永远循环执行除法。这是正常行为还是 Virtualbox/我的 cpu 特有的错误?
org 0x7c00 ;put all label addresses at offset 0x7c00
xor ax, ax ;set up all segment registers
mov ds, ax
mov ax, 0x9000
mov ss, ax
mov sp, 0x1000
mov ax, 0xB800 ;video text memory starts at this address
mov es, ax
mov ah, 0x00
mov al, 0x02
int 0x10 ;go into 80x25 monochrome text
mov [0x0000], word DivideException
mov [0x0002], word 0x0000
xor di, di
xor bx, bx …Run Code Online (Sandbox Code Playgroud)