«assembly» 태그된 질문

어셈블리 언어 (asm) 프로그래밍 질문 사용중인 프로세서 및 / 또는 명령어 세트 및 어셈블러와 함께 태그를 지정하십시오. 경고 : .NET 어셈블리의 경우 [.net-assembly] 태그를 대신 사용하십시오. Java ASM의 경우 [java-bytecode-asm] 태그를 대신 사용하십시오.


19
CIL nop opcode의 목적은 무엇입니까?
MSIL을 살펴보고 MSIL에 nop 지침 이 많이 있음을 알았습니다 . MSDN 기사는 조치를 취하지 않으며 opcode가 패치되면 공간을 채우는 데 사용됩니다. 릴리스 빌드보다 디버그 빌드에서 더 많이 사용됩니다. 이러한 종류의 문이 어셈블리 언어에서 나중에 명령을 정렬하는 데 사용된다는 것을 알고 있지만 MSIL에서 MSIL nops가 필요한 이유는 무엇입니까? (편집자 주 : …
82 assembly  bytecode  cil 

3
GCC 패드가 NOP와 함께 작동하는 이유는 무엇입니까?
나는 C와 잠시 동안 일 해왔고 아주 최근에 ASM에 들어가기 시작했습니다. 프로그램을 컴파일 할 때 : int main(void) { int a = 0; a += 1; return 0; } objdump 디스 어셈블리에는 코드가 있지만 ret 후에는 nops입니다. ... 08048394 <main>: 8048394: 55 push %ebp 8048395: 89 e5 mov %esp,%ebp 8048397: …
81 c  gcc  assembly 

1
x86 명령어에는 자체 인코딩과 모든 인수가 동시에 메모리에 있어야합니까?
RAM이 단일 물리적 페이지로만 백업되는 Linux VM을 실행할 수 있는지 여부를 파악하려고합니다. 이를 시뮬레이션하기 위해 KVM에서 중첩 된 페이지 결함 핸들러를 수정하여 현재 처리 된 페이지 결함에 해당하는 것을 제외하고 모든 중첩 된 페이지 테이블 (NPT) 항목에서 현재 비트를 제거했습니다. Linux 게스트를 시작하려고 할 때 메모리 피연산자를 사용하는 어셈블리 명령어는 …

1
왜 GCC가 배열의 초기화를 초기화하여 0이 아닌 요소를 포함하여 모든 것을 먼저 0으로 채우는가?
왜 gcc는 나머지 96 개의 정수 대신에 전체 배열을 0으로 채우는가? 0이 아닌 이니셜 라이저는 모두 배열의 시작 부분에 있습니다. void *sink; void bar() { int a[100]{1,2,3,4}; sink = a; // a escapes the function asm("":::"memory"); // and compiler memory barrier // forces the compiler to materialize a[] in memory …

1
GCC가 std :: vector :: size가이 루프에서 변경되지 않는다고 가정 할 수없는 이유는 무엇입니까?
if (i < input.size() - 1) print(0);이 루프에서 최적화 input.size()되어 모든 반복에서 읽히지 않는 동료에게 주장 했지만 이것이 사실이 아님을 알 수 있습니다! void print(int x) { std::cout << x << std::endl; } void print_list(const std::vector<int>& input) { int i = 0; for (size_t i = 0; i < input.size(); …
14 c++  gcc  assembly 

1
기계 코드의 정확한 사본은 원래 기능보다 50 % 느리게 실행됩니다
임베디드 시스템의 RAM 및 플래시 메모리에서 실행하는 것에 대해 약간 실험했습니다. 빠른 프로토 타이핑 및 테스트를 위해 현재 Arduino Due (SAM3X8E ARM Cortex-M3)를 사용하고 있습니다. 내가 아는 한, Arduino 런타임과 부트 로더는 여기서 아무런 차이가 없습니다. 문제는 다음과 같습니다 . ARM Thumb 어셈블리로 작성된 함수 ( calc )가 있습니다. calc …

1
컴파일러가 여기에 수신자 저장 레지스터 사용을 고집하는 이유는 무엇입니까?
이 C 코드를 고려하십시오. void foo(void); long bar(long x) { foo(); return x; } GCC 9.3에서 -O3또는로 컴파일하면 다음과 -Os같이 나타납니다. bar: push r12 mov r12, rdi call foo mov rax, r12 pop r12 ret clang의 출력 은 수신자 저장 레지스터 rbx대신 선택을 제외하고 동일합니다 r12. 그러나 다음과 같은 어셈블리를보고 …
10 c  gcc  assembly  clang  x86-64 

1
DOS가 .COM 파일을로드 한 후 SP 레지스터를 0xFFFE로 설정하는 이유는 무엇입니까?
.COM 파일 https://en.wikipedia.org/wiki/COM_file 에 대한 Wikpedia 페이지에서 다음을 읽습니다. DOS의 .COM 파일은 모든 x86 세그먼트 레지스터를 동일한 값으로 설정하고 SP (스택 포인터) 레지스터를 0xFFFE로 설정하므로 스택은 메모리 세그먼트의 맨 위에서 시작하여 거기서부터 내려옵니다. 그러나 이것은 실제로 스택을 세그먼트 상단의 한 단어 아래에서 시작하도록 설정합니다. 스택에서 값을 푸시하면 CPU가 SP를 0xFFFC로 …

2
최신 PC 비디오 하드웨어는 HW에서 VGA 텍스트 모드를 지원합니까, 아니면 BIOS가 에뮬레이션합니까 (시스템 관리 모드 사용)?
물리적 선형 주소 의 VGA 텍스트 (모드 03) 프레임 버퍼에 (0x31) 과 같은 바이트를 저장할 때 16 비트 레거시 BIOS MBR 모드로 부팅 된 최신 PC 하드웨어에서 실제로 어떤 일 이 발생 합니까? 해당 지역 의 MTRR 이있는 상점이 UC로 설정된 상점 은 얼마나 느립 니까? ( 하나의 Kaby Lake …

2
L2 HW 프리 페 처가 정말 도움이됩니까?
나는에있어 위스키 호수 i7-8565U 와 (두 번 더 L2 캐시 크기보다) 데이터의 512 킬로바이트를 복사 카운터 및 시간을 반환 한 분석 및 L2 HW 프리 페처의 작품에 대하여 직면 한 몇 가지 오해. 에서 인텔 매뉴얼 4 권 MSR MSR이 0x1A4비트 0 (비활성화 1) L2 HW 프리 페처를 controlloing위한의. 다음 …


2
Cortex-A72에서 -O0을 사용하지만 -O3을 사용하지 않는 단순 타이트 루프에 대해 사이클에서 이러한 변동성이 큰 이유는 무엇입니까?
코드 조각에 대해 일관된 런타임을 얻는 데 대한 몇 가지 실험을 진행하고 있습니다. 현재 타이밍 코드는 꽤 임의의 CPU 바운드 워크로드입니다. int cpu_workload_external_O3(){ int x = 0; for(int ind = 0; ind < 12349560; ind++){ x = ((x ^ 0x123) + x * 3) % 123456; } return x; } …
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.