小编Gub*_*ber的帖子

有没有办法禁用 Ada 中特定类型的算术运算符?

我想将 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 上的代码片段会给出一个错误,指出断言将在运行时失败,但当我将两个数字加在一起时,这是错误的。当尝试对这样的类型进行算术时,有没有办法强制编译器错误或至少发出警告?

types ada gnat

3
推荐指数
1
解决办法
66
查看次数

x86除法异常-返回地址

当尝试在 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)

x86 assembly virtualbox interrupt-handling x86-16

2
推荐指数
1
解决办法
572
查看次数

标签 统计

ada ×1

assembly ×1

gnat ×1

interrupt-handling ×1

types ×1

virtualbox ×1

x86 ×1

x86-16 ×1