How to loop in assembly language

后端 未结 3 935
遥遥无期
遥遥无期 2021-02-11 08:39

How would I calculate the first 12 values in the Fibonacci number sequence and be able to place it in EAX reg. and display calling DumpRegs? Using Indirect addressing I know I n

相关标签:
3条回答
  • 2021-02-11 09:04

    You can make a loop like this:

    mov ecx,12
    your_label:
    ; your code
    loop your_label
    

    The loop instruction decrements ecx and jumps to the specified label unless ecx is equal to zero. You could also construct the same loop like this:

    mov ecx,12
    your_label:
    ; your code
    dec ecx
    jnz your_label
    
    0 讨论(0)
  • 2021-02-11 09:14

    You determined that you need a for loop to achieve your goal, so maybe the C implementation of the for loop, in assembly, will help you:

    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

    0 讨论(0)
  • 2021-02-11 09:26
    .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
    
    0 讨论(0)
提交回复
热议问题