나는 도구에 의해 생성 된 x86_64의 아키텍처에 대한 몇 가지 GNU 어셈블러 코드가 이러한 지시 사항이 있습니다 : movq %rsp, %rbp
leaq str(%rip), %rdi
callq puts
movl $0, %eax
나는 "callq"명령에 실제 문서를 찾을 수 없습니다가. http://support.amd.com/TechDocs/
작은 컴파일러 프로젝트에서 작업하고 있는데 스택의 값 대신 스택 위치의 주소를 푸시하는 방법을 알아낼 수 없습니다 위치. 내 목표는 정수 값을 보유하는 스택 위치 주소를 인쇄하는 C 함수의 void 포인터로 푸시하는 것입니다. 내 궁극적 인 목표는 함수에서 포인터 정수 연산을하는 것입니다. 런타임 라이브러리 확장에서 C 함수를 호출하는데 성공했지만 문제는
GNU 어셈블리의 배열을 사용하려고합니다. 내 의견으로는 다음과 같은 코드는 값 3으로 종료해야하지만 movw inArr(%rip, %rcx, 2), %di 명령 %di = inArr[%rcx] 같은 동일하다 내 의견으로는 13 .section __DATA,__data
inArr:
.word 13, 2, 3, 4, 5, 6, 7, 8, 9
Intel 구문과 AT & T 구문의 차이점을 이해하려고합니다. (GNU as를 사용하고 있습니다.) .intel_syntax noprefix
val:
mov eax, val
및 atandt.s : val:
mov $val, %eax
내가 인텔 버전으로 AT & T 버전으로 변환하려고 나는 두 개의 파일 intel.s 있습니다.
인라인 어셈블리 코드를 작성하여 실시간 시계를 읽습니다. 'dl'로 읽을 레지스터 번호 (4)를로드하고이를 포트 0x70에로드합니다. 나는이 레지스터 값 (4)을 알로 읽으려고한다. 자세한 내용은 - RTC asm(
"mov $4, %%dl;"
"out 0x70, %%dl;"
"in %%al, 0x71;"
:
:
:"%al","%dl"
);
대학 프로젝트로 컴파일러를 쓰고 있습니다. 나는 코드 생성 단계에있다. 그리고 이것은 (항상 0 인쇄) 작동하지 않는 이유를 궁금하네요 : .extern printf
.section .data
hello:
.string "Hello %f!\n"
.section .text
.globl main
main:
pushl %ebp
난과 같이 인라인 어셈블리를 사용하여 C에서 동작 왼쪽 회전을 작성하려고하고 회전 : (바이트 부호없는 문자로 typedefed된다) byte rotate_left(byte a) {
__asm__("rol %0, $1": "=a" (a) : "a" (a));
return a;
}
. 이 오류 문제가 여기에 무엇 /tmp/ccKYcEH
저는 꽤 혼란스럽고 한 블록 맞았습니다. 내 수업 과제는 다음과 같은 일을합니다. 입력 인사 사용자 프롬프트 변환 된 문자열을 사용자에게 모두 대문자 디스플레이 메시지에 변환 문자열 나는 1과 2에는 문제가 없으며, 필요할 때 소문자를 대문자로 변환하는 루프를 알아낼 수 있습니다. cmp $96, %ah
jg Subtract
call Loop
Sub
없이 수행합니다. 어셈블러 코드를 처음 작성했습니다. test.c: Assembler messages:
test.c:7: Error: bad or irreducible absolute expression
test.c:7: Error: expecting scale factor of 1, 2, 4, or 8: got `$2'
그런 다음 나는 "leal