{"id":6071,"date":"2026-06-26T10:54:20","date_gmt":"2026-06-26T01:54:20","guid":{"rendered":"https:\/\/www.freelifemakers.org\/wordpress\/?p=6071"},"modified":"2026-06-26T11:03:28","modified_gmt":"2026-06-26T02:03:28","slug":"os-minios-4-2","status":"publish","type":"post","link":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2026\/06\/26\/os-minios-4-2\/","title":{"rendered":"[OS] miniOS-4(2)"},"content":{"rendered":"\n<p>\u2714\ufe0f check_command: \ubd80\ubd84\uc774\uc5b4\uc11c \uc124\uba85\ud569\ub2c8\ub2e4.<br>I am explaining this because it relates to the <code>check_command:<\/code> section.<\/p>\n\n\n\n<p>&#8212; \uc785\ub825\ub41c \uae00\uc790\uac00 \uc544\uc608 \uc5c6\uc73c\uba74 \ud504\ub86c\ud504\ud2b8 \ub77c\ubca8\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4.<br>If no text has been entered, the focus moves to the prompt label.<\/p>\n\n\n\n<p>&#8212; cmp cx, 0 \uc785\ub825\ub41c\uae00\uc790\uac00 0\uac1c\uc778 \uacbd\uc6b0 promt\ub85c \uc810\ud504\ud569\ub2c8\ub2e4.<br><code>cmp cx, 0<\/code>: If the number of entered characters is zero, the program jumps to the prompt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    cmp cx, 0\n    je prompt<\/code><\/pre>\n\n\n\n<p>&#8212; help\uba85\ub839\uc5b4 \/ help command<\/p>\n\n\n\n<p>1) \uc18c\uc2a4 \ud3ec\uc778\ud130 \ub808\uc9c0\uc2a4\ud130(SI)\uc5d0 \uc0ac\uc6a9\uc790\uac00 \ud0a4\ubcf4\ub4dc\ub85c \uc785\ub825\ud55c \ubb38\uc790\uc5f4\uc774 \ub2f4\uae34 \ubc84\ud37c(cmd_buffer)\uc758 \uc2dc\uc791 \uc8fc\uc18c\ub97c \ub123\uc2b5\ub2c8\ub2e4.<br>Load the starting address of the buffer (cmd_buffer)\u2014which contains the string entered by the user via the keyboard\u2014into the source pointer register (SI).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mov si, cmd_buffer<\/code><\/pre>\n\n\n\n<p>2) \ubaa9\uc801\uc9c0 \ud3ec\uc778\ud130 \ub808\uc9c0\uc2a4\ud130(DI)\uc5d0 cmd_help\ubcc0\uc218\uc758 \uc2dc\uc791 \uc8fc\uc18c\ub97c \ub123\uc2b5\ub2c8\ub2e4.<br>Load the starting address of the <code>cmd_help<\/code> variable into the destination pointer register (DI).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mov di, cmd_help<\/code><\/pre>\n\n\n\n<p>3)cmd_buffer\uc758 \uc8fc\uc18c\uac12\uacfc cmd_help\uc758 \uc8fc\uc18c\uac12\uc744 \ube44\uad50\ud569\ub2c8\ub2e4.<br>Compare the address of cmd_buffer with the address of cmd_help.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>call compare_string<\/code><\/pre>\n\n\n\n<p>4)\uac19\uc73c\uba74 do_help\ub85c \uc810\ud504\ud569\ub2c8\ub2e4.<br>If they match, it jumps to do_help.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>je do_help <\/code><\/pre>\n\n\n\n<p>5)compare_string \ud568\uc218 \/ compare_string function<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>compare_string:\n.loop:\n    mov al, &#91;si]\n    mov bl, &#91;di]\n    cmp al, bl          ; \ub450 \uae00\uc790\uac00 \uac19\uc740\uc9c0 \ube44\uad50\n                        ; Compare if two characters are equal\n    jne .not_equal      ; \ub2e4\ub974\uba74 \ud0c8\ucd9c\n                        ; If not equal, escape\n    cmp al, 0           ; \ubb38\uc790\uc5f4\uc774 \ub05d\ub0ac\ub294\uc9c0 \ud655\uc778 (\ub458 \ub2e4 0\uc778 \uc0c1\ud669)\n                        ; Check if the string ended (Both are 0 case)\n    je .equal           ; \ub05d\ub0ac\uc73c\uba74 \uc644\ubcbd\ud788 \uc77c\uce58\n                        ; If ended, perfect match\n    inc si\n    inc di\n    jmp .loop\n.not_equal:\n    clc                 ; Carry Flag \ud074\ub9ac\uc5b4 (\uac19\uc9c0 \uc54a\uc74c \ud45c\uc2dc, \uc5b5\uc9c0 flag \uc138\ud305\uc6a9\uc73c\ub85c cmp \ud65c\uc6a9)\n                        ; Clear Carry Flag (Indicate not equal, use cmp for forced flag setting)\n    mov al, 1\n    cmp al, 0           ; Zero Flag\ub97c 0\uc73c\ub85c \ub9cc\ub4e4\uc5b4 '\ub2e4\ub984'\uc744 \uc54c\ub9bc\n                        ; Set Zero Flag to 0 to notify 'Not Equal'\n    ret\n.equal:\n    cmp al, 0           ; Zero Flag\ub97c 1\ub85c \ub9cc\ub4e4\uc5b4 '\uac19\uc74c'\uc744 \uc54c\ub9bc (AL\uc774 0\uc774\ubbc0\ub85c)\n                        ; Set Zero Flag to 1 to notify 'Equal' (Since AL is 0)\n    ret<\/code><\/pre>\n\n\n\n<p>5-1) \uac12\uc758 \ube44\uad50 \ub8e8\ud2f4 \/ Value comparison routine<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>1.si\uc5d0 \uc785\ub825 \ubb38\uc790 \uc704\uce58 \uc800\uc7a5: \uc0ac\uc6a9\uc790\uac00 \uc785\ub825\ud55c \ubb38\uc790\uc5f4 \ubc84\ud37c(cmd_buffer)\uc758 \uc2dc\uc791 \uc8fc\uc18c\ub97c si\uc5d0 \ub123\uc2b5\ub2c8\ub2e4.\nStore the input character location in SI: Load the starting address of the user-input string buffer (cmd_buffer) into SI.\n\n\u2705 si(sourcd index)\ub808\uc9c0\uc2a4\ud130\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uace0 \ub2e4\ub978 \ub808\uc9c0\uc2a4\ud130\ub97c \uc0ac\uc6a9\ud574\ub3c4 \ub418\uc9c0\ub9cc \n\uadf8\ub7fc\uc5d0\ub3c4 \ubd88\uad6c\ud558\uace0 si\ub97c \uad73\uc774 \uc120\ud0dd\ud574\uc11c \uc4f4 \uc774\uc720\ub294 \ub098\uc911\uc5d0 \ucf54\ub4dc\ub97c lodsb \ud615\ud0dc\ub85c \uc5c5\uadf8\ub808\uc774\ub4dc\ud558\uae30 \ud3b8\ud558\uac8c \ub9cc\ub4e4\uae30 \uc704\ud574\uc11c\uc785\ub2c8\ub2e4.\nYou could use a different register instead of the SI (Source Index) register, but the reason I specifically chose SI is to make it easier to upgrade the code to use the `lodsb` instruction later.\n\nlodsb \uba85\ub839\uc5b4\ub294 CPU\uac00 \ubb34\uc870\uac74 si \ub808\uc9c0\uc2a4\ud130\uac00 \uac00\ub9ac\ud0a4\ub294 \uacf3\uc5d0\uc11c \uac12\uc744 \uc77d\uc5b4\uc624\ub3c4\ub85d \ud558\ub294 \uba85\ub839\uc5b4 \uc785\ub2c8\ub2e4.\nThe `lodsb` instruction causes the CPU to unconditionally read a value from the memory location pointed to by the `si` register.\n\n2.di\uc5d0 \ube44\uad50 \ub300\uc0c1 \uc8fc\uc18c \uc800\uc7a5: \ube44\uad50\ud560 \uba85\ub839\uc5b4 \ubcc0\uc218(cmd_help)\uc758 \uc2dc\uc791 \uc8fc\uc18c\ub97c di\uc5d0 \ub123\uc2b5\ub2c8\ub2e4.\nStore the address of the comparison target in DI: Load the starting address of the command variable to be compared (cmd_help) into DI.\n\n3.al\uacfc bl\ub85c \uac12 \ubd88\ub7ec\uc624\uae30:si\uac00 \uac00\ub9ac\ud0a4\ub294 \uc704\uce58\uc758 \uac12(\uc785\ub825\ud55c \uccab \uae00\uc790)\uc744 al\ub85c \uac00\uc838\uc635\ub2c8\ub2e4.\nLoading values \u200b\u200binto AL and BL: The value at the location pointed to by SI (the first character entered) is loaded into AL.\n\n4.di\uac00 \uac00\ub9ac\ud0a4\ub294 \uc704\uce58\uc758 \uac12(\uc815\ub2f5 \uccab \uae00\uc790)\uc744 bl\ub85c \uac00\uc838\uc635\ub2c8\ub2e4.\nLoad the value at the location pointed to by di (the first character of the correct answer) into bl.\n\n5.cmp al, bl\ub85c \uc9c4\uc9dc \ube44\uad50: \ub450 \ub808\uc9c0\uc2a4\ud130\uc5d0 \ub2f4\uae34 \uc21c\uc218\ud55c \ub370\uc774\ud130(\uae00\uc790)\ub97c \ube44\uad50\ud569\ub2c8\ub2e4.\nA true comparison using `cmp al, bl`: This compares the raw data (characters) contained in the two registers.<\/code><\/pre>\n\n\n\n<p>5-2) \uac12\uc774 \uc11c\ub85c \ub2e4\ub974\uba74 \ud0c8\ucd9c\ud558\uae30<br>Exit if the values \u200b\u200bare different.<\/p>\n\n\n\n<p>5-2-1.jne\ub294 Jump if Not Equal\uc758 \uc57d\uc790\ub85c \ubc14\ub85c \uc717\uc904\uc5d0 \uc788\ub294 cmp al, bl \uc5f0\uc0b0 \uacb0\uacfc \ub450 \uac12\uc774 \uc11c\ub85c \ub2e4\ub97c \ub54c .not_equal \ub808\uc774\ube14\ub85c \uc810\ud504(\uc774\ub3d9)\ud558\ub77c\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4.<br><code>jne<\/code> stands for &#8220;Jump if Not Equal&#8221;; it is an instruction that jumps (moves) to the <code>.not_equal<\/code> label if the two values \u200b\u200bdiffer, based on the result of the <code>cmp al, bl<\/code> operation performed in the line immediately preceding it.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>jne .not_equal<\/code><\/pre>\n\n\n\n<p>5-3) al\ub808\uc9c0\uc2a4\ud130\ub97c 1\ub85c \uc14b\ud305\ud558\uace0 cmp\ub85c \ube44\uad50\uacb0\uacfc 0\uc774 \uc544\ub2c8\uba74 \uc800\uc7a5\ub41c \uba54\uc778\ub85c\uc9c1(do_help)\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4.<br>Set the AL register to 1, and if the comparison result from the <code>cmp<\/code> instruction is non-zero, jump to the stored main logic (<code>do_help<\/code>).<\/p>\n\n\n\n<p>1\uc744 \uc14b\ud305\ud558\ub294 \uc774\uc720\ub294 1\ub85c \ucd08\uae30\ud654\ud558\uc9c0 \uc54a\uc73c\uba74 \uae30\uc874\uc758 \uac12\uc774 \uc720\uc9c0\ub418\uace0 \uc788\uae30 \ub54c\ubb38\uc5d0 \ud504\ub85c\uadf8\ub7a8 \uc624\ub3d9\uc791 \ubc29\uc9c0\ub97c \uc704\ud574\uc11c \uac12\uc744 \uba85\ud655\ud788 \uc14b\ud305\ud569\ub2c8\ub2e4.<br>The reason for setting the value to 1 is to explicitly initialize it; without doing so, the existing value would remain, potentially causing the program to malfunction.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.not_equal:\n    clc                 ; Carry Flag \ud074\ub9ac\uc5b4 (\uac19\uc9c0 \uc54a\uc74c \ud45c\uc2dc, \uc5b5\uc9c0 flag \uc138\ud305\uc6a9\uc73c\ub85c cmp \ud65c\uc6a9)\n                        ; Clear Carry Flag (Indicate not equal, use cmp for forced flag setting)\n    mov al, 1\n    cmp al, 0           ; Zero Flag\ub97c 0\uc73c\ub85c \ub9cc\ub4e4\uc5b4 '\ub2e4\ub984'\uc744 \uc54c\ub9bc\n                        ; Set Zero Flag to 0 to notify 'Not Equal'\n    ret<\/code><\/pre>\n\n\n\n<p>5-4) al\ub808\uc9c0\uc2a4\ud130\uc758 \uac12\uc740 \uc774\ubbf8 0\uc774\ubbc0\ub85c \uc774\uc804\uc5d0 \uc800\uc7a5\ub41c \uba54\uc778\ub85c\uc9c1 do_help\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4.<br>Since the value of the AL register is already 0, the execution jumps to the previously stored main logic, <code>do_help<\/code>.<\/p>\n\n\n\n<p>zero flag\ub780 \ube44\uad50\uac12\uc774 0\uacfc \uac19\uc73c\uba74 cpu \ub0b4\ubd80\uc758zero flag\ub780 \uac12\uc774 1\uc774 \ub429\ub2c8\ub2e4.<br>The zero flag is a CPU flag that is set to 1 when the comparison value is equal to 0.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.equal:\n    cmp al, 0           ; Zero Flag\ub97c 1\ub85c \ub9cc\ub4e4\uc5b4 '\uac19\uc74c'\uc744 \uc54c\ub9bc (AL\uc774 0\uc774\ubbc0\ub85c)\n                        ; Set Zero Flag to 1 to notify 'Equal' (Since AL is 0)\n    ret<\/code><\/pre>\n\n\n\n<p>6) do_clear \ud568\uc218 \/ do_clear function<\/p>\n\n\n\n<p>6-1.16\ube44\ud2b8 \ubc14\uc774\uc624\uc2a4\ub294 \ud654\uba74\uc744 \uc9c0\uc6b0\ub294 \uae30\ub2a5\uc774 \uc5c6\uc5b4\uc11c \ud654\uba74\uc744 \ubc00\uc5b4 \uc62c\ub9ac\ub294 \ubc29\uc2dd\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uc544\ub798\ub294 \uc2a4\ud06c\ub864 \uc5c5 \uae30\ub2a5 \uc120\ud0dd\uc785\ub2c8\ub2e4.<br>Since the 16-bit BIOS lacks a screen-clearing function, it uses a method of shifting the screen upward. Shown below is the selection for the scroll-up function.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    mov ah, 0x06        ; \uc2a4\ud06c\ub864 \uc5c5 \uae30\ub2a5\n                        ; Scroll up function<\/code><\/pre>\n\n\n\n<p>6-2. \uba87 \uc904\uc744 \uc62c\ub9b4\uc9c0 \uc9c0\uc815\ud558\uc9c0 \uc54a\uace0 0\uc744 \uc9c0\uc815\ud558\uba74 \ubb34\ud55c\ub300\ub85c \ud654\uba74\uc744 \uc704\ub85c \ubc00\uc5b4\uc62c\ub9bd\ub2c8\ub2e4.<br>If you specify 0 instead of a specific number of lines, the screen scrolls upward indefinitely.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    mov al, 0           ; 0 = \ud654\uba74 \uc804\uccb4 \uc9c0\uc6b0\uae30\n                        ; 0 = Clear entire screen<\/code><\/pre>\n\n\n\n<p>6-3. \ube48\uacf5\uac04\uc5d0 CLI\uae30\ubcf8 \uc0c9\uc0c1\uc778 \ubc14\ud0d5\uc0c9\uacfc \uae00\uc790\uc0c9\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4.<br>Specify the default CLI background and text colors for the empty space.<\/p>\n\n\n\n<p>\uc774 \ubd80\ubd84\uc774 \uc5c6\ub2e4\uba74 bh\uc5d0 \uc774\uc804\uc5d0 \ub2e4\ub978 \uac12\uc774 \ub4e4\uc5b4\uc788\ub2e4\uba74 \ud654\uba74\uc5d0 \ub2e4\ub978 \uc0c9\uc0c1\uc774 \ub098\ud0c0 \ub0a0 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br>Without this part, if <code>bh<\/code> already contains a different value, a different color might appear on the screen.<\/p>\n\n\n\n<p>\uadf8\ub798\uc11c \uc0c9\uc0c1\uc744 \ud655\uc2e4\ud788 \uc9c0\uc815\ud558\ub294 \uc548\uc804\uc7a5\uce58 \uc785\ub2c8\ub2e4.<br>So, it serves as a safeguard to explicitly specify the color.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    mov bh, 0x07        ; \ubc14\ud0d5\uc0c9 \uac80\uc815, \uae00\uc790\uc0c9 \ud770\uc0c9\n                        ; Background black, Foreground white<\/code><\/pre>\n\n\n\n<p>6-4.\uc9c0\uc6b0\uace0 \uc2f6\uc740 \ud654\uba74\uc758 \ub124\ubaa8\ub09c \uc601\uc5ed(\ubc94\uc704)\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4.<br>Select the rectangular area (range) on the screen that you want to erase.<\/p>\n\n\n\n<p>\uc61b\ub0a0 \ubaa8\ub2c8\ud130\uc758 \ud14d\uc2a4\ud2b8 \ubaa8\ub4dc\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \uac00\ub85c 80\uce78(0~79), \uc138\ub85c 25\uce78(0~24)\uc758 \uae00\uc790\ud310\uc73c\ub85c \uc774\ub8e8\uc5b4\uc838 \uc788\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c (0,0)\ubd80\ud130 (24,79)\uae4c\uc9c0 \uc9c0\uc815\ud588\ub2e4\ub294 \uac83\uc740 \ubaa8\ub2c8\ud130 \uc804\uccb4 \ud654\uba74\uc744 \uaf49 \ucc28\uac8c \uc9c0\uc815\ud588\ub2e4\ub294 \ub73b\uc785\ub2c8\ub2e4. <br>The text mode of older monitors essentially consists of a character grid with 80 columns (0\u201379) and 25 rows (0\u201324). Therefore, specifying the range from (0, 0) to (24, 79) means designating the entire screen area.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mov ch, 0           ; \uc88c\uc0c1\ub2e8 \ud589 (Top-left Row)\nmov cl, 0           ; \uc88c\uc0c1\ub2e8 \uc5f4 (Top-left Column)\nmov dh, 24          ; \uc6b0\ud558\ub2e8 \ud589 (Bottom-right row)\nmov dl, 79          ; \uc6b0\ud558\ub2e8 \uc5f4 (Bottom-right column)<\/code><\/pre>\n\n\n\n<p>6-5.\ubc14\uc774\uc624\uc2a4 \uc2e4\ud589 \/ Run BIOS<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int 0x10            <\/code><\/pre>\n\n\n\n<p>6-6.\ucee4\uc11c \uc704\uce58 \ubcc0\uacbd\uae30\ub2a5\uc744 \uc9c0\uc815\uc744 \uc124\uc815\ud569\ub2c8\ub2e4.<br>Configure the cursor position change function.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mov ah, 0x02       <\/code><\/pre>\n\n\n\n<p>6-7.\ud398\uc774\uc9c0 \ubc88\ud638 \uc9c0\uc815,0\ubc88 \ube44\ub514\uc624 \ud398\uc774\uc9c0\ub97c \uc9c0\uc815\ud569\ub2c8\ub2e4.<br>Page number assignment: Specifies video page 0.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> mov bh, 0<\/code><\/pre>\n\n\n\n<p>6-8.\ucee4\uc11c\ub97c \uc774\ub3d9\ud560 \ubaa9\uc801\uc9c0 \uc8fc\uc18c\ub97c \uc9c0\uc815\ud569\ub2c8\ub2e4. (0,0)\uc740 \ubaa8\ub2c8\ud130 \ud654\uba74\uc758 \ub9e8 \uc67c\ucabd \uc704 \uad6c\uc11d\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.<br>Specify the destination address for moving the cursor. (0,0) refers to the top-left corner of the monitor screen.<\/p>\n\n\n\n<p>mov dh,0\uc740 \uccab\ubc88\uc9f8 \ud589\uc744 \uc758\ubbf8\ud558\uace0 mov dl,0\uc740 \uc88c\uce21 \uccab\ubc88\uc9f8 \uc5f4\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.<br><code>mov dh, 0<\/code> refers to the first row, and <code>mov dl, 0<\/code> refers to the first column on the left.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mov dh, 0           \nmov dl, 0           <\/code><\/pre>\n\n\n\n<p>6-9.promt\ub77c\ubca8\ub85c \uc810\ud504\ud569\ub2c8\ub2e4.<br>Jump to the &#8216;prompt&#8217; label.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>jmp prompt<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u2714\ufe0f \ub098\uba38\uc9c0 \ucf54\ub4dc\ub294 \ubcc0\uc218\uc124\uc815\ubd80\ubd84\uacfc \ucd08\uae30\ud654 \ubd80\ubd84\uc785\ub2c8\ub2e4.<br>The remaining code consists of the variable declarations and the initialization section.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>; ----------------------------------------------------\n; \ub370\uc774\ud130 \ubc0f \ubcc0\uc218 \uc120\uc5b8 \uc601\uc5ed (\uc804\uc5ed \ubcc0\uc218)\n; Data and variable declaration area (Global variables)\n; ----------------------------------------------------\nmsg_welcome   db '3. Hello from Sector 2! miniOS Shell Started.', 13, 10, 0\nmsg_prompt    db 'miniOS&gt; ', 0\nmsg_unknown   db 'Unknown command! Type \"help\".', 13, 10, 0\nmsg_help_text db 'Available commands: help, clear', 13, 10, 0\n\n; \ube44\uad50\ud560 \uba85\ub839\uc5b4 \uae30\uc900 \ubb38\uc790\uc5f4 (\uc0c1\uc218)\n; Reference command strings for comparison (Constants)\ncmd_help      db 'help', 0\ncmd_clear     db 'clear', 0\n\n; \uc0ac\uc6a9\uc790\uac00 \uc785\ub825\ud55c \uae00\uc790\ub4e4\uc744 \ub2f4\uc744 '\ube48 \ubcc0\uc218 \uacf5\uac04' (\ubc84\ud37c)\n; 'Empty variable space' to hold characters entered by the user (Buffer)\n; 16\ubc14\uc774\ud2b8 \ud06c\uae30\ub9cc\ud07c \uacf5\uac04\uc744 \ubbf8\ub9ac \ud655\ubcf4\ud574 \ub461\ub2c8\ub2e4.\n; Pre-allocate space of 16 bytes.\ncmd_buffer    times 16 db 0\n\n; 512\ubc14\uc774\ud2b8 \ud06c\uae30 \ub9de\ucd94\uae30\n; Fill up to 512 bytes\ntimes 512 - ($ - $$) db 0<\/code><\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u2714\ufe0f check_command: \ubd80\ubd84\uc774\uc5b4\uc11c \uc124\uba85\ud569\ub2c8\ub2e4.I am explaining this because it relates to the check_command: section. &#8212; \uc785\ub825\ub41c \uae00\uc790\uac00 \uc544\uc608 \uc5c6\uc73c\uba74 \ud504\ub86c\ud504\ud2b8 \ub77c\ubca8\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4.If no text has been entered, the focus moves to the prompt label. &#8212; cmp cx, 0 \uc785\ub825\ub41c\uae00\uc790\uac00 0\uac1c\uc778 \uacbd\uc6b0 promt\ub85c \uc810\ud504\ud569\ub2c8\ub2e4.cmp cx, 0: If the number of entered characters is zero, the program [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26,1],"tags":[],"class_list":["post-6071","post","type-post","status-publish","format-standard","hentry","category-os","category-uncategorized","missing-thumbnail"],"_links":{"self":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/6071","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=6071"}],"version-history":[{"count":4,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/6071\/revisions"}],"predecessor-version":[{"id":6075,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/6071\/revisions\/6075"}],"wp:attachment":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=6071"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=6071"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=6071"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}