[/b/] [/d/] [/tu/] [/a/] [/ph/] [/wa/] [/cg/] [/t/] [/p/]

[Burichan] [Foliant] [Futaba] [Greenhell] [Gurochan] [Photon] - [Home] [Manage] [Archive]

[Return]
Posting mode: Reply
Leave these fields empty (spam trap):
Name
Link
Subject
Comment
File
Verification
Password (for post and file deletion)
  • Supported file types are: GIF, JPG, PDF, PNG
  • Maximum file size allowed is 30720 KB.
  • Images greater than 200x200 pixels will be thumbnailed.

File: 1764610132585.jpg -(115625 B, 1080x1177) Thumbnail displayed, click image for full size.
115625 No.235386  

как в ассамблерном языке NASM можно написать как можно более быстрый остаток от деления, когда деление округляет в ближайшую сторону?
Вот пример кода на NASM:
section .text
global _start
_start:
; золотое сечение
mov rbp, rsp
push qword -1836311903 ; [rbp-8]
push qword -1134903170 ; [rbp-16]

; алгоритм Евклида
; <БЕНЧМАРК>
rdtsc
push rax ; [rbp-24]

; {

; rdx — числ. & rcx — знам.
mov rdx, [rbp-8]
cmp rdx, 0
jns _1
neg rdx
_1:
mov rcx, [rbp-16]
cmp rcx, 0
jns _2andeuclid_loop
neg rcx
; сам алгоритм Евклида
_2andeuclid_loop:
cmp rcx, 0
jz _euclid_loop_end

mov rax, rdx
xor rdx, rdx
div rcx
  ; место, которым отличаются 2 варианта алгоритма.
; либо остаток от деления, округляющего вниз,
; либо остаток от деления, округляющего к ближайшему:
;
; mov rbx, rdx ; rbx — temp
; shl rbx, 1
; cmp rbx, rcx
; js _3
; sub rdx, rcx
; neg rdx
; _3:

xor rdx, rcx
xor rcx, rdx
xor rdx, rcx

jmp _2andeuclid_loop
_euclid_loop_end:
push rdx ; НОД: [rbp-32]

; }

rdtsc
sub rax, [rbp-24]
mov qword [rbp-24], rax
; </БЕНЧМАРК>

mov rax, 60 ; syscall: exit
xor rdi, rdi ; exit code 0
syscall
(см закомментированную часть кода, которым отличаются два алгоритма) — можно ли этот код как-то поправить, чтобы ускорить выполнение этой программы? Или этот код уже является реально самым быстрым для решения алгоритмом Эвклида? Акцент делается на взятии остатка, мы же измеряем скорость для этого остатка.

>> No.235387  

Значимость этой задачки в том, что это поможет реализовать ассемблерную вставку на Си для рациональных чисел.

>> No.235388  

>>235386

> как можно более быстрый остаток от деления

Прочитать *DX, очевидно же.

>> No.235400  

>>235388
а ещë как? Вроде это мало что даëт.

>> No.235401  

>>235400
Инструкции div/idiv кладут его в эти регистры.



Delete Post []
Password

[/b/] [/d/] [/tu/] [/a/] [/ph/] [/wa/] [/cg/] [/t/] [/p/]