после запуска этой программы я получил ошибку 'Ошибка сегментации (сброшено ядро)'. Я использую Ubuntu 14.04. Может кто-нибудь сказать мне, что это за ошибка и как ее исправить? вот код:
#include<stdlib.h>
#include<stdio.h>
typedef struct {
char hex[17];
char dezimal[21];
}Stu;
extern Stu* _structfunc(int n);
int main(int argc, char *argv[])
{
Stu* a = _structfunc(123456);
printf("%s,%s",a->hex,a->dezimal);
free (a);
return 0;
}
LEN_HEX equ 16
LEN_DEZ equ 10
LEN_STRUCT equ LEN_HEX + 1 + LEN_DEZ + 1
SECTION .data
base10 dq 10
base16 dq 16
SECTION .text
global _structfunc
extern malloc
extern free
_structfunc:
push rbp
mov rbp,rsp
push rbx ;save the previous value in rdi
push rdi ;s.o.
mov rdi,LEN_STRUCT
call malloc ;adress in rax
mov rbx,rax
mov rax,[rsp]
mov rcx,LEN_HEX
hex:
mov rdx,0
div qword [base16]
cmp rdx,10
jae hex_charactor
add rdx,0x30
jmp hex_end
hex_charactor:
add rdx,0x37
hex_end:
mov [rbx+rcx-1],dl
loop hex
mov byte [rbx+LEN_HEX],0
mov rax,[rsp]
mov rcx, LEN_DEZ
dez:
mov rdx,0
div qword [base10]
add rdx,0x30
dez_end:
mov [rbx+LEN_HEX+1+rcx-1],dl
loop dez
mov byte [rbx+LEN_STRUCT-1],0
add rsp,8
pop rbx
pop rbp
ret
функция должна возвращать структурный адрес, который включает шестнадцатеричную форму 123456 и десятичную форму 123456