복사명령: cp
cp 복사하려는 파일명 새로 만들거나 복사 할 파일
보기: cat
cat 파일명
코드 수정:vi
vi 파일명
a: 수정할 때 누르기
:wq 현재 상태 저장하고 vi 종료
(1) 저장 / 종료
:w - 저장
:w file.txt - file.txt 파일로 저장
:q - vi 종료
:wq! - 강제 저장 후 종료
:e file.txt - file.txt 파일을 불러옴
(2) 입력
a - 커서 위치 다음 칸부터 입력
i - 커서의 위치에서 삽입모드로 입력
o - 커서의 다음 행에 입력
s - 커서 위치의 한 글자를 지우고 입력
cc - 커서 위치의 한 행을 지우고 입력
R - 커서 위치에서 수정모드로 입력
(3) 이동
h - 왼쪽으로 이동
j - 아래로 이동
k - 위로 이동
l - 오른쪽으로 이동
ctrl + b - 이전 페이지로 이동
ctrl + f - 다음 페이지로 이동
w - 다음 단어이동
b - 이전 단어로 이동
^ - 현재 행의 처음으로 이동
$ - 현재 행의 끝으로 이동
gg - 문서의 맨 첫 행으로 이동
G - 문서의 맨 마지막 행으로 이동
:n - n번째 행으로 이동
(4) 편집
- 삭제
x - 커서의 글자 삭제
dw - 한 단어 삭제
D - 커서 위치부터 행 끝까지 삭제 / 복사
dd - 커서가 있는 행을 삭제 / 복사
- 복사/잘라내기와 붙이기
yy - 커서가 있는 한 행 복사
10yy - 커서가 있는 행 부터 10행을 복사
p - 커서가 있는 행 아래에 붙여넣기
- 블록잡기
v - v키 후 커서를 이동하여 블록잡기
(5) 되돌리기와 되살리기
u - 되돌리기
ctrl + r - 되살리기
(6) 문자열 탐색 / 이동
/찾을 문자열 - 순방향 검색
?찾을 문자열 - 역방향 검색
n - 검색 후 순방향 해당 단어로 이동
N - 검색 후 역방향 해당 단어로 이동
(7) 치환
[범위] / [매칭 문자열] / [치환 문자열] / [행 범위]
ex) %s/old/new/g - %s(문서전체)에 old를 new로 g(행전체)에 대해 치환한다.
ex) 3, 5s/old/new/ - 3행부터 5행에 있는 old를 new로 치환.(g를 생략 할 경우 한 행에서 1번만 치환이 이루어진다.)
<assemble 과정>
1. nasm -f elf 파일.asm
=> 어샘블을 사용해 object 파일을 생성, 파일명.o 이 생성된다
2. gcc 파일명.o asm_io.o -o 파일명
==gcc -o 파일명.asm 파일명.o asm_io.o
=> 파일명.o랑 asm_io.o 를 합쳐서 파일명.asm을 output(-o) 한다.
; text segment must have an GLOBAL entry point 'main’
; text segment must start with ‘enter 0, 0' instruction
; text segment must end with leave’ and 'ret' instruction
; must include "asm_io.inc"
%include "asm_io.inc“
segment .data
;
; <데이터 정의>
;
segment .text
global main
main:
enter 0,0 ; setup stack frame
pusha
;
; <프로그램 코드>
;
;
popa
mov eax, 0 ; return value
leave ; leave stack frame
ret
segment.data 에는
msg db "Hello, world!", 0x00
처럼 데이터 값을 정의해준다.
main: 에는 코드를 작성하면 된다.
mov eax, string_a ; eax에 string_a값을 복사한다. string_a는 변하지 않는다.
call print_string ; 문자열 출력하는 함수를 부른다
eax 에 저장되어 있는 값을 print 한다. => string_a의 내용이 출력된다. eax=print_string
all read_int ; 정수를 입력받는 함수를 부른다, 받은 값을 eax 에 저장한다.
eax= 사용자가 입력한 값.
mov a, b
add a, b
sub a, b
=>이 명령들은 첫번째 오퍼렌드 값만 변하며 두번째 오퍼렌드 값은 변하지 않는다.
3-2) 사용자로부터 값 입력 받고 덧셈 뺄셈 출력
결과
아니 진짜 죽을 뻔 했다 한 문제 가지고 세시간 끌 수 있는 거임? 나도..?
역시 공부를 꼼꼼히 해야 됨 이래서...........
eax 어디이동하고 ebx 어디 이동하고 너무 어렵다
왜 꼭 입출력 하려면 eax를 이용해야 하는거임??????????????????
아니 이렇게 기계적으로 해야 돼? c언어나 자바나 파이썬이나 좋은 거 많은데
저희 왜 이렇게 기계코딩 해야하나요 진짜 궁금해요