0

我在 Linux 上的英特尔处理器上用 asm x64 编写了这段代码,它应该计算 RDI 内容的位数并将结果返回到 RAX。它只是将 RAX 除以 10,直到 RAX 等于 0(直到商等于 0)。在每个循环中,RCX 都会增加:

bits 64
global _start

section .text

_start:
    mov rdi,1234
    
    push rcx
    push rsi
    push rdx

    mov rsi,0xa
    mov rax,rdi
    xor rcx,rcx

func_loop:
    cmp rax,0x0
    jz func_fin
    inc rcx
    div rsi
    jmp func_loop

func_fin:
    mov rax,rcx

    pop rdx
    pop rsi
    pop rcx

    mov rax,0x3c ; sys_exit
    mov rdi,0x0
    syscall

执行时,程序似乎处于无限循环中...... GDB 告诉我:

在此处输入图像描述

你能告诉我为什么 RAX 内容突然从 123 变为 7378697629483820658 吗?我误解了 DIV 指令的使用吗?

感谢大家对此的关注。

4

0 回答 0