2011-11-28 133 views
1

我該如何計算斐波那契數列中的前12個值,並且能夠將它放在EAX寄存器中。並顯示調用DumpRegs?使用間接尋址我知道我需要一個for循環,但我不知道如何去做這件事。任何幫助或提示,表示讚賞。如何在彙編語言中循環

 INCLUDE Irvine32.inc 

; (insert symbol definitions here) 

.data 

; (insert variables here) 
    Fibonacci BYTE 1, 1, 10 DUP (?) 

.code 
main PROC 

; (insert executable instructions here) 


    ; (This below will show hexa contents of string.) 
     mov esi, OFFSET Fibonacci  ; offset the variables 
     mov ebx,1     ; byte format 
     mov ecx, SIZEOF Fibonacci  ; counter 
     call dumpMem 


    exit  ; exit to operating system 
main ENDP 

; (insert additional procedures here) 

END main 

回答

4

你可以做一個循環是這樣的:

mov ecx,12 
your_label: 
; your code 
loop your_label 

循環指令遞減ecx,並跳轉到指定的標籤,除非ecx等於零。您也可以構建同一個循環是這樣的:

mov ecx,12 
your_label: 
; your code 
dec ecx 
jnz your_label 
1

您確定您需要一個for循環來實現自己的目標,所以也許C實現的for循環,組裝,將幫助您:

Code Generation for For Loop 

for (i=0; i < 100; i++) 
{ 
    . . . 
} 

     * Data Register D2 is used to implement i. 
     * Set D2 to zero (i=0) 
     CLR.L D2 

    L1 
     . . . 
     * Increment i for (i++) 
     ADDQ.L #1, D2 
     * Check for the for loop exit condition (i < 100) 
     CMPI.L #100, D2 
     * Branch to the beginning of for loop if less than flag is set 
     BLT.S L1 

SOURCE:eventhelix.com

+3

這看起來像68K彙編而在OP代碼(沒有標記爲這樣)爲86。 – user786653

0
.model small 
.stack 100h 
.data 
    msg db 'Enter height of the square form 1-9: $' 
    hash db '#$' 
    height db 1 
    length db 0 
    ctr dw 0 
    msgagain db 13,10,'Do you want to repeat the program? $' 
    msgend db 13,10,'Program Terminated! Press any key to exit..$' 
.code 
    mov ax, @data 
    mov ds, ax 
REPEAT: 
    mov ax, 03 
    int 10h 

    mov ah, 09 
    lea dx, msg 
    int 21h 

    mov ah, 01 
    int 21h 

    cmp al, '1' 
    jl REPEAT 
    cmp al, '9' 
    jg REPEAT 

    sub al, 48 
    mov length, al 
    mov bl, 1 
    mul bl 

    mov height, 1 
    mov di, 1 
    mov ctr, ax 

    mov cx, ax 
    nextline: 
     dec length 

     mov ah, 02 
     mov bh, 00 
     mov dl, length 
     mov dh, height 
     int 10h 

     mov cx, di 
     hashtags: 
     mov ah, 09 
     lea dx, hash 
     int 21h 
     loop hashtags  

     inc di 
     inc height 
     mov cx, ctr 
     dec ctr 
    loop nextline 

    mov ah, 09 
    lea dx, msgagain 
    int 21h 

    mov ah, 01 
    int 21h 

    cmp al, 'Y' 
    je REPEAT 
    cmp al, 'y' 
    je REPEAT 

    mov ah, 09 
    lea dx, msgend 
    int 21h 

    mov ah, 01 
    int 21h 

    mov ah, 4ch 
    int 21h 

END