<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=HanoiProblem%2F%EC%98%81%EB%8F%99</id>
	<title>HanoiProblem/영동 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=HanoiProblem%2F%EC%98%81%EB%8F%99"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=HanoiProblem/%EC%98%81%EB%8F%99&amp;action=history"/>
	<updated>2026-05-14T16:18:50Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=HanoiProblem/%EC%98%81%EB%8F%99&amp;diff=32056&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:23, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=HanoiProblem/%EC%98%81%EB%8F%99&amp;diff=32056&amp;oldid=prev"/>
		<updated>2021-02-07T05:23:21Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 헛소리 ==&lt;br /&gt;
* 음... 어셈블리 언어로 짜니 줄 수가 엄청나게 나오는 군요...&lt;br /&gt;
* 그리고 이게 이틀이나 걸린 이유는 전 push를 하면 각 변수 별로 스택이 있는 줄 알아서 pop의 순서가 상관이 없다고 생각했는데, 그게 아니라 스택은 하나라서 push의 반대 순서로 pop을 해야 하는 것이더군요.&lt;br /&gt;
== 코드 ==&lt;br /&gt;
 ;하노이의 탑&lt;br /&gt;
 .model small&lt;br /&gt;
 .stack 100h&lt;br /&gt;
 &lt;br /&gt;
 .data&lt;br /&gt;
 message1 db &amp;quot;have move &amp;quot;, &amp;#039;$&amp;#039;&lt;br /&gt;
 message2 db &amp;quot;th disk from &amp;quot;, &amp;#039;$&amp;#039;&lt;br /&gt;
 message3 db &amp;quot;to &amp;quot;, &amp;#039;$&amp;#039;&lt;br /&gt;
 n dw 5			;disk의 갯수&lt;br /&gt;
 from dw 1		;시작 기둥(1번)&lt;br /&gt;
 by dw 2			;중간 기둥(2번)&lt;br /&gt;
 to dw 3			;목적지 기둥(3번)	&lt;br /&gt;
 &lt;br /&gt;
 .code&lt;br /&gt;
 extrn Crlf:proc&lt;br /&gt;
 extrn Writeint:proc&lt;br /&gt;
 &lt;br /&gt;
 main proc&lt;br /&gt;
 	mov ax, @data&lt;br /&gt;
 	mov ds, ax&lt;br /&gt;
 	mov bx, 10	;Writeint사용시에 10진수 출력&lt;br /&gt;
 &lt;br /&gt;
 	call Move	;Move함수 호출&lt;br /&gt;
 			;Move(from, to, by)&lt;br /&gt;
 	mov ax, 4C00h	;종료&lt;br /&gt;
 	int 21h&lt;br /&gt;
 main endp&lt;br /&gt;
 &lt;br /&gt;
 Move proc		;Move 프로시저(재귀호출되는 부분)&lt;br /&gt;
 	cmp n, 0	;n=0이면&lt;br /&gt;
 	jz endmove	;Move 프로시저의 끝으로 감&lt;br /&gt;
 	&lt;br /&gt;
 	push n		;n값을 스택에 넣음&lt;br /&gt;
 	dec n		;n-1&lt;br /&gt;
 &lt;br /&gt;
 	push from	;from을 스택에 넣음&lt;br /&gt;
 	push by		;by를 스택에 넣음&lt;br /&gt;
 	push to		;to를 스택에 넣음&lt;br /&gt;
 	&lt;br /&gt;
 	mov ax, by	;by와 to의 위치를 바꿔줌.(ax를 temp로 사용)&lt;br /&gt;
 	mov si, to	;메모리 간의 대입이 안 되므로&lt;br /&gt;
 	mov by, si	;si를 이용해 대입&lt;br /&gt;
 	mov to, ax&lt;br /&gt;
 &lt;br /&gt;
 	call Move	;Move(n-1, from, by, to)&lt;br /&gt;
 			;(by와 to의 위치를 바꿔서 함수 호출)&lt;br /&gt;
 	pop to		;다시 to, by, from, n을 순서대로 꺼냄&lt;br /&gt;
 	pop by		;스택이므로 빼는 순서에 유의해야 한다&lt;br /&gt;
 	pop from		&lt;br /&gt;
 	pop n&lt;br /&gt;
 	&lt;br /&gt;
 	mov ah, 9	;message1을 출력&lt;br /&gt;
 	mov dx, offset message1&lt;br /&gt;
 	int 21h&lt;br /&gt;
 	&lt;br /&gt;
 	mov ax, n	;몇번째 디스크를 옮기는지 출력&lt;br /&gt;
 	call Writeint&lt;br /&gt;
 	&lt;br /&gt;
 	mov dx, offset message2&lt;br /&gt;
 	mov ah, 9	;message2를 출력&lt;br /&gt;
 	int 21h&lt;br /&gt;
 &lt;br /&gt;
 	mov ax, from	;옮기는 시작점 출력&lt;br /&gt;
 	call Writeint&lt;br /&gt;
 	call Space	;한칸 띄고&lt;br /&gt;
 &lt;br /&gt;
 	mov dx, offset message3&lt;br /&gt;
 	mov ah, 9	;message3을 출력&lt;br /&gt;
 	int 21h&lt;br /&gt;
 &lt;br /&gt;
 	mov ax, to	;목적지 출력&lt;br /&gt;
 	call Writeint&lt;br /&gt;
 &lt;br /&gt;
 	call Crlf	;줄바꿈&lt;br /&gt;
 &lt;br /&gt;
 	push n		;n을 다시 스택에 넣고&lt;br /&gt;
 	dec n		;n-1&lt;br /&gt;
 &lt;br /&gt;
 	push from	;from, by, to를 차례로 스택에 넣음&lt;br /&gt;
 	push by&lt;br /&gt;
 	push to&lt;br /&gt;
 &lt;br /&gt;
 	mov ax, from	;from과 by를 바꿈(ax를 temp로 하여)&lt;br /&gt;
 	mov si, by	;메모리 간 대입 허용 안 하므로&lt;br /&gt;
 	mov from, si	;si를 이용해서 대입&lt;br /&gt;
 	mov by, ax&lt;br /&gt;
 	&lt;br /&gt;
 	call Move	;Move(by, to, from) 호출 &lt;br /&gt;
 	&lt;br /&gt;
 	pop to		;to, by, from, n순으로 스택에서 뺌&lt;br /&gt;
 	pop by&lt;br /&gt;
 	pop from	&lt;br /&gt;
 	pop n&lt;br /&gt;
 &lt;br /&gt;
 	endmove:	&lt;br /&gt;
 	ret		;프로시저 끝&lt;br /&gt;
 Move endp&lt;br /&gt;
 &lt;br /&gt;
 Space proc		;띄어쓰기 함수&lt;br /&gt;
 	mov dl, &amp;quot; &amp;quot;&lt;br /&gt;
 	mov ah, 2&lt;br /&gt;
 	int 21h		;빈칸을 출력&lt;br /&gt;
 	ret&lt;br /&gt;
 Space endp&lt;br /&gt;
 &lt;br /&gt;
 end main		;프로그램 종료&lt;br /&gt;
----&lt;br /&gt;
작성자: [[Yggdrasil]]&lt;br /&gt;
----&lt;br /&gt;
[[HanoiProblem]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>