首页 > 解决方案 > 如何在 8086 汇编中将两个 16 位 dW 合并到一个 DD 数中

问题描述

使用以下代码,我计算斐波那契数列的前 30 个元素。请注意,arr 的每两个元素代表斐波那契数列的一个元素,而第 26 个元素之后的斐波那契数将需要超过 2 个字节来表示。

StSeg   Segment STACK 'Stack'
        DB 100H DUP (?)
StSeg   Ends

DtSeg   Segment
        arr   dw 62 dup (?)
        the30 dd ?
DtSeg   Ends

CDSeg   Segment
        ASSUME CS:CDSeg, DS:DtSeg, SS:StSeg
Start:
        MOV AX, DtSeg ; set DS to point to the data segment
        MOV DS,AX
        
        ; PROBLEM: STORE FIRST TWENTY ELEMENTS OF FIBONACCI IN AN ARRAY FROM MEMORY.
        ; SOLUTION:
        mov bx, offset arr
        add bx, 2
        mov [bx], 00H
        add bx, 4
        mov [bx], 01H
        ; inited fibo[0] = 00000000H and fibo[1] = 00000001H    
        mov cx, 29; make while loop counts 29 times.
        while:   
        
        ;first part addition
        mov ax, [bx]
        mov dx, [bx-4] 
        add ax, dx
        mov dx, 00H
        jnc else
        mov dx, 01H          
        
        ; second part addition
        else:
        mov [bx+4], ax
        mov ax, [bx-2]
        add dx, [bx-6]
        add ax, dx
        mov [bx+2], ax
        add bx, 4
        loop while
        
        
        MOV AH, 4CH
        MOV AL, 0
        INT 21H
CDSeg   ENDS
END Start

我的大学作业要求将第 30 个元素存储在名为the30的变量中,其中DD但我不知道当所有寄存器最多为 16 位时这怎么可能。

有没有办法做到这一点?

标签: assemblyfibonacciemu8086bigintextended-precision

解决方案


推荐阅读