초기화 된 데이터 섹션에 5 개의 문자열을 포함하는 데이터 배열을 만들려고합니다. 각 문자열은 정확히 4 자입니다. 각 문자열에는 첫 번째 문자열의 경우 "abcd", 두 번째 문자열의 경우 "efgh"와 같은 일부 초기 데이터가 있습니다. Null \0 모든 문자열에는 문자가 필요하지 않습니다. 어셈블리 언어로 문자열 배열을 초기화하려면 어떻게해야합니까?
하나의 번호를 가져 와서 인쇄 한 어셈블리 프로그램을 만들려고했습니다. 하지만 1을 쓸 때 4171을 썼습니다. 왜, 어떻게 고칠 수 있습니까? 나는 64 비트 어셈블리를 사용하고 있는데, nasm -f macho64 scanf.asm으로 어셈블하고, gcc -o scanf scanf.o -Wl,-no-pie으로 연결했다. 그리고 스캔 매크로에서 숫자 주위
이것은 간단한 문제이지만 내 머리를 회전시키고 있습니다. 문자의 문자열 (음수 십진수로 입력)을 부호없는 정수로 변환해야합니다. rdi 레지스터는 변환 할 문자열을 보유합니다. rax 레지스터는 그 결과를 저장합니다. xor rsi, rsi
xor rax, rax
xor dl, dl
xor rdx, rdx
convert:
재미를 위해 어셈블리를 약간 흘려 보면서 이제는 프로 시저를 호출하는 데 어려움이 있습니다. ...
_start:
push dword len
push dword msg
call print
mov eax, SYS_EXIT
mov ebx, 0
int 80h
print: ; *char (message
NASM 어셈블리 프로그램에서 strstr C 함수를 사용하려고하는데 제대로 인쇄 할 수없는 것처럼 보입니다. 이 여러 변형을 시도한 있지만 printf 또는 '(null)'반환 된 빈 줄을 얻는 NASM C에서 포인터 값을 반환하는 방법을 잘못 해석 할 수 있습니다 생각합니다. 왜 내가 올바른 반환 값을 인쇄 할 수 없는지 묻는 데 도움이 될까요? sec
어셈블리에서 문자열에 int 값을 할당 할 수 있습니까? 예를 들어 , I는 >> 쥐 = 2를 넣고, 난 넣으면 >>, 래트 + 2 변수를 사용하는 프로그램을 호출 할 때, 그것이 가능하다면, 4. 를 반환해야 , 그것을하는 가장 좋은 방법은 무엇입니까? 도움이 될 것입니다.
코드 5를 따르십시오. int 0x80을 사용하여 숫자 5를 인쇄하지만 아무 것도 인쇄하지 않습니다. segment .bss
num1 resb 1
section .text
global _start
_start:
mov dword [num1],5
add [num1],byte '0'
mov ecx, d
나는 한 시간 동안 머리를 벽에 부딪쳐서 왜 아래가 작동하지 않는지 이해할 수 없다. 내가 b: db 1b: db 0에를 변경하는 경우 다음은, 10을 인쇄해야합니다 그렇지 않으면 대신 0을 인쇄해야합니다, 제가 조립을 기록하는 프로젝트를 쓰고 한 10 프로그램은 항상 출력하고이 단위 테스트 중 하나입니다 실패하고 나는 그것을 얻지 못한다. 그것은 단순해야
저는 우분투 16.04에서 nasm을 사용하고 있으며 현재 C memmove() 기능을 재 코딩하려고합니다. Saluton, SalSaluton
하지만 얻을 : char *str = strdup("Salutation");
printf("%s, %s\n", (char *)memmove(str + 3, str, 5), str);
예상 출력은 다음과 같