1

私は次の任務を与えられました。

NIZA RESW 16 と NIZB RESW 16
は、3 番目の配列 (NIZC RESW 16) に次の値を格納します: NIZC[i]=NIZA[i]+NIZB[i] MMX 命令を使用し、NASM でコンパイルします。

これは私がこれまでに得たものです:

%include "apicall.inc"
%include "print.inc"

segment .data
unos1 db "Array A: ", 0
unos2 db "Array B: ", 0
ispisC db "Array C : ", 0

segment .bss
  NIZA RESW 16
  NIZB RESW 16
  NIZC RESW 16

segment .text
global start

start:
call init_console
mov esi,0
mov ecx, 16

mov eax, unos1
call print_string
call print_nl

unos_a:
call read_int
mov [NIZA+esi], eax
add esi, 2
loop unos_a

mov esi,0
mov ecx, 16
mov eax, unos2
call print_string
call print_nl

unos_b:
call read_int
mov [NIZB+esi], eax
add esi, 2
loop unos_b

movq mm0, qword [NIZA]
movq mm1, qword [NIZB]
paddq mm0, mm1
movq qword [NIZC], mm0


mov esi,NIZC
mov ecx,16
mov eax, ispisC
call print_string
call print_nl

ispis_c:
mov ax, [esi]
movsx eax, ax
call print_int
call print_nl
add esi, 2
loop ispis_c

APICALL ExitProcess, 0

指定された配列をコンパイルし、次の 2 つの配列でテストした後、3 番目の配列には 16 個の要素のうち 4 個の要素しか格納されません (次の図を参照)。

スクリーンショット

16要素のうち4要素しか保存しない理由を誰か知っていますか? どんな助けでも大歓迎です。
関数について質問がある場合print_string print_int print_nlは、文字列、改行、および整数を EAX レジスタにプッシュして出力する関数であり、これが 32 ビット プログラムであることにも注意してください。

4

1 に答える 1