小编Nic*_*rth的帖子

在汇编中添加浮点/双精度数

我试图尝试内联汇编,我试图在内联汇编中添加十进制数字(不,不是整数).问题是,当我调用以下函数时:

inline double ADD(double num1, double num2) {
  double res;
_asm{

    push eax; push the former state of eax onto stack
    mov eax, num1;
    add eax, num2;
    mov res, eax;
    pop eax; restore the former state of eax now that we are done   
     }  return res;}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨内联汇编中的操作数大小不合适(除了push和pop指令行之外的所有汇编行).所以我必须更改为整数类型,例如unsigned long,然后它可以工作,但当然只支持整数类型; 小数结果四舍五入.

有没有办法添加允许像8.4这样的十进制结果的汇编?

c x86 assembly x87

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

对设置段寄存器感到困惑

我正在编写一个引导加载程序,我正在遵循的教程提供了以下代码:

main:

 ;----------------------------------------------------
 ; code located at 0000:7C00, adjust segment registers
 ;----------------------------------------------------

      cli                       ; disable interrupts
      mov     ax, 0x07C0                ; setup registers to point to our segment
      mov     ds, ax
      mov     es, ax
      mov     fs, ax
      mov     gs, ax

 ;----------------------------------------------------
 ; create stack
 ;----------------------------------------------------

      mov     ax, 0x0000                ; set the stack
      mov     ss, ax
      mov     sp, 0xFFFF
      sti                       ; restore interrupts
Run Code Online (Sandbox Code Playgroud)

我可能误解了一些东西但是如果SS寄存器包含0x0000则不意味着ds,es,fs和gs会重叠堆栈吗?还有fs和gs寄存器的功能是什么?此外,BIOS是否自动设置了cs段?因为它表示代码位于0000:7c00.此外,本教程永远不会解释为什么禁用中断.我在某处读到通常禁用中断以避免死锁.这是什么意思,为什么会发生?

boot x86 assembly bios bootloader

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

在C中的UART中接收未定义大小的消息

我正在为LPC2148编写自己的驱动程序,我想到了一个问题.如何在UART中收到未指定大小的消息?

想到的唯一两件事是:1 - 配置看门狗并在时间用完时结束接收.2-使它无论何时向其发送消息都必须有消息字符结束.

在我看来,第一选择似乎更好,但我想知道是否有人有更好的答案,我知道必须有.

非常感谢你

c arm lpc uart

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

标签 统计

assembly ×2

c ×2

x86 ×2

arm ×1

bios ×1

boot ×1

bootloader ×1

lpc ×1

uart ×1

x87 ×1