Untitled
unknown
plain_text
2 years ago
2.0 kB
10
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