Header

  1. View current page

    knowledge님의 노트

Profile_img_60x60_01
1

asm

How to make & link

 ml /Fl (filename.ext)

 

grdb (filename)

? : show help

q : quit grdb

g : go

t : run by step

u : dessemble / u n : n-> offset

r : view register value

 

meet int 21h, then go after call int 21h

g ,XX

 

d : dump memory

e : examine(enter) memory

a : assemble

 

2007/04/24

  • program load 시

msdos load

psp (program segment prefix) (= context) 256byte

stack

data segment

code segment

  • push

push ax    ; (ss * 16 + sp) = ax

  • grdb 시
  • 23E6:0000 ... ; 23E6 -> code segment address
  • convert case 
    • (char) & DFH => lower to upper
    •  (char) ^ 20H => upper to lower
  • .586 지시어 사용 시 
    • 플랫 메모리 모델을 기본으로 사용
    • 때문에 어드레스를 32bit로 변환
    • 따라서 mov sp, (32bit addr) 식으로 변환되기 때문에 error 발생
  • even
    • 짝수 번지에서 메모리 r/w 시작
  • movsw
  • (ds:si)->(ses:di)

    cld (direction flag = 0) -> 증가시키기 위함

2007/05/01

  •  hex to ascii 
    • push, pop은 8비트 레지스터에 대해 적용 불가능, 16 or 32비트는 가능
    • pop할 때 sp 위쪽 메모리 내용은 건드리지 않으나, 인터럽트가 들어오거나 하면서 사용하기 때문에 깨진다.

2007/05/03

3789 => ((((0*10+3)*10+7)*10 + 8)*10 + 9)

A * 10 = A * 2 + A * 8 = A << 1 + A << 3

홀수 magic number일 때

2 7 6

9 5 1

4 3 8

 마지막 열 가운데 행에 1

우측 상단으로 돌아가면서 채운다

충돌이 발생하면 왼쪽으로 한칸 옮긴다

2007/05/15

 F * b1 + (F * 2) * b2

2007/05/17

code

bss : 초기화 값을 갖지 않는 데이터

data

c compiler에서 -c 옵션으로 어셈블리 파일을 만들 수 있다

two pass 동작 : 소스를 두 번 읽는다.

(macro -> two pass 가능하나 기능의 제한이 발생하므로 single pass로 작성. 즉, forward reference가 불가능)

pass-1 -> symbol table  생성(레이블 값 결정)

pass-2 ->  머신 코드 생성

(pass-3 -> lst, link 정보 등 후처리를 작성할 수 있다)

macro

(macro name) macro [param, ...]

statements

endm


a macro

b: ;label

jmp b

endb

 => 두 번 이상 사용 시 b 레이블이 두 곳 이상 나타나 jmp 불가능 -> 에러

a macro

   local b

b: ;label

jmp b

endb

=> a가 불릴 때마다 b를 다른 이름으로 확장하여 이름 중복을 방지

if    high number -> 16비트 중 상위 8비트의 값이 무엇인가

code segment public -> 이 code 세그먼트를 다른 곳에서 불러 쓸 것이므로 공개하라

masm c,,,;
masm d,,,;
link c+d,e,,; => c와 d를 링크시키고, e라는 이름으로 실행 파일을 만들라

.listif  -> if에 의해 어셈되지 않는 부분까지 리스트 파일에 출력

.lall  -> macro 확장까지 리스트에 출력


calendar

365일 = 52주 + 1일

1년 1월 1일 월요일

2년 1월 1일 화요일

3년 1월 1일 수요일

4년 1월 1일 목요일 -> 윤년, 366

5년 1월 1일 "토"요일

(year - 1) + (year-1)/4 - (year-1)/100 + (year-1)/400 + 1 => 현재 year의 1월 1일 요일

2007/05/22

tower of hanoi

hanoi(n, src, aux, dst) {

  if n == 0: return;

  hanoi(n-1, src, dst, aux)

  mov disk(n) from src to dest

  hanoi(n-1, aux, src, dst)

}

 ptr of pole -> top + 1

2 ^ 64 = 20digit cause db 10 dup(?)

mov     sp, offset prend + 1024 : 마지막에 있는 prend 레이블로부터 1024 떨어진 위치에 stack 설정

frame pointer -> 일반적으로 bp를 사용

stack

dst

aux

src

n

ret

bp

maximum calldepth 저장

cmp     al, call_depthm
jbe     hanoig
mov     call_depthm, al

cmp     bp, offset prend + 128  : interrupt 등을 위한 시스템 스택 영역을 침범했는지 검사

 add     sp, 8 : procedure의 parameter가 8바이트이므로 콜이 끝난 후 삭제의 의미로 8개 이전으로 돌아감

conout  [bx + 2] bx에 ptrb가 있고, 그 2바이트 뒤에  'b' 문자가 있다


magic square

mid = [n/2][n-1]

2007/05/29

  • file device
    • disk, memory, clock, ...
    • os에 파일 정보 유지 
      • console
      • error message
      • generally, File handle >= 6
  • char device 
    • kbd, prt, ...
  • dos function 
    • Function  3Ch   Create A File                           (CREAT)

      Create a file with handle

      entry   AH      3Ch

                CX      byte, attributes for file

                         00h     normal read/write

                      DS:DX   address of ASCIIZ filename string

      return  CF      0       successful creation

                          1       error

                AX      16 bit file handle

                      or error code  (03h, 04h, 05h)

    • Function  3Dh   Open A File
    • Function  3Eh   Close A File Handle
    • Function  3Fh   Read From A File Or Device
    • Function  40h   Write To A File Or Device
  • rc4 
    • rc4 = stream generator : random generate
    • c = k xor p
    • p = k xor c 

History

Last edited on 05/29/2007 11:24 by persona

Comments (0)

You must log in to leave a comment. Please sign in.