LINUX.ORG.RU

Сообщения svh50696

 

с++, nasm, массивы и деление

Ввожу массив через С++, вызываю ассемблеровскую функцию, которая каждый элемент массива делит на два, а потом вывожу через С++:

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

 , ,

svh50696
()

RSS подписка на новые темы