Ввожу массив через С++, вызываю ассемблеровскую функцию, которая каждый элемент массива делит на два, а потом вывожу через С++:
main.cpp
#include <iostream>
extern "C" void ms(int *, int);
int main()
{
int n = 3;
int b[n];
std::cout << "Введите массив: " << std::endl;
for (int i = 0; i < n; i++)
{
std::cout << "array[" << i << "]: ";
std::cin >> b[i];
}
ms(b, n);
std::cout << "Результат: " << std::endl;
for (int i = 0; i < n; i++)
{
std::cout << "array[" << i << "]: " << b[i] << std::endl;
}
return 0;
}
main.asm
section .text
global ms
ms:
mov rbx, 0
mov rcx, rsi
cycl:
mov rax, [rdi+rbx*4]
push rbx
mov rbx, 2
xor rdx, rdx
;add rax, rbx
div rbx
pop rbx
mov [rdi+rbx*4], rax
inc rbx
loop cycl
Makefile
TARGET=main
.PHONY: all cln
all: $(TARGET)
$(TARGET): main.cpp main-asm.o
g++ main.cpp main-asm.o -o $@
main-asm.o: main.asm
nasm -f elf64 main.asm -o $@
cln:
rm -rf $(TARGET) main-asm.o