或多或少需要一些帮助来理解这一点。我们刚刚进入循环和OFFSET操作数,并希望得到一些帮助。所以这是我的指示:
使用带有间接寻址模式的LOOP指令编写汇编语言程序,该模式计算Fibonacci数序列中的前12个值{1,1,2,3,5,8,13,...}。将每个值放在EAX寄存器中,并在循环内调用DumpRegs语句显示它。
请使用以下变量定义: Fibonacci BYTE 1,1,10 DUP(?)
循环后立即插入以下语句。它们将显示目标字符串的十六进制内容: mov esi,OFFSET Fibonacci;抵消变量 mov ebx,1;字节格式 mov ecx,SIZEOF Fibonacci;计数器 call 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
所以我知道我需要做一个循环语句,但我完全坚持如何开始它。任何建议将不胜感激!
答案 0 :(得分:2)
我相信你只想知道如何在程序集中创建循环。请参阅以下示例:
x86 assembly programming loops with ecx and loop instruction versus jmp + j<condition>
答案 1 :(得分:0)
.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