ARM assembly language to convert integer, 1194684 to hexadecimal. The signature
ID: 3685878 • Letter: A
Question
ARM assembly language to convert integer, 1194684 to hexadecimal.
The signature of the routine is char*int2hex(int convert) where:
int convert = 1194684;
The output must be in the format 0Xdddddddd
The C program is:
#include
#include
extern char * int2hex( int convert ) ;
int main( int argc, char * argv[] )
{
int convert = 1194684 ;
char * result ;
result = int2hex( convert ) ;
printf( "Integer to hex string: %s ", result ) ;
}
.
.
It has to begin with:
.global int2hex
.text
int2hex: stmfd sp!, {v1-v6, lr}
Explanation / Answer
.Ltext0: .section .rodata .LC0: 0000 48657861 .string "Hexadecimal number : " 64656369 6D616C20 6E756D62 6572203A .LC1: 0016 256C6400 .string "%ld" .text .globl dec_hex dec_hex: .LFB0: .cfi_startproc 0000 55 pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 0001 4889E5 movq %rsp, %rbp .cfi_def_cfa_register 6 0004 4881ECC0 subq $448, %rsp 010000 000b 4889BD48 movq %rdi, -440(%rbp) FEFFFF 0012 64488B04 movq %fs:40, %rax 25280000 00 001b 488945F8 movq %rax, -8(%rbp) 001f 31C0 xorl %eax, %eax 0021 48C78550 movq $0, -432(%rbp) FEFFFF00 000000 002c 48C78558 movq $0, -424(%rbp) FEFFFF00 000000 0037 EB55 jmp .L2 .L3: 0039 488B8548 movq -440(%rbp), %rax FEFFFF 0040 4899 cqto 0042 48C1EA3C shrq $60, %rdx 0046 4801D0 addq %rdx, %rax 0049 83E00F andl $15, %eax 004c 4829D0 subq %rdx, %rax 004f 4889C2 movq %rax, %rdx 0052 488B8550 movq -432(%rbp), %rax FEFFFF 0059 488994C5 movq %rdx, -416(%rbp,%rax,8) 60FEFFFF 0061 488B8548 movq -440(%rbp), %rax FEFFFF 0068 488D500F leaq 15(%rax), %rdx 006c 4885C0 testq %rax, %rax 006f 480F48C2 cmovs %rdx, %rax 0073 48C1F804 sarq $4, %rax 0077 48898548 movq %rax, -440(%rbp) FEFFFF 007e 48838550 addq $1, -432(%rbp) FEFFFF01 0086 48838558 addq $1, -424(%rbp) FEFFFF01 .L2: 008e 4883BD48 cmpq $0, -440(%rbp) FEFFFF00 0096 7FA1 jg .L3 0098 BF000000 movl $.LC0, %edi 00 009d B8000000 movl $0, %eax 00 00a2 E8000000 call printf 00 00a7 488B8558 movq -424(%rbp), %rax FEFFFF 00ae 4883E801 subq $1, %rax 00b2 48898550 movq %rax, -432(%rbp) FEFFFF 00b9 E9940000 jmp .L4 00 .L14: 00be 488B8550 movq -432(%rbp), %rax FEFFFF 00c5 488B84C5 movq -416(%rbp,%rax,8), %rax 60FEFFFF 00cd 4883E80A subq $10, %rax 00d1 4883F805 cmpq $5, %rax 00d5 7752 ja .L5 00d7 488B04C5 movq .L7(,%rax,8), %rax 00000000 00df FFE0 jmp *%rax .section .rodata 001a 00000000 .align 8 0000 .align 4 .L7: 0020 00000000 .quad .L6 00000000 0028 00000000 .quad .L8 00000000 0030 00000000 .quad .L9 00000000 0038 00000000 .quad .L10 00000000 0040 00000000 .quad .L11 00000000 0048 00000000 .quad .L12 00000000 .text .L6: 00e1 BF410000 movl $65, %edi 00 00e6 E8000000 call putchar 00 00eb EB5D jmp .L13 .L8: 00ed BF420000 movl $66, %edi 00 00f2 E8000000 call putchar 00 00f7 EB51 jmp .L13 .L9: 00f9 BF430000 movl $67, %edi 00 00fe E8000000 call putchar 00 0103 EB45 jmp .L13 .L10: 0105 BF440000 movl $68, %edi 00 010a E8000000 call putchar 00 010f EB39 jmp .L13 .L11: 0111 BF450000 movl $69, %edi 00 0116 E8000000 call putchar 00 011b EB2D jmp .L13 .L12: 011d BF460000 movl $70, %edi 00 0122 E8000000 call putchar 00 0127 EB21 jmp .L13 .L5: 0129 488B8550 movq -432(%rbp), %rax FEFFFF 0130 488B84C5 movq -416(%rbp,%rax,8), %rax 60FEFFFF 0138 4889C6 movq %rax, %rsi 013b BF000000 movl $.LC1, %edi 00 0140 B8000000 movl $0, %eax 00 0145 E8000000 call printf 00 .L13: 014a 4883AD50 subq $1, -432(%rbp) FEFFFF01 .L4: 0152 4883BD50 cmpq $0, -432(%rbp) FEFFFF00 015a 0F895EFF jns .L14 FFFF 0160 90 nop 0161 488B45F8 movq -8(%rbp), %rax 0165 64483304 xorq %fs:40, %rax 25280000 00 016e 7405 je .L15 0170 E8000000 call __stack_chk_fail 00 .L15: 0175 C9 leave .cfi_def_cfa 7, 8 0176 C3 ret .cfi_endproc .LFE0: .section .rodata .LC2: 0050 456E7465 .string "Enter the decimal number : " 72207468 65206465 63696D61 6C206E75 .text .globl main main: .LFB1: .cfi_startproc 0177 55 pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 0178 4889E5 movq %rsp, %rbp .cfi_def_cfa_register 6 017b 4883EC10 subq $16, %rsp 017f 64488B04 movq %fs:40, %rax 25280000 00 0188 488945F8 movq %rax, -8(%rbp) 018c 31C0 xorl %eax, %eax 018e B8000000 movl $0, %eax 00 0193 E8000000 call clrscr 00 0198 BF000000 movl $.LC2, %edi 00 019d B8000000 movl $0, %eax 00 01a2 E8000000 call printf 00 01a7 488D45F0 leaq -16(%rbp), %rax 01ab 4889C6 movq %rax, %rsi 01ae BF000000 movl $.LC1, %edi 00 01b3 B8000000 movl $0, %eax 00 01b8 E8000000 call __isoc99_scanf 00 01bd 488B45F0 movq -16(%rbp), %rax 01c1 4889C7 movq %rax, %rdi 01c4 E8000000 call dec_hex 00 01c9 B8000000 movl $0, %eax 00 01ce E8000000 call getch 00 01d3 90 nop 01d4 488B45F8 movq -8(%rbp), %rax 01d8 64483304 xorq %fs:40, %rax 25280000 00 01e1 7405 je .L17 01e3 E8000000 call __stack_chk_fail 00 .L17: 01e8 C9 leave .cfi_def_cfa 7, 8 01e9 C3 ret .cfi_endproc .LFE1: .Letext0: