Linux 커널 Code Review 002
기왕 잘 읽을 준비가 되었으니 기초적인 내용부터 복습하는 김에 집필을 하겠습니다.부호를 붙이다
# printArg.s
.data
argc: .int 0
.text
.code64
.globl _start
_start:
nop
popq %rsi
movq $48, %rax
addq %rsi, %rax
movq %rax, (argc)
movq $1, %rdx
leaq argc, %rsi
movq $1, %rdi
movq $1, %rax
syscall
movq $10, %rax
movq %rax, (argc)
movq $1, %rax
syscall
#A bug here, wait to be fixed.
vnext:
popq %rsi
test %rsi, %rsi
jz exit
movq %rsi, %rdi
xorq %rdx, %rdx
strlen:
movb (%rdi), %al
inc %rdx
inc %rdi
test %al, %al
jnz strlen
movb $10, -1(%rdi)
movq $1, %rdi
movq $1, %rax
syscall
jmp vnext
exit:
movq $60,%rax
xorq %rdi, %rdi
syscall
ret
이 코드는 프로그램이 실행된 후에 매개 변수의 개수와 매개 변수의 목록을 출력합니다.문제는 매개 변수의 개수가 ASCII 디스플레이로 바뀌어야 한다는 것이다. 10이 넘는 부분은 내가 더 이상 처리하지 않았다.따라서 에서 9가 지나면 추가 ASCII 문자가 나타납니다.이것은 추후에 수정합시다.주의해야 할 것은 64bit 아래에서 시스템 호출을 할 때 여전히 적지 않은 차이가 있다는 것이다.1、unistd에 따라32h와unistd64.h 두 개의 헤더 파일에서 시스템 호출 기능에 대한 다른 정의.2. 시스템이 호출될 때register의 사용에도 약간의 차이가 있다.64bit 구조에서 주로 사용:rax,rdi,rsi,rdx;32bit 구조에서 주로 사용: eax,ebx,ecx,edx.실제 코드를 작성하는 과정에서도 적지 않은 주의점이 있다.벽돌 교류를 환영합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
입문 학습 노트 집성(7)-dp,div,dup미친 여름방학 학습의 모음집 입문 학습노트(7)-dp,div,dup bp: 기본 단락 주소가 ss인 것을 제외하고는 bx와 같습니다. 예를 들어 [bx+bp]는 byte ptr 표시 바이트 이렇게 하면 레지스터는 데...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.