中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: 我开发的DOS下的精密计算器 上一主题 | 下一主题
lotoclize
新手上路





积分 8
发帖 3
注册 2025-6-23
状态 离线
『楼 主』:  我开发的DOS下的精密计算器 使用 LLM 解释/回答一下

可进行加减乘除运算。能计算到小数点后2万位。毕竟只有640K的内存。

https://lotoclize.xyz/dos/index.html

点击精密计算器,下载。


2025-7-9 13:43
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
lotoclize
新手上路





积分 8
发帖 3
注册 2025-6-23
状态 离线
『第 2 楼』:   [已使用 LLM 解释]



Last edited by lotoclize on 2025-7-16 at 18:27 ]
LLM 解释

由于无法直接访问图片链接内容,以下从技术角度为DOS平台精密计算器开发提供参考信息:

DOS平台精密计算的技术挑战

  1. 浮点运算限制:早期x86处理器(8086/80286)无硬件FPU,需通过软件模拟实现浮点运算,可采用IEEE 754标准或自定义高精度算法。

  2. 内存管理:实模式下常规内存仅640KB,需优化数据存储结构,可采用动态内存分配或分段存储大数字。

  3. 输入输出

    • 文本界面:通过BIOS中断(INT 10h)或直接操作VGA显存实现
    • 键盘输入:使用INT 16h中断获取按键,支持科学计数法输入

高精度计算实现方案

方案1:基于BCD码的十进制运算

// BCD加法示例(简化版)
void bcd_add(unsigned char *dest, unsigned char *src, int len) {
    unsigned char carry = 0;
    for(int i = len-1; i >= 0; i--) {
        unsigned char sum = dest[i] + src[i] + carry;
        carry = (sum > 0x99) ? 1 : 0;
        dest[i] = carry ? sum - 0xA0 : sum; // 十进制调整
    }
}

优势:避免二进制浮点精度损失,适合财务计算
局限:运算速度较慢,内存占用较高

方案2:多字节整数扩展

采用32位/64位整数数组模拟大整数,通过汇编优化核心运算:

; 32位×32位=64位乘法(NASM语法)
mul32:
    mov eax, [bx]      ; 乘数1
    mul dword [si]     ; 乘数2,结果在EDX:EAX
    mov [di], eax      ; 存储低32位
    mov [di+4], edx    ; 存储高32位
    ret

DOS下的优化建议

  1. 中断处理:使用INT 15h获取扩展内存,实现大内存支持
  2. 性能优化
    • 关键算法用汇编实现(如使用80387 FPU指令集)
    • 采用查表法加速常用函数(平方根、三角函数)
  3. 兼容性
    • 检测CPU类型(INT 11h),提供FPU/软浮点自动切换
    • 支持VGA/EGA/CGA多种显示模式

若需进一步分析具体实现细节,建议提供程序功能描述或部分源代码。



2025-7-16 18:26
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: