Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- asm
- section .text
- global _sum, _do_the_job
- section .data
- mas_size equ 4
- _do_the_job:
- push ebp
- mov ebp, esp
- ; eax - pointer to array start.
- ; array of integers, step is 4
- mov edi, [ebp+8]
- mov ebx, [ebp+12]
- ; find minimum
- mov ecx, ebx
- mov esi,0
- mov eax,[edi + esi]
- outer:
- push ecx
- mov ecx, ebx
- inner:
- cmp eax,[edi + esi]
- jle no_need
- mov eax,[edi + esi]
- no_need:
- add esi, 4
- loop inner
- pop ecx
- loop outer
- ; subtract
- mov ecx, ebx
- mov esi,0
- _outer:
- push ecx
- mov ecx, ebx
- _inner:
- sub [edi + esi],eax
- add esi, 4
- loop _inner
- pop ecx
- loop _outer
- mov eax,edi
- ; epilogue
- mov esp, ebp
- pop ebp
- ret
- c
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- extern void do_the_job(int* arr, int len);
- #define LEN 7
- void main()
- {
- srand(time(NULL));
- int* a = calloc(LEN * LEN, sizeof(int));
- int i;
- int j;
- for (i = 0; i < LEN; i += 1) {
- for (j = 0; j < LEN; ++j) {
- a[i * LEN + j] = rand() % 98 + 1;
- }
- }
- printf("BeFoRe:\n");
- for (i = 0; i < LEN; i += 1) {
- for (j = 0; j < LEN; ++j) {
- printf("%2d ", a[i * LEN + j]);
- }
- printf("\n");
- }
- do_the_job(a, LEN);
- printf("AfTeR:\n");
- for (i = 0; i < LEN; i += 1) {
- for (j = 0; j < LEN; ++j) {
- printf("%2d ", a[i * LEN + j]);
- }
- printf("\n");
- }
- free(a);
- }
- sh
- clear
- ../nasm -f elf -o 6.o 6.asm
- gcc -c main.c -o main.o
- gcc -o main main.o 6.o
- ./main
- run in cygwin x32
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement