어셈블리는 수조에서 최대 수를 찾을 수 있습니다
.section .data
data_item:
.long 1,2,3,4,5,6,7,8,9,10,15, -1, 99
data_item_end:
.equ data_item_len, data_item_end - data_item
fmt:
.ascii "%d
\0"
.section .text
.global _start
_start:
movq $data_item_len, %rax #rax
movl %eax, %edx
movl $4, %ebx #
sarl $31, %edx
divl %ebx
pushq %rax #
pushq $data_item #
call max_num
addq $16, %rsp
movl %eax, %esi
movl $fmt, %edi
xorl %eax, %eax
call printf
xorl %edi, %edi
call exit
.type max_num, @function
max_num:
pushq %rbp
movq %rsp, %rbp
movq 16(%rbp), %rdi #
movl 24(%rbp), %esi #
movl -4(%rdi, %rsi, 4), %eax
leaq -4(%rdi, %rsi, 4), %rdx
jmp max_num_end
max_num_loop_start:
movl (%rdx), %ecx
subl $1, %esi
cmpl %ecx, %eax
cmovl %ecx, %eax
subq $4, %rdx
max_num_end:
testl %esi, %esi
jg max_num_loop_start
movq %rbp, %rsp
popq %rbp
ret
스크립트를 컴파일하려면 다음과 같이 하십시오.
gcc -c max_num.s -g && ld ./max_num.o -lc -dynamic-linker /lib64/ld-linux-x86-64.so.2 && ./a.out
다음과 같은 c 코드:
#include <stdio.h>
int max_num(int *arr, int n) {
int max;
int i;
max = arr[n - 1];
while (n-- > 0) {
if (max < arr[n])
max = arr[n];
}
return max;
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6};
printf("%d
", max_num(arr, 6));
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.