Те из вас, кто рыскает над сборками, заметят, что я довольно много писал, пытаясь разобраться в сборке, каждый раз изучая что-то новое.сборка intel x86 Структуры и приемные структуры в качестве аргумента
Я был занят работой с кодом в сборке и запуском небольшого теста, чтобы узнать, получаю ли я те же результаты. Следующий бит c-кода, который я перевожу, имеет структуры, и я не могу найти хороший, полный пример для этого.
Вот мой C код:
typedef struct item {
int number;
char name[32];
} item;
/**
* Performs a binary sort on the items pointed to by the parameter list.
*
* @param[in/out] list pointer to an array of items
* @param[in] n total number of elements in the array
*/
void binary_sort_c(item *list, int n) {
int i;
int j;
int bottom;
int top;
int middle;
item temp;
if (list != NULL) {
i = 1;
while (i < n) {
temp = list[i];
bottom = 0;
top = i-1;
while (bottom <= top) {
middle = (bottom+top)/2;
if (temp.number < list[middle].number) {
top = middle-1;
} else {
bottom = middle+1;
}
}
j = i-1;
while (j >= bottom) {
list[j+1] = list[j];
j = j-1;
}
list[bottom] = temp;
i = i+1;
}
}
}
Теперь здесь лежит моя проблема, я не могу показаться, чтобы выяснить, как использовать эту структуру в сборке. Должен ли я переделать структуру в сборке, если она передана в качестве аргумента для сборки с помощью кода c?
Как получить доступ к различным элементам структуры в сборке? Например, temp.number
Как проверить, есть ли в сборке list = NULL
?
Небольшой примерный код, который я мог бы использовать в качестве шаблона для работы и понимания, был бы идеальным.
'list' только простой аргумент указатель, так что вы проверить NULL, как обычно, по сравнению с нуля. Что касается доступа к членам, вам необходимо знать смещения. – Jester
@Jester поэтому достаточно проверить 'if (list! = NULL)', 'mov eax, list',' cmp eax, 0' 'jne LABEL'? – Monkleys
Да, это будет работать, в зависимости от того, как был объявлен «список». – Jester