小编Tu *_* Do的帖子

(int)(unsigned char)(x)在C中做什么?

文件ctype.h,线20,__ismask被定义为:

#define __ismask(x) (_ctype[(int)(unsigned char)(x)])
Run Code Online (Sandbox Code Playgroud)

怎么(int)(unsigned char)(x)办?我猜它会转换x为unsigned char(只检测第一个字节而不管x),但是为什么它会被转换int为最后一个?

c

6
推荐指数
1
解决办法
821
查看次数

如何在中断处理程序中除以零?

对于与编码错误相关的中断,操作系统中断处理程序应该做什么?

例如,我试图除以0来测试我的中断并调用我的中断处理程序.然而,由于DIV指令未成功执行,EIP不会更新到之后的下一个指令,并从中断处理程序返回后用iret,它可以追溯到错误的div指令一次.

  mov ax, 3
  mov dl, 0
  div dl    ; go back here again and again
Run Code Online (Sandbox Code Playgroud)

处理此中断的正确方法是什么?我想到的几种方式:

  • 变化dl比0.但是其他别的东西,我不知道如果dl一旦有事能保持,并中断程序应该退出后恢复寄存器,而我不认为默默地提供错误的计算是很好的纠正错误.

  • 之后检索下一条指令div.但是,我没有想到任何简单可靠的方法来获取下一条指令.

  • 修改当前包含返回地址的一些其他的代码地址堆栈的顶部.所以,我们不再回到div教学了.

x86 assembly operating-system nasm

4
推荐指数
2
解决办法
1045
查看次数

标签 统计

assembly ×1

c ×1

nasm ×1

operating-system ×1

x86 ×1