다음과 같은 어셈블리 코드가 있는데, 이는 C- 함수 sprintf()의 간단한 구현을위한 것입니다. 지금까지는 %c 및 %%을 구문 분석 할 때 잘 작동하며 현재 %s을 구현 중이므로 아래에있는 found_string 레이블에서 찾을 수 있습니다. pushl %eax을 수행하여 % ECX 레지스터 (주 루프에서 사용됨)를 저장하려고하므로 기본 루프를 방해
레지스터에서 popcnt을 수행하기 전에 하위 비트를 없애려하지만 명령에 대한 구문을 얻을 수없는 것 같습니다. %r8d의 값에서 하위 %rdx 비트를 지우고 싶습니다. 나에게 말했다 검색하면 카운트 인수는 8 비트 레지스터해야한다, 그래서에서 현재 해요 : shrl %dl, %r8d
가스가 이것에 대해 불평, 나는 그 잘못이 있다면 정확히 인수해야한다
잘라 내기 < 10digitPhoneNumber> @ txt.att.net 우리 관계없이 이메일 또는 피사체의 길이가 항상 39의 다음과 같은 결과 FRM:<from email>
SUBJ: <subject>
MSG: <39 characters of the message>
를 얻을 . 이 행동을 다른 사람이 전에 보았습니까? 해결 방법이 있습니까? T
이 줄은 나에게 매우 명확하지 않다의 의미를 확인하십시오 (나는 총회에 아주 새로운 해요). eax = foo&0x800000ff;
내가 조립 라인을 참조를 본 적이 : 이해 foo 대신 0xffffffff(%edx,%ebx,1)으로 사용하는 간단한 예제에서는이 (이 옳다고 전혀 확인, 단지 관련 항목을 검색하지 않음) 할 수 -1 (0xffffffff
C++ ATT 조립 나는 다음과 같은 두 가지 지침의 행동을 이해하려고 노력 해요 : pushl %esp
그리고 : popl %esp
참고가 그 계산 된 값을 다시에 저장하십시오.. 본인은 순서에 관계없이이 지침을 독립적으로 고려하고 있습니다. %esp에 저장된 값은 항상 증가/감소 이전의 값이라는 것을 알고 있지만 어떻게 어셈블리 언어로 동작을 나
현재 Y86, AT & T 구문이라는 교육용 어셈블리 언어를 사용하여 함수를 작성 중입니다. 지원하지 않는 것을 달성/해결하려고합니다. 메모리에 저장된 값에 숫자를 추가하고 addl을 사용하여 레지스터에 추가 할 수있는 어리석은 이유가 있습니다. 나는 이것이 왜 있는지 모른다. 나는이 같은 일을하고 싶은 방법을 모르는 함수 내부 는 : addl $1, -4
일부 SSE2 작업을 수행하는 64 비트 x86 어셈블리 (gcc 및 GAS의 경우 & T 구문)로 작성된 함수가 있습니다. gdb를 사용하여 디스 어셈블리 및 레지스터 값을 조사하여 결과를 확인 했으므로 정확한 결과를 얻었습니다. retq 명령 후, 세그먼트 오류가 발생합니다. 어셈블리를 처음 접했을 때 (그리고 어떤 클래스도 사용하지 않았기 때문에) 필
C 호출 규칙에 대해 배우고 싶습니다. #include <stdio.h>
#include <stdlib.h>
struct tstStruct
{
void *sp;
int k;
};
void my_func(struct tstStruct*);
typedef struct tstStruct strc;
int main()
{
txt 파일의 내용을 표시하는 코드를 작성하려고합니다. 새 파일에 저장된 번호는 한 줄에 하나씩 (% d \ n) 있습니다. 현재 코드는 다음과 같습니다 : movl $0 , 320(%ebp)
#a pre reserved location on the stack for the first number that needs to be cleared first
나는 간단한 부트 로더를 AT & T 문법으로 작성했다. [bits 16]
[org 0x7c00]
jmp $
times 510-($-$$) db 0
dw 0xaa55
나는 그것을 컴파일 yasm -f bin -o boot.bin loader.s를 사용하고, Bochs와 실행 할 수 있습니다. dd if=boot.bin bs=512 of=flopp