汇编:显示字符串

汇编:显示字符串

前言

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
    原文作者:antRain
    原文地址: https://blog.csdn.net/qq_41146650/article/details/102748483
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞