Untitled

 avatar
unknown
plain_text
a year ago
2.0 kB
7
Indexable
#include <stdio.h>

void convert_numbers_to_string(int* numbers, int size) {
    char output[100] = {0}; // laikina eilutė rezultatams
    char sum = 0;
    int zero_flag = 0;

    __asm {
        xor ecx, ecx            // Nustatome ciklo skaitiklį
        xor ebx, ebx            // EBX naudojame kaip rodyklę į masyvo elementą
        lea ebx, numbers        // Įkeliame masyvo pradžios adresą į EBX

        loop_start:
        cmp ecx, size           // Tikriname, ar pabaigėme peržiūrėti visus elementus
        jge loop_end

        mov edx, [ebx + ecx*4]  // Įkeliamas dabartinis skaičius iš masyvo
        cmp edx, 10             // Ar skaičius yra vienženklis?
        jge too_large           // Jei ne, vykdomas pertraukimas
        cmp edx, 0              // Ar skaičius yra 0?
        je has_zero             // Jei taip, praleidžiame šį žingsnį

        add sum, dl             // Pridedame skaičių prie sumos
        jc sum_overflow         // Tikriname ar neviršytas 8 bitų limitas

        add dl, '0'             // Konvertuojame skaičių į ASCII simbolį
        mov [output + ecx], dl  // Įrašome simbolį į rezultatų eilutę

        jmp next_element

        has_zero:
        mov zero_flag, 1        // Nustatome, kad buvo rastas 0

        next_element:
        inc ecx                 // Padidiname ciklo skaitiklį
        jmp loop_start          // Grįžtame į ciklo pradžią

        too_large:
        mov output, "skaiciu masyve yra ne vienazenklis skaicius"
        jmp loop_end

        sum_overflow:
        mov output, "skaiciu suma virsija 8 bitu talpa"

        loop_end:
    }

    printf("%s\n", output);
    if (zero_flag) {
        printf("skaiciu masyve buvo 0\n");
    }
}

int main() {
    int numbers[] = {4, 8, 7, 6, 1};
    int size = sizeof(numbers) / sizeof(numbers[0]);
    convert_numbers_to_string(numbers, size);
    return 0;
}
Editor is loading...
Leave a Comment