注册 登录
编程论坛 汇编论坛

请用nasm编写一段计算pi值的code.

shrluxiao 发布于 2023-07-03 13:47, 1925 次点击
使用莱布尼茨算法即可。
nasm+ld编译器。
2 回复
#2
Valenciax2023-07-04 04:50
程序代码:
section .data
    pi db 0

section .text
    global _start

_start:
    ; 设置循环次数
    mov ecx, 1000000

    ; 初始化计算变量
    mov ebx, 1
    mov edx, 0

    ; 循环计算
    loop_start:
        ; 根据莱布尼茨公式计算
        mov eax, ebx
        shl eax, 1
        dec eax
        mov edi, eax
        mov eax, ebx
        shl eax, 1
        inc eax
        mov esi, eax

        mov eax, 4
        mov edx, 0
        mov ebx, 1
        div esi

        mov eax, 4
        mov edx, 0
        mov ebx, 1
        div edi

        sub eax, edx

        ; 更新计算变量
        add edx, ebx
        mov ebx, edx

        ; 更新pi值
        movzx eax, al
        add dword [pi], eax

        ; 判断循环是否结束
        dec ecx
        jnz loop_start

    ; 输出pi值
    mov eax, 4
    mov ebx, 1
    mov ecx, pi
    mov edx, 4
    int 0x80

    ; 退出程序
    mov eax, 1
    xor ebx, ebx
    int 0x80

#3
shrluxiao2023-07-05 06:21
以下是引用Valenciax在2023-7-4 04:50:13的发言:

section .data
    pi db 0

section .text
    global _start

_start:
    ; 设置循环次数
    mov ecx, 1000000

    ; 初始化计算变量
    mov ebx, 1
    mov edx, 0

    ; 循环计算
    loop_start:
        ; 根据莱布尼茨公式计算
        mov eax, ebx
        shl eax, 1
        dec eax
        mov edi, eax
        mov eax, ebx
        shl eax, 1
        inc eax
        mov esi, eax

        mov eax, 4
        mov edx, 0
        mov ebx, 1
        div esi

        mov eax, 4
        mov edx, 0
        mov ebx, 1
        div edi

        sub eax, edx

        ; 更新计算变量
        add edx, ebx
        mov ebx, edx

        ; 更新pi值
        movzx eax, al
        add dword [pi], eax

        ; 判断循环是否结束
        dec ecx
        jnz loop_start

    ; 输出pi值
    mov eax, 4
    mov ebx, 1
    mov ecx, pi
    mov edx, 4
    int 0x80

    ; 退出程序
    mov eax, 1
    xor ebx, ebx
    int 0x80

只有本站会员才能查看附件,请 登录

nasm+wsl ubuntu编译后不出结果,之前试过别的code。请问问题是在?得用dword ptr [pi]?
1