Loops 用汇编语言显示十六进制内容

Loops 用汇编语言显示十六进制内容,loops,assembly,masm,fibonacci,irvine32,Loops,Assembly,Masm,Fibonacci,Irvine32,嘿,伙计们,我不确定我是不是走对了路。我需要Fibonacci序列的前12个数字来计算它已经在做什么,我很确定。但是现在我需要在我的程序中使用dumpMem显示(Fibonacci)的十六进制内容。我需要得到一份打印件:01 01 02 03 05 08 0D 15 22 37 59 90 但我只得到:01 01 00 00 00 非常感谢任何提示或帮助 INCLUDE Irvine32.inc .data reg DWORD -1,1,0 ; Init

嘿,伙计们,我不确定我是不是走对了路。我需要Fibonacci序列的前12个数字来计算它已经在做什么,我很确定。但是现在我需要在我的程序中使用dumpMem显示(Fibonacci)的十六进制内容。我需要得到一份打印件:01 01 02 03 05 08 0D 15 22 37 59 90

但我只得到:01 01 00 00 00

非常感谢任何提示或帮助

 INCLUDE Irvine32.inc
.data

reg DWORD -1,1,0                    ; Initializes a DOUBLEWORD array, giving it the values of -1, 1, and 0
array DWORD 48 DUP(?)
Fibonacci BYTE 1, 1, 10 DUP (?) 



.code
main PROC
       mov array, 1
       mov esi,OFFSET array ; or should this be Fibonacci?
       mov ecx,12
       add esi, 4


    L1:
        mov edx, [reg]
        mov ebx, [reg+4]
        mov [reg+8], edx
        add [reg+8], ebx                    ; Adds the value of the EBX and 'temp(8)' together and stores it as temp(8) 
        mov eax, [reg+8]                    ; Moves the value of 'temp(8)' into the EAX register        
        mov [esi], eax                      ; Moves the value of EAX into the offset of array
        mov [reg], ebx                      ; Moves the value of the EBX register to 'temp(0)' 
        mov [reg+4], eax                    ; Moves the value of the EAX register to 'temp(4)
        add esi, 4

       ; call DumpRegs
        call WriteInt
        loop L1

        ;mov ebx, offset array
        ;mov ecx, 12

        ;L2: 
        ;mov eax, [esi]
        ;add esi, 4
        ;call WriteInt
        ;loop L2

  ;Below will show hexadecimal contents of string target-----------------
   mov   esi, OFFSET Fibonacci      ; offset the variables
   mov   ebx,1                      ; byte format
   mov   ecx, SIZEOF Fibonacci      ; counter
   call  dumpMem 


exit
main ENDP

END main

您对dumpMem的调用是正确的,但是您的程序没有将计算结果存储在正确的位置:您称为“Fibonacci”的区域仍然初始化为1、1和10个零。您需要确保循环以斐波那契加2的偏移量开始写入,并以一个字节的增量移动十次(十次,而不是十二次,因为您在初始值设定项中提供了两个初始项)


很抱歉,我不能说得更具体,因为任何包含“斐波那契”一词的问题都不可避免地会成为某人的家庭作业:-)

您对dumpMem的调用是正确的,但您的程序没有将计算结果存储在正确的位置:您称为“斐波那契”的区域仍然初始化为1、1和10个零。您需要确保循环以斐波那契加2的偏移量开始写入,并以一个字节的增量移动十次(十次,而不是十二次,因为您在初始值设定项中提供了两个初始项)


对不起,我不能说得更具体了,因为任何包含“斐波那契”一词的问题都不可避免地会成为某人的家庭作业:-)

在我看来,这里的问题在于计算斐波那契序列。你的密码让我有点…困惑。你有一堆“东西”,它们似乎与计算斐波那契数无关(例如,
reg
),还有其他一些可能的东西,但你似乎真的不知道你想用它们做什么

看看你计算序列的循环,我首先想到的是你用了很多内存。在编写汇编语言时,首先(也是最重要的)一件事是最大限度地使用寄存器,最大限度地减少内存的使用

作为提示,我认为如果你在计算序列的过程中从内存中读取任何内容,你可能犯了错误。您应该能够在寄存器中完成所有计算,因此唯一的内存引用将是写入结果。由于您(显然)只生成字节大小的结果,因此您应该只需要一个具有适当字节数的数组来保存结果(即,每个要生成的数字一个字节)


我很想写一个小程序,展示如何巧妙地将其应用于汇编语言,但我想我可能不应该这样做…

在我看来,这里的问题在于计算斐波那契序列。你的密码让我有点…困惑。你有一堆“东西”,它们似乎与计算斐波那契数无关(例如,
reg
),还有其他一些可能的东西,但你似乎真的不知道你想用它们做什么

看看你计算序列的循环,我首先想到的是你用了很多内存。在编写汇编语言时,首先(也是最重要的)一件事是最大限度地使用寄存器,最大限度地减少内存的使用

作为提示,我认为如果你在计算序列的过程中从内存中读取任何内容,你可能犯了错误。您应该能够在寄存器中完成所有计算,因此唯一的内存引用将是写入结果。由于您(显然)只生成字节大小的结果,因此您应该只需要一个具有适当字节数的数组来保存结果(即,每个要生成的数字一个字节)


我很想写一个小例程,展示如何巧妙地将其应用于汇编语言,但我想我可能不应该这样做…

你有没有写过任何尝试进行十六进制转换的东西?您所展示的代码似乎只与计算斐波那契序列有关,而与十六进制转换无关。我怀疑任何人都不会在明显的家庭作业上下大力气帮忙,除非你自己做出一些尝试,并就你在作业中遇到的问题提出具体问题。@JerryCoffin dumpMem负责将字节转换为十六进制,您所需要做的就是传递正确的偏移量和长度。@JerryCoffin:斐波那契序列是计算出来的。我现在需要显示偏移量的十六进制内容,这是我遇到问题的地方。;)你有没有写过任何尝试进行十六进制转换的东西?您所展示的代码似乎只与计算斐波那契序列有关,而与十六进制转换无关。我怀疑任何人都不会在明显的家庭作业上下大力气帮忙,除非你自己做出一些尝试,并就你在作业中遇到的问题提出具体问题。@JerryCoffin dumpMem负责将字节转换为十六进制,您所需要做的就是传递正确的偏移量和长度。@JerryCoffin:斐波那契序列是计算出来的。我现在需要显示偏移量的十六进制内容,这是我遇到问题的地方。;)谢谢你的回复。这对我来说是非常新的,我可以告诉你们,我绝对讨厌汇编语言。这是我课程中的必修课,但后来被并入了另一门课,现在我们整个学期只写了两个汇编程序。我只是想解决这个问题,因为每个人,甚至是cs部门的负责人都同意,我永远不需要知道,也永远不会使用汇编语言。@TMan:我不会这么轻率地抛弃汇编语言。即使你最终没有写任何(可能的,但不像你的导师看起来那么明确)