我被赋予了以下任务:
给定两个具有 16 个元素的数组:NIZA RESW 16 和 NIZB RESW 16
在第三个数组 (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
编译给定数组后,并用以下两个数组对其进行测试,第三个数组仅存储 16 个元素中的 4 个。(如下图所示)
有人知道为什么它只存储 16 个元素中的 4 个吗?任何帮助表示赞赏。
如果您对函数有任何疑问,这些函数print_string
print_int
print_nl
是通过将字符串压入 EAX 寄存器来打印出字符串、换行符和整数的函数,还要注意这是一个 32 位程序。