0

或多或少需要一些帮助来理解这一点。我们刚刚进入循环和 OFFSET 操作数,希望能得到一些帮助。所以这是我的指示:


使用间接寻址模式的 LOOP 指令编写一个汇编语言程序,计算斐波那契数列中的前 12 个值 {1, 1, 2, 3, 5, 8, 13, ...}。将每个值放在 EAX 寄存器中,并在循环内使用 call DumpRegs 语句显示它。

请使用以下变量定义:Fibonacci BYTE 1, 1, 10 DUP (?)

在循环之后立即插入以下语句。它们将显示目标字符串的十六进制内容: mov esi, OFFSET Fibonacci ;偏移变量 mov ebx,1 ;字节格式 mov ecx, SIZEOF Fibonacci ; 计数器调用 dumpMem ;显示内存中的数据

如果你的程序运行正常,程序运行时你会在屏幕上看到如下的十六进制字节序列:01 01 02 03 05 08 0D 15 22 37 59 90


    .data

Fibonacci BYTE 1, 1, 10 DUP (?)

.code
main PROC

  L1:

  mov   esi, OFFSET Fibonacci       ; offset the variables
  mov   ebx,1               ; byte format
  mov   ecx, SIZEOF Fibonacci       ; counter
  call  dumpMem             ; display the data in the memory


    exit                    ;exits to Operating System
    main ENDP

END main

所以我知道我需要做一个循环语句,但我完全坚持如何开始它。任何建议将不胜感激!

4

2 回答 2

2

我相信你只是想知道如何在汇编中创建一个循环。请参阅下面的一些示例:

带有 ecx 和循环指令的 x86 汇编编程循环与 jmp + j<condition>

于 2013-05-07T01:07:04.010 回答
1
.586
.MODEL FLAT
INCLUDE io.h            ; header file for input/output
.STACK 4096


.DATA

resultLbl BYTE  "The result is", 0
sum     BYTE    11 DUP (?), 0

.CODE
_MainProc PROC

       mov eax,1
       mov ebx,1  ;  will store answer 
      dtoa  sum , eax
      output resultLbl , sum
      dtoa sum ,ebx 
      output  resultLbl ,sum
      mov ecx ,5
_for:
         mov edx , eax
     add edx , ebx
     dtoa sum ,edx
     output  resultLbl ,sum
     mov  eax ,ebx
     mov  ebx ,edx
     dec ecx
     cmp ecx , 0
     jne _for
     mov eax , 0
     ret


_MainProc ENDP
END  
于 2017-12-03T21:24:14.250 回答