Как выполнить операцию DIV в сборке? - PullRequest
0 голосов
/ 07 ноября 2019

Я новичок в Assembly и мне нужно преобразовать этот код C:

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

Идея состоит в том, чтобы изменить эти 2 глобальные переменные, но я не понимаю, как работает операция 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? Спасибо!

1 Ответ

0 голосов
/ 07 ноября 2019
    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

    ...

Может быть, это не оптимально, но я думаю, что это работает.

...