32 비트 우분투 용 NASM 어셈블리 학습.NASM을 사용하여 스택에 번호 인쇄
단순히 당신이 그것을 호출하기 전에 스택에 밀어 수를 출력하는 기능을 수행 :
SECTION .text
global main
main:
; -----------------------------------------------------------
; Main
; -----------------------------------------------------------
push 5
call print_number
; -----------------------------------------------------------
; Exit
; -----------------------------------------------------------
mov EAX,1
int 0x80
; -----------------------------------------------------------
; Prints a number
; -----------------------------------------------------------
print_number:
push EBP
mov EBP,ESP
mov EAX,4
mov EBX,0
mov ECX,[EBP + 8]
add byte [ECX],'0'
mov EDX,1
int 0x80
pop EBP
ret
나에게 분할 오류 오류를주는 유지합니다.
내가 함수를 호출 할 때, 스택은 다음과 같아야 보자 ... :- 5
- 반환 주소
가 그럼 난 EBP
를 밀어 :
- 반송 주소
- EBP는
나는 스택의 기본의 주소를 포함 EBP
을 원하는, 그래서 나는이 작업을 수행 :
mov EBP, ESP
그래서 기본적으로 EBP
이제 스택의 기본에 주소입니다. ECX
내가 인쇄려고 무엇이든의 주소가 필요하기 때문에 그것이 내가 인쇄 할 5
을 가리 키도록, ECX
8 바이트로 이동 EBP
(스택의 기본 주소)를해야한다 :
mov ECX,[EBP + 8]
그리고 그것을 인쇄 할 내가 먼저 ASCII로 변환 :
add byte [ECX],'0'
내가 여기 문제를 볼 수 없습니다. 세분화 오류가 발생하는 이유는 무엇입니까?
+1 먼저 잘 작성된 질문은 내가 –