Прошу посоветовать хороший справочник по командам ARM для процессоров CNS21xx (STR81xx / STAR 81xx; семейство ARMv4l) на английском или русском языке. Хорошим справочником для x86 могу назвать книгу Виктора Юрова "Assembler. Специальный справочник. 2-е издание." P.S. Имеется рабочее устройство с Linux NAS 2.6.16-star #812 Mon Nov 17 15:27:34 CST 2008 armv4l GNU/Linux от фирмы Agestar. Сейчас на нём стоит rootfs от Debian и идущее в комплекте ядро, которое сменить не удалось. Собственно, есть желание научиться понимать вывод objdump -d Например, Код (Text): 00000530 <rst_btn_poll_thread>: 530: e1a0c00d mov ip, sp 534: e92dd9f0 push {r4, r5, r6, r7, r8, fp, ip, lr, pc} 538: e24cb004 sub fp, ip, #4 ; 0x4 53c: e24dd014 sub sp, sp, #20 ; 0x14 540: e3cd6d7f bic r6, sp, #8128 ; 0x1fc0 544: e3c6603f bic r6, r6, #63 ; 0x3f 548: e596300c ldr r3, [r6, #12] 54c: e3e04000 mvn r4, #0 ; 0x0 550: e58341f8 str r4, [r3, #504] 554: e58341f4 str r4, [r3, #500] 558: e59f0128 ldr r0, [pc, #296] ; 688 <rst_btn_poll_thread+0x158> 55c: ebfffffe bl 0 <daemonize> 560: e596000c ldr r0, [r6, #12] 564: ebfffffe bl 0 <flush_signals> 568: e596300c ldr r3, [r6, #12] 56c: e24b8028 sub r8, fp, #40 ; 0x28 570: e58341f4 str r4, [r3, #500] 574: e58341f8 str r4, [r3, #504] 578: ebfffffe bl 0 <recalc_sigpending> 57c: e596000c ldr r0, [r6, #12] 580: e24b7030 sub r7, fp, #48 ; 0x30 584: e59f1100 ldr r1, [pc, #256] ; 68c <rst_btn_poll_thread+0x15c> 588: e2800f69 add r0, r0, #420 ; 0x1a4 58c: e50b8028 str r8, [fp, #-40] 590: e50b8024 str r8, [fp, #-36] 594: e50b7030 str r7, [fp, #-48] 598: e50b702c str r7, [fp, #-44] 59c: ebfffffe bl 0 <sprintf> 5a0: e596300c ldr r3, [r6, #12] 5a4: e5932004 ldr r2, [r3, #4] 5a8: e5921000 ldr r1, [r2] 5ac: e3110002 tst r1, #2 ; 0x2 5b0: 1a00019d bne 67c <rst_btn_poll_thread+0x14c> 5b4: e1a00008 mov r0, r8 5b8: ebfffffe bl 0 <interruptible_sleep_on> 5bc: e59f30cc ldr r3, [pc, #204] ; 690 <rst_btn_poll_thread+0x160> 5c0: e5932000 ldr r2, [r3] 5c4: e3520001 cmp r2, #1 ; 0x1 5c8: 0a00019d beq 67c <rst_btn_poll_thread+0x14c> 5cc: e59f50c0 ldr r5, [pc, #192] ; 694 <rst_btn_poll_thread+0x164> 5d0: e59f40c0 ldr r4, [pc, #192] ; 698 <rst_btn_poll_thread+0x168> 5d4: e5953000 ldr r3, [r5] 5d8: e594200c ldr r2, [r4, #12] 5dc: e1a00007 mov r0, r7 5e0: e0623003 rsb r3, r2, r3 5e4: e3530f7d cmp r3, #500 ; 0x1f4 5e8: e3a0100a mov r1, #10 ; 0xa 5ec: 8a000180 bhi 608 <rst_btn_poll_thread+0xd8> 5f0: e59f30a4 ldr r3, [pc, #164] ; 69c <rst_btn_poll_thread+0x16c> 5f4: e5932000 ldr r2, [r3] 5f8: e3120001 tst r2, #1 ; 0x1 5fc: 0a000166 beq 5a0 <rst_btn_poll_thread+0x70> 600: ebfffffe bl 0 <interruptible_sleep_on_timeout> 604: ea000173 b 5d4 <rst_btn_poll_thread+0xa4> 608: e3a04000 mov r4, #0 ; 0x0 60c: ebfffffe bl 0 <button_down_beep> 610: ebfffffe bl 10 <remove_all_proc_flag> 614: e1a01004 mov r1, r4 618: e1a02004 mov r2, r4 61c: e59f007c ldr r0, [pc, #124] ; 6a0 <rst_btn_poll_thread+0x170> 620: ebfffffe bl 0 <create_proc_entry> 624: e1500004 cmp r0, r4 628: 15804038 strne r4, [r0, #56] 62c: 1580403c strne r4, [r0, #60] 630: e59f406c ldr r4, [pc, #108] ; 6a4 <rst_btn_poll_thread+0x174> 634: e5943060 ldr r3, [r4, #96] 638: e1a05004 mov r5, r4 63c: e2434060 sub r4, r3, #96 ; 0x60 640: e1540005 cmp r4, r5 644: 0a000166 beq 5a0 <rst_btn_poll_thread+0x70> 648: e2840f69 add r0, r4, #420 ; 0x1a4 64c: e59f1034 ldr r1, [pc, #52] ; 688 <rst_btn_poll_thread+0x158> 650: ebfffffe bl 0 <strcmp> 654: e3500000 cmp r0, #0 ; 0x0 658: 0a00019a beq 670 <rst_btn_poll_thread+0x140> 65c: e5943060 ldr r3, [r4, #96] 660: e2434060 sub r4, r3, #96 ; 0x60 664: e1540005 cmp r4, r5 668: 1a000190 bne 648 <rst_btn_poll_thread+0x118> 66c: ea000166 b 5a0 <rst_btn_poll_thread+0x70> 670: e1a00004 mov r0, r4 674: ebfffffe bl 0 <wake_up_process> 678: ea000166 b 5a0 <rst_btn_poll_thread+0x70> 67c: e59f0024 ldr r0, [pc, #36] ; 6a8 <rst_btn_poll_thread+0x178> 680: e3a01000 mov r1, #0 ; 0x0 684: ebfffffe bl 0 <complete_and_exit> 688: 000000a0 .word 0x000000a0 68c: 000000a8 .word 0x000000a8 ... 698: 00000010 .word 0x00000010 69c: fff12004 .word 0xfff12004 6a0: 0000004c .word 0x0000004c ... 6ac: e1a00000 .word 0xe1a00000 P.P.S. Не уверен, в том ли разделе я создал тему. Прошу модераторов переместить, если ошибся.
Скачать документацию АРМовскую и не мучиться. А книг таких, вероятно, не существует (во всяком случае, на русском, да и на английском под вопросом).
Хороший справочник по командам ARM Dedian Etch на NAS P.S. Код (Text): ; загрузка, "демонизация" ... 5bc: e59f30cc ldr r3, [pc, #204] ; 690 здесь лежит адрес порта GPIO 5c0: e5932000 ldr r2, [r3] ; читаем 5c4: e3520001 cmp r2, #1 ; 0x1 проверяем нажатие кнопки ... ; обработка нажатия 608: e3a04000 mov r4, #0 ; 0x0 60c: ebfffffe bl 0 <button_down_beep> 610: ebfffffe bl 10 <remove_all_proc_flag> 614: e1a01004 mov r1, r4 ; второй параметр (0) 618: e1a02004 mov r2, r4 ; третий параметр (0) 61c: e59f007c ldr r0, [pc, #124] ; 6a0 здесь лежит первый параметр для create_proc_entry (4c) 620: ebfffffe bl 0 <create_proc_entry> ... ; работа со строками, похоже для отладки ... ; выход 680: e3a01000 mov r1, #0 ; 0x0 684: ebfffffe bl 0 <complete_and_exit> ; данные 688: 000000a0 .word 0x000000a0 68c: 000000a8 .word 0x000000a8 ... 698: 00000010 .word 0x00000010 69c: fff12004 .word 0xfff12004 6a0: 0000004c .word 0x0000004c ... 6ac: e1a00000 .word 0xe1a00000
Только читайте внимательно: там полно разных нюансов, в т.ч. в зависимости от версии архитектуры. Ну и документация на собственно процессор нужна: система команд -- далеко не всё, есть же всякая периферия, а там каждый производитель изгаляется, как может...