PlayXP

새로운 사이트를 준비하는 동안
여러분의 이야기가 이어질 작은 공간을 마련했습니다.

PlayXP 서비스를 준비하며 함께 작업하고 있는 운영진 일러스트

HELP: MOVE ASSEMBLY, DEATH

조회 수 450

8086 어셈블리입니다

 

ax에 값을 넣고 10진수로 변환하는 내용인데

 

mov ax, 21

;ax에 21 삽입

 

cmp ax,0

jne print_ax

add ax, 0e30h

int 16h

; if ax == 0, print '0'

print_ax:

cmp ax, 0

; if ax == 0 goto print, else quotient could be bigger than 10 so div 10

je pn_done

mov bx, 10

div bx

push dx

; dx is remainder, ax is quotient

mov dx, 0

 

call print_ax

mov ah, 0eh

add al, 30h

int 16h

 

pn_done:

pop dx

mov ax, dx

ret

 

 

이렇게하니 

 

pop dx 햇을때

0002H가 나와야하는데 0131H이 나오면서 ret이 작동을 안합니다.

pop dx 한번 더해보니 0002H이 나오는걸 보면 0131에 무슨 뜻이 있는거같기도한데

 

또 이상한건 pop dx를 두번넣어서

 

pop dx

pop dx

mov ax, dx 하면 괜찮을줄 알았는데 0131H 0002H 하고 다음 pn_done이 나오면 0001H 010DH가 나와서 에러가 나면서 ret이 또 안되고

 

뭔가 있는거같아서

 

pop dx를 여러번 넣어서 확인해보면

 

0131H 0002H 0131H 0002H 010DH 뒤에는 알수없는 쓰레기값이 막 나오더라구요

 

어셈블리 아시는분 도움부탁드립니다 흑흑

 

 

목록으로

댓글

댓글을 불러오는 중...