|
@@ -20,6 +20,7 @@ BACKSPACE equ 0x8
|
|
|
[bits 32]
|
|
[bits 32]
|
|
|
section .text
|
|
section .text
|
|
|
global put_char ; 导出为全局符号
|
|
global put_char ; 导出为全局符号
|
|
|
|
|
+global put_str
|
|
|
;------------------------ put_char -----------------------------------------------
|
|
;------------------------ put_char -----------------------------------------------
|
|
|
; 功能描述: 把栈中的 1 个字符写入光标所在处
|
|
; 功能描述: 把栈中的 1 个字符写入光标所在处
|
|
|
;---------------------------------------------------------------------------------
|
|
;---------------------------------------------------------------------------------
|
|
@@ -133,3 +134,27 @@ put_char:
|
|
|
.put_char_done:
|
|
.put_char_done:
|
|
|
popad
|
|
popad
|
|
|
ret
|
|
ret
|
|
|
|
|
+
|
|
|
|
|
+;------------------------ put_str -----------------------------------------------
|
|
|
|
|
+; 功能描述: 通过 put_char 来打印以 0 字符结尾的字符串
|
|
|
|
|
+;---------------------------------------------------------------------------------
|
|
|
|
|
+; 输入:栈中参数为打印的字符串
|
|
|
|
|
+; 输出:无
|
|
|
|
|
+put_str:
|
|
|
|
|
+ push ebx ; 备份 ebx
|
|
|
|
|
+ push ecx ; 备份 ecx
|
|
|
|
|
+ xor ecx, ecx ; 清空 ecx
|
|
|
|
|
+ mov ebx, [esp + 12] ; 从栈中得到待打印的字符串地址
|
|
|
|
|
+.goon:
|
|
|
|
|
+ mov cl, [ebx]
|
|
|
|
|
+ cmp cl, 0 ; 如果处理到了字符串尾巴,跳到结束处返回
|
|
|
|
|
+ jz .str_over
|
|
|
|
|
+ push ecx ; 为 put_char 传递参数
|
|
|
|
|
+ call put_char
|
|
|
|
|
+ add esp, 4 ; 回收参数所占的栈空间
|
|
|
|
|
+ inc ebx ; 使 ebx 指向下一个字符
|
|
|
|
|
+ jmp .goon
|
|
|
|
|
+.str_over:
|
|
|
|
|
+ pop ecx
|
|
|
|
|
+ pop ebx
|
|
|
|
|
+ ret
|