汇编:显示字符串
前言
DOS功能调用
DOS利用软件中断方式提供系统功能。
中断调用指令是“INT N”,其中N表示调用的中断号、即中断0~中断255号。
DOS系统调用一般有如下4个步骤:
(1)在AH寄存器中设置系统功能调用号
(2)在指定寄存器中设置入口参数
(3)用中断调用指令(INT N)执行功能调用
(4)根据出口参数分析功能调用执行情况
DOS功能调用的中断号主要是21H,利用AH寄存器区别各个子功能。
子功能号 | 功能 | 入口参数 | 出口参数 |
---|---|---|---|
AH=01H | 从标准输入设备输入一个字符 | AL=输入字符的ASCII码 | |
AH=02H | 向标准输出设备输出一个字符 | DL=字符的ASCII码 | |
AH = 09H | 显示字符串 | DS:DX=缓冲区首址 | |
AH = 4CH | 带返回码的结束 | AL=进程返回码 |
源代码
;显示字符串
.model small
.stack
.data
msg db 'hello,Assembly!',13,10,'$';在dos需要利用'\r\n'使光标下一行首位置(回车换行)
.code
.startup
mov dx,offset msg
mov ah,9 ;//调用dos 9号功能号输出字符串,以$结束
int 21h
.exit
end
利用库函数
;利用库函数显示字符串
include io.inc
.model small
.stack
.data
msg db 'hello,Assembly!',13,10,0;在dos需要利用'\r\n'使光标下一行首位置(回车换行)
.code
.startup
mov ax,offset msg
call dispmsg ; 利用库函数字符串的结束符为0
.exit
end
库函数实现
;自己实现函数显示字符串
.model small
.stack
.data
msg db 'hello,Assembly!',13,10,0;在dos需要利用'\r\n'使光标下一行首位置(回车换行)
.code
.startup
mov ax,offset msg
call dispmsg ;
.exit
dispmsg proc ;定义过程
;设置入口参数,以0结束
push ax
push bx
push dx ;保存寄存器的内容
mov bx,ax
again:mov al,byte ptr [bx]
Test al,al ;判断al是否为0
jz ex
mov ah,2
mov dl,al
int 21h
inc bx
jmp again
ex: pop dx
pop bx
pop ax
ret
dispmsg endp;过程结束
end