为什么我不能添加数组?

问题描述

我正在尝试将值添加到数组中,然后求平均值。 但是我注意到当我求和时,数组中的值不会超过256。

SECTION .data   ;data section

array:      db  15,15,15
SIZE        EQU 20
    

;sum all positions of vector,length of 20

SECTION .text         ;code section

    global _start
    
    _start:

        xor bl,bl
        xor ecx,ecx
        jmp for_cond        
        
for_body:
        mov al,[array+ECX]
        add bl,al   
        inc ecx

for_cond:
        cmp ecx,SIZE
        jl  for_body    
        

        mov eax,1   ; exit command to kernel
        int 0x80    ; interrupt 80 hex,call kernel

解决方法

您尝试将整个和添加到phi = qubits[0] for i in range(1,len(qubits)): phi = phi + qubits[i] 寄存器中-寄存器只有8位宽,因此最多只能计数255。您最好将主循环更改为

BL

这将实现使用最多可计数65535的16位寄存器。for_body: movzx ax,byte [array+ECX] add bx,ax inc ecx 指令会将您的8位值从存储器扩展为MOVZX中的16位值。然后,您可以使用类似AX的16位寄存器,以便按元素数量(保留在BX或常量CX中)进行最终除法。

注意:
如果您使用带符号的数字而不是无符号的数字,则必须将SIZE替换为MOVZX