2011-11-28 103 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