我如何在装配体中执行DIV操作?

问题描述 投票:0回答:1

我是Assembly的新手,我需要转换此C代码:

rowScreen=((indexMat/10)*2)+7;
colScreen=((indexMat%10)*4)+7;
gotoxyP1()

想法是修改这两个全局变量,但我不了解DIV操作的工作原理,这是我现在的例程:

posCurScreenP1:
    push rbp
    mov  rbp, rsp
    push rax
    push rbx

    mov al, [indexMat]
    mov bl,10
    idiv bl

        ; ... something needs to go here

    call gotoxyP1

    pop rbx
    pop rax
    mov rsp, rbp
    pop rbp
    ret

是否有任何显示DIV / IDIV简单操作的帮助/教程?谢谢!

assembly x86-64 division
1个回答
0
投票
    push r8
    push r9

    mov r8, 7
    mov r9, 10


    mov ax, [indexMat]
    mov bl,10
    div bl

    mov [rowScreen], al ;rowScreen = (indexMat/10)
    mov [colScreen], ah ;colScreen = (indexMat%10)


    mov bl,2
    mul bl
    mov [rowScreen], ax ;rowScreen = (indexMat/10)*2
    add [rowScreen], r8 ; rowScreen = (indexMat/10)*2 +7


    mov al, [colScreen]
    mov bl, 4
    mul bl
    mov [colScreen], ax
    add [colScreen], r9

    ...

也许它不是最佳选择,但我认为它是可行的。

© www.soinside.com 2019 - 2024. All rights reserved.