汇编语言编写程序实现两个64位二进制数相乘

要求用汇编语言bian✀xie可有偿10R
2025-03-21 03:44:46
推荐回答(3个)
回答1:

这里是另一种方法。供参考:



        CODE  SEGMENT
              ASSUME    CS:CODE
              ORG       100H
      START:  JMP       BEGIN
           X  DQ        111111
              DQ        0           ; 增加 这个是为了左移时有空间
           Y  DQ        11111
           Z  DW        8 DUP(0)
      BEGIN:  PUSH      CS
              POP       DS
              PUSH      CS
              POP       ES
             
              MOV       CX,64
         @0:
              SHR       WORD PTR Y+6,1
              RCR       WORD PTR Y+4,1
              RCR       WORD PTR Y+2,1
              RCR       WORD PTR Y,1
              JNC       @1
              MOV       AX,WORD PTR X
              ADD       WORD PTR Z,AX
              MOV       AX,WORD PTR X+2
              ADC       WORD PTR Z+2,AX
              MOV       AX,WORD PTR X+4
              ADC       WORD PTR Z+4,AX
              MOV       AX,WORD PTR X+6
              ADC       WORD PTR Z+6,AX
              MOV       AX,WORD PTR X+8
              ADC       WORD PTR Z+8,AX
              MOV       AX,WORD PTR X+10
              ADC       WORD PTR Z+10,AX
              MOV       AX,WORD PTR X+12
              ADC       WORD PTR Z+12,AX
              MOV       AX,WORD PTR X+14
              ADC       WORD PTR Z+14,AX
         @1:
              SHL       WORD PTR X,1
              RCL       WORD PTR X+2,1
              RCL       WORD PTR X+4,1
              RCL       WORD PTR X+6,1
              RCL       WORD PTR X+8,1
              RCL       WORD PTR X+10,1
              RCL       WORD PTR X+12,1
              RCL       WORD PTR X+14,1
              DEC       CX
              CMP       CX,0
              JE        @2
              JMP       @0
              
         @2:
              MOV       AX,Z
              MOV       DX,Z+2
              CALL      DISPDXAX

              MOV       AH,4CH
              INT       21H

回答2:

有偿就不必了,必须给采纳啊。
;低位在前,高位在后。
dseg segment
  X db 0FFh, 002h, 0Feh, 0DEH, 04h,  03h,  29h, 77h
  Y db 010h, 001h, 05dh, 078h, 088h, 022h, 94h, 28h
  Z db 20 dup (0)
dseg ends
assume cs:cseg, ds:dseg
cseg segment
start:
  mov ax, dseg
  mov ds, ax
  mov si, 0
  mov ch,8
$0:
  mov cl, 8
  mov bx, 0
$1:
  mov al, X[si]
  mul Y[bx]
  add Z[si+bx], al
  adc Z[si+bx+1], ah
  inc bx 
  dec cl
  jnz $1

  inc si
  dec ch
  jnz $0


  mov ax, 4c00h
  int 21h
cseg ends
  end start

回答3:

选定 Intel CPU 32位指令编写:

ASSUME   CS:CODE, DS:DATA
DATA   SEGMENT

    X1   DQ   123456   ;32位数
    X2   DQ   654321   ;32位数
    
    Y1   DQ   13579
    Y2   DQ   987654
    
    Z1   DQ   0        ;积为128位数
    Z2   DQ   0
    Z3   DQ   0
    Z4   DQ   0
    
DATA   ENDS

CODE   SEGMENT

START:
    MOV   AX, DATA
    MOV   DS, AX

.386
    MOV   EAX, DWORD  PTR  X1
    MUL   DWORD  PTR  Y1
    MOV   DWORD  PTR  Z1, EAX
    MOV   DWORD  PTR  Z2, EDX
    
    MOV   EAX, DWORD  PTR  X2
    MUL   DWORD  PTR  Y1
    ADD   DWORD  PTR  Z2, EAX
    ADC   DWORD  PTR  Z3, EDX

    MOV   EAX, DWORD  PTR  X1
    MUL   DWORD  PTR  Y2
    ADD   DWORD  PTR  Z2, EAX
    ADC   DWORD  PTR  Z3, EDX
    ADC   DWORD  PTR  Z4, 0

    MOV   EAX, DWORD  PTR  X2
    MUL   DWORD  PTR  Y2
    ADD   DWORD  PTR  Z3, EAX
    ADC   DWORD  PTR  Z4, EDX
    
.8086
EXIT:
    MOV   AH, 4CH
    INT   21H
CODE   ENDS
    END   START

本程序实现:X2X1 * Y2Y1 ---> Z4Z3Z2Z1。