我试图尝试内联汇编,我试图在内联汇编中添加十进制数字(不,不是整数).问题是,当我调用以下函数时:
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这样的十进制结果的汇编?
我正在编写一个引导加载程序,我正在遵循的教程提供了以下代码:
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.此外,本教程永远不会解释为什么禁用中断.我在某处读到通常禁用中断以避免死锁.这是什么意思,为什么会发生?
我正在为LPC2148编写自己的驱动程序,我想到了一个问题.如何在UART中收到未指定大小的消息?
想到的唯一两件事是:1 - 配置看门狗并在时间用完时结束接收.2-使它无论何时向其发送消息都必须有消息字符结束.
在我看来,第一选择似乎更好,但我想知道是否有人有更好的答案,我知道必须有.
非常感谢你