ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

汇编实验5 DOS、BIOS调用

2021-11-10 23:01:34  阅读:134  来源: 互联网

标签:汇编 dl bl mov BIOS ax DOS ASCII stack


DOS、BIOS调用

实验目的

  1. 学习掌握DOS、BOIS调用方法
  2. 学会编制实用小程序

实验内容

编一程序,将这些ASCII码表示的字符以16行16列的表格形式显示出来,要求显示时按ASCII码的递增顺序分行显示(即行内ASCII码依次递增,与ASCII表中给出的表格行、列位置正好倒置)。每行、相邻的两字符间由空白符(ASCII码00)或空格(ASCII码20H)分开,只要求显示出字符,不要画出表格线。

实验代码

dos调用

CRLF    MACRO
        MOV    DL,0DH
        MOV    Ah,02H
        INT    21H
        MOV    DL,0AH
        MOV    AH,02H
        INT    21H
ENDM ;定义宏功能用于换行
data segment
data ends
stack segment stack 'stack'
STA db 128 dup(?)
TOP EQU LENGTH STA
stack ends
code segment
ASSUME cs:code,ds:data,ss:stack
START:;初始化相关寄存器
        mov ax,data
        mov ds,ax
        mov ax,stack
        mov ss,ax
        mov sp,TOP
        mov bl,0;bl中存放要打印字符的ASCII码
        mov cx,16;设置外层循环次数,即行数
outer:
        push cx
        mov cx,16;设置内层循环次数,即列数
inner:        
        cmp bl,0AH;判断是否为换行符
        jz change
        cmp bl,0DH;判断是否为回车符
        jz change
        mov dl,bl;将bl->dl用于显示
show:
        mov ah,2
        int 21H;调用dos21h中断的2号子功能输出字符
        mov dl,0
        int 21H;输出空格间隔
        inc bl;下一个字符ascii码
        loop inner
        CRLF;宏换行
        pop cx
        loop outer
        mov ax,4C00H;退出程序
        int 21H
change:;若为特殊字符则将其替换为0
        mov dl,0
        jmp show
code ends
end START

bios调用

data segment
data ends
stack segment stack 'stack'
STA db 128 dup(?)
TOP EQU LENGTH STA
stack ends
code segment
ASSUME cs:code,ds:data,ss:stack
START:;初始化相关寄存器
        mov ax,data
        mov ds,ax
        mov ax,stack
        mov ss,ax
        mov sp,TOP
        call CleanScreen;调用子程序清空屏幕

        mov bl,0;bl中存放要打印字符的ASCII码
        mov dh,0;设置行号
outer:
        mov dl,0;设置列号
inner:
        mov ah,02H
        int 10H;调用bios中断设置光标位置
        cmp bl,0AH;判断是否为换行符
        jz change
        cmp bl,0DH;判断是否为回车符
        jz change
        mov al,bl;将bl->al用于显示
show:
        mov cl,1;设置输出字符字数
        mov ah,0AH
        int 10H;调用bios中断输出字符
        inc dl;列号+1
        inc bl;下一个字符ascii码
        mov ah,02H
        int 10H
        mov al,0
        mov ah,0AH
        int 10H;输出空格间隔
        inc dl;列号+1
        cmp dl,32;判断一列是否完成
        jnz inner
        inc dh
        cmp dh,16;判断行数是否达标
        jnz outer
        mov ax,4C00H
        int 21H;结束程序

change:;若为特殊字符则将其替换为0
        mov al,0
        jmp show
;CleanScreen清空屏幕,便于输出
CleanScreen PROC
	;保存现场
        push bx
        push cx
        push dx
        push es
        mov bx,0b800h
        mov es,bx
        mov bx,0
        mov dx,0700h
        mov cx,2000
clearScreen:
        mov es:[bx],dx
        add bx,2
        loop clearScreen
	;恢复现场
        pop es
        pop cx
        pop dx
        pop bx
        ret
CleanScreen ENDP
code ends
end START

运行结果

dos调用
在这里插入图片描述
bios调用
在这里插入图片描述

标签:汇编,dl,bl,mov,BIOS,ax,DOS,ASCII,stack
来源: https://blog.csdn.net/weixin_45816954/article/details/121258733

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有