그래서 수행해야 할 작업이 있습니다. 어셈블리에서 scanfchar*이 필요합니다. 이 코드 시도 : 제대로 첫번째 printf와 적는다 .data
INPUT_STRING: .string "Give me a string: "
SCANF_STRING: .string "%s"
PRINTF_STRING: .string "String: %s\n"
.tex
어셈블러 함수에서 주어진 매개 변수와 반환 값의 유형을 어떻게 알 수 있습니까? 정확히 lea 0x1(%ecx),%ebx의 기능은 무엇입니까? 0x1(%ecx)의 주소가 %ebx에 저장되어 있습니까? 어셈블러 코드를 C 함수로 다시 쓰는 과제가 있습니다. 이해가되지 않는 부분입니다. 인수가 int이고 mov 0x8(%esp),%edx, mov 0xc(%es
imul이 부호있는 곱셈이라는 것을 알고 있으며 설명서에서 3 개의 피연산자 구문이 imulq dest, source1, source2임을 제안하는 것 같습니다. 따라서 라인은 다음과 같이 읽을 것입니다 : % rbx에 저장된 주소의 내용과 % rax의 값을 곱한 다음 메모리 위치 44에 저장하십시오. 그러나 이것은 틀린 것입니까?
나는 요즘에 & T x86 어셈블리를 배우고 있습니다. "*"를 사용하지 않고 두 개의 32 비트 정수를 곱하는 코드를 작성했습니다. 문제는 디버거가 계속 Segmentation Fault가 발생했다는 것입니다. 여기 내 코드가있다. .global _start
.data
a:
.long 0
b:
.long 0
count:
영어 내 첫 번째 언어가 아니므로 일부 단어를 잘못 입력하면 죄송합니다. 스택에 문제가 생겼습니다. 여기에 넣을 모든 코드는 완벽하게 작동합니다. 예를 들어,이 코드는 쉽고 스택을 이해합니다. STACK
-------
VAR Y --> ESP + 12
-------
VAR X --> ESP + 8
-------
나는 x86 구문을 배우고 있습니다. 나는 그것이 무엇을해야하지 않는 것이 명령을 우연히 발견했습니다 cmpl $0x0,%cs:0x6574
나는 cmp 그냥 차이를 비교하고 플래그를 설정 알고있다. 부호없는 값이 비교 중임을 나타내는 l. 내 질문은 : 우리는 무엇을 비교합니까? 0x0의 값과 어떤 값 %cs:0x6574? cs 레지스터에 주소가 들어