0
.pos 0x200
.align 4
InputArray: 
 .long 5
 .long 10
Done: .long 0x0

.pos 0x400
.align 4
OutputArray:

.pos 0x0
 irmovl InputArray,%eax
 irmovl OutputArray, %esi

Loop:  
 mrmovl (%eax), %ecx # get first element from InputArray
 mrmovl (%eax), %edi # a copy of first element used for multiplication
 irmovl $4, %ebx # increment the pointer of InputArray
 addl %ebx, %eax
 mrmovl (%eax), %edx # get second element from InputArray
 irmovl $1, %ebx # add first element to its copy for the amount of second element
 subl %ebx, %edx
 jg mult
 rmmovl %ecx,(%esi) # output value to OutputArray

mult:
 addl %edi, %ecx
 subl %ebx, %edx
 jg mult

Exit: halt

これは、私が Y86 用に書いた一対の整数 (5 かける 10) の符号なし乗算を行う非常に単純なプログラムです。

コードを実行すると、結果は次のようになります。

Stopped in 38 steps at PC = 0x42.  Status 'HLT', CC Z=1 S=0 O=0
Changes to registers:
%eax:   0x00000000      0x00000204
%ecx:   0x00000000      0x00000032
%ebx:   0x00000000      0x00000001
%esi:   0x00000000      0x00000400
%edi:   0x00000000      0x00000005

Changes to memory:

計算結果のレジスタ ecx は 16 進数で 32 であるため、mult ループが意図したとおりに実行されたことは確かですが、OutputArray に何も出力されていないため、その理由がわかりません。

4

1 に答える 1