汇编语言实验8:BIOS/DOS功能调用与宏指令程序设计

这篇具有很好参考价值的文章主要介绍了汇编语言实验8:BIOS/DOS功能调用与宏指令程序设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验八 BIOS/DOS功能调用与宏指令程序设计

1. 实验目的

  1. 掌握汇编语言程序设计的基本方法和技能
  2. 掌握汇编语言源程序的编辑汇编连接和执行的完整过程
  3. 通过上机操作理解宏定义、宏调用、宏展开的概念,熟练运用宏功能编写程序
  4. 掌握BIOS/DOS基础功能的实现调用方法
  5. 理解常用的DOS功能调用的基本使用,能熟练运用1号,2号,9号,10号DOS功能调用编写字符的输入输出程序,掌握上机调试的方法

2. 实验任务

  1. 熟悉汇编语言环境,熟练汇编语言的编写
  2. 学习BIOS/DOS功能和宏汇编的汇编语言程序的设计和调试
  3. 加深对汇编语言宏汇编操作和宏汇编指令的理解
  4. 加深对汇编语言整体的认识和把握
  5. 掌握在汇编语言中BIOS/DOS功能调用及宏汇编的实现方法和流程
  6. 实验步骤

3.1 BIOS/DOS及宏汇编程序题目设计

  1. 利用DOS相关功能,先显示一行输出信息,然后根据输入的不同(Y/N),显示不同的输出内容。
  1. 利用DOS相关功能,在屏幕上输入10个字符存入S1开始的存储单元,将内容逆序输出到屏幕上。
  1. 利用宏功能,实现两个字节单元的内容互换。
  1. 从键盘输入一个字符串(只含英文字母),先将它原样显示一遍,然后将其中的小写字母转为大写字母后再显示一遍。要求使用宏汇编功能实现,观察汇编时宏调用被展开的情况。

3.2 编写代码

代码一

;1. 利用DOS相关功能,先显示一行输出信息,然   后根据输入的不同(Y/N),显示不同的输出内容。

DATAS SEGMENT
    ;此处输入数据段代码
    TIP DB 'Please input your choice: $'
    Y DB 0DH,0AH,0DH,0AH,'YOUR CHOICE IS RIGHT!',0DH,0AH,'$'
    N DB 0DH,0AH,0DH,0AH,'YOUR CHOICE IS WRONG!',0DH,0AH,'$'
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码

    MOV AH,09H
    MOV DX,OFFSET TIP
    INT 21H     ;输出字符串TIP
    MOV AH,01H
    INT 21H     ;接收键盘输入
    CMP AL,'Y'
    JE YES
    CMP AL,'y'
    JE YES
    MOV AH,09H
    MOV DX,OFFSET N
    INT 21H     ;输出字符串N
    JMP NEXT
YES:
    MOV AH,09H
    MOV DX,OFFSET Y
    INT 21H
NEXT:
    MOV AH,4CH  ;输出字符串Y
    INT 21H
CODES ENDS
END START

代码二

;2. 利用DOS相关功能,在屏幕上输入10个字符存入S1开始的存储单元,将内容逆序输出到屏幕上。

DATAS SEGMENT
    ;此处输入数据段代码  
    S1 DB 10 DUP(?)
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
    XOR SI,SI
    MOV CX,10
INPUT:
    MOV AH,1
    INT 21H     ;输入一个字符
    MOV S1[SI],AL
    INC SI
    LOOP INPUT
    MOV AH,02H
    MOV DL,0DH
    INT 21H
    MOV DL,0AH
    INT 21H     ;回车换行
    MOV CX,10
    MOV DI,9    ;DI初值为末单元的偏移量
DISP:
    MOV DL,S1[DI]
    MOV AH,2
    INT 21H     ;输出一个字符
    DEC DI      ;逆序指向下一个单元
    LOOP DISP
    MOV AH,4CH
    INT 21H
CODES ENDS
END START

代码三

;3. 利用宏功能,实现两个字节单元的内容互换。

SWAP MACRO X,Y    ;宏定义
    PUSH AX
    MOV AL,X
    XCHG AL,Y
    MOV X,AL
    POP AX
    ENDM

DATAS SEGMENT
    ;此处输入数据段代码  
    BLOCK1 DB 45H
    BLOCK2 DB 17H
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
    SWAP BLOCK1,BLOCK2  ;宏调用
    MOV AH,4CH
    INT 21H
CODES ENDS
END START

代码四

;4. 从键盘输入一个字符串(只含英文字母),先将它原样显示一遍,然后将其中的小写字母转为大写字母后再显示一遍。要求使用宏汇编功能实现,观察汇编时宏调用被展开的情况。

;字符串输出,COUNT为字符串长度,STRING为字符串的起始地址
DISPSTR MACRO COUNT,STRING
    LOCAL NEXT
    PUSH BX
    PUSH CX
    MOV CL,COUNT    ;CL<--字符串长度
    MOV CH,0
    LEA BX,STRING   ;字符串存储的起始地址
NEXT:
    MOV AH,02H
    MOV DL,[BX]
    INT 21H         ;输出一个字符
    INC BX
    LOOP NEXT
    POP CX
    POP BX
    ENDM

;小写字母转大写字母
CHANGE MACRO BUFFER
    LEA BX,BUFFER
AGAIN:
    MOV AL,[BX]
    CMP AL,'$'
    JE DONE
    CMP AL,'a'
    JAE NEXT1
    JMP DONE1
NEXT1:
    CMP AL,'z'
    JA DONE1
    SUB AL,20H
    MOV BYTE PTR [BX],AL
DONE1:
    INC BX
    JMP AGAIN
DONE:
    ENDM

;回车换行
NEWLINE MACRO
    MOV AH,02H
    MOV DL,0DH
    INT 21H
    MOV DL,0AH
    INT 21H
    ENDM

;主程序
DATAS SEGMENT
    ;此处输入数据段代码 
    BUFFER DB 200,?,200 DUP(?) 
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码

    MOV AH,0AH
    MOV DX,OFFSET BUFFER
    INT 21H                     ;接收用户输入字符串
    NEWLINE
    DISPSTR BUFFER+1,BUFFER+2   ;原样输出
    NEWLINE
    CHANGE BUFFER+2             ;小写转大写
    DISPSTR BUFFER+1,BUFFER+2   ;输出结果

    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

3.3 代码分析

代码一
在定义字符串时,采用9号DOS功能调用都需要每个字符串以’$'结尾,若是采用2号DOS功能调用,每次输出一个字符,则不需要使用-结尾,也可以使用2号DOS功能调用借助循环实现字符串的输出,调用9号DOS功能输出字符串的入口参数:AH<–09H;DS:DX<–字符串起始地址。

代码二
采用1号DOS功能和2号DOS功能调用,实现逆序输出:1号DOS功能调用的入口参数:AH<–01H;出口参数:AL<–所输入字符的ASCII。执行1号DOS功能调用时,系统等待用户从键盘输入一个字符,将该字符的ASCII码存入AL寄存器,并同时把输入的字符送到屏幕进行显示。2号DOS功能调用的入口参数:AH<–02H;DL<–待输出字符的ASCII码。执行2号DOS功能调用时,在屏幕上显示DL中存放的字符。

代码三
在数据段中有BLOCK1和BLOCK2两个字节单元,汇编程序在主程序中调用宏SWAP,传递两个参数BLOCK1和BLOCK2,在宏SWAP中定义数据的交换的具体实现,最终将两个字节单元的内容实现互换。

代码四
定义3个宏,分别为DISPSTR:字符串输出,参数为字符串长度和字符串的起始地址;CHANGE:小写字母转大写字母,参数为字符串的起始地址;NEWLINE:换行宏,无参数。在主程序中首先调用DOS功能实现字符串的输入,然后调用NEWLINE宏,调用CHANGE宏实现小写字母转大写字母,最后调用DISPSTR宏将结果输出到屏幕上。

3.4 运行测试

宏汇编语言实验报告,linux,服务器,汇编语言,宏汇编,BIOS/DOS
宏汇编语言实验报告,linux,服务器,汇编语言,宏汇编,BIOS/DOS

图表 1 代码一测试


宏汇编语言实验报告,linux,服务器,汇编语言,宏汇编,BIOS/DOS

图表 2 代码二测试


宏汇编语言实验报告,linux,服务器,汇编语言,宏汇编,BIOS/DOS
宏汇编语言实验报告,linux,服务器,汇编语言,宏汇编,BIOS/DOS

图表 3 代码三测试


宏汇编语言实验报告,linux,服务器,汇编语言,宏汇编,BIOS/DOS

图表 4 代码四测试文章来源地址https://www.toymoban.com/news/detail-775740.html


4. 实验总结

  1. 成功运行了汇编语言代码测试,熟悉了汇编语言运行环境
  2. 掌握了汇编语言程序设计数据串操作的基本方法和技能
  3. 学习了很多汇编语言中进行数据串操作的指令,包括MOVS串传送指令,LODS串装入指令,STOS串存储指令,CMPS串比较指令,SCAS串扫描指令等, 并通过本次实验对其进行了相关实践,在课下还是需要对相关的内容不断的复习和不断的练习。
  4. 通过本次BIOS/DOS调用及宏指令程序设计的实验,对汇编语言中的利用宏汇编操作有了新的认识,学习到了在8086系统中汇编语言的相关DOS指令功能,了解并掌握了DOS的简单使用和基本操作,会利用汇编代码实现DOS功能的调用。

到了这里,关于汇编语言实验8:BIOS/DOS功能调用与宏指令程序设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 南京邮电大学汇编语言程序设计实验一(汇编语言语法练习与代码转换)

    南京邮电大学汇编语言程序设计实验一(汇编语言语法练习与代码转换)

    排除语法错误:给出的是一个通过比较法完成8位二进制数转换成十进制数送屏幕显示功能的汇编语言源程序,但有很多语法错误。要求实验者按照原样对源程序进行编辑,汇编后,根据TASM给出的信息对源程序进行修改,知道没有语法错误为止。然后进行链接,并执行相应可

    2024年02月08日
    浏览(10)
  • <微机原理>[汇编语言]-[实验八]矩阵键盘应用实验

    <微机原理>[汇编语言]-[实验八]矩阵键盘应用实验

    实验八 矩阵键盘应用实验.doc 掌握矩阵式键盘识别技术 进一步掌握数码管显示原理 Keil5 普中A2开发板 stc-isp 用单片机的并行口P1接矩阵键盘,在数码管上显示每个按键的“0—F”序号。对应的按键的序号排列如图所示: 使用EQU伪指令重新命名R0为KEY_VALUE方便代码后续的理解。

    2024年02月10日
    浏览(8)
  • 汇编语言:矩阵式键盘扫描实验

    汇编语言:矩阵式键盘扫描实验

    利用4x4矩阵键盘和一个LED数码管构成简单的输入显示系统,实现对键盘的扫描和LED数码管的显示键盘按下键的键号。共有4x4个按键和一个数码管,16个按键的键号分别对应十六进制数字:0~F。单机相应按键,数码管就会显示相应的数字。 数码管:这里采用共阳极数码管 CA为共

    2024年02月11日
    浏览(47)
  • 汇编调用C语言定义的全局变量

    汇编调用C语言定义的全局变量

    在threadx移植中,系统的systick通过了宏定义的方式定义,很难对接库函数的时钟频率,不太利于进行维护 所以在C文件中自己定义了一个systick_Div的变量,通过宏定义方式设定systick的时钟频率 在汇编下要加载这个systick分频系数 方法: 总结:对汇编指令需要进一步熟悉。

    2024年02月15日
    浏览(10)
  • <微机原理>[汇编语言]-[实验七]数码管动态显示实验

    <微机原理>[汇编语言]-[实验七]数码管动态显示实验

    实验一 软件开发环境和简单程序设计 实验二 I_O输入输出实验 实验三 键盘扫描显示实验 实验四 中断实验 实验五 定时器实验 实验六 串行口实验 实验七 数码管动态显示实验 实验八 矩阵键盘应用实验 实验九 电子时钟 微机原理实验课程,会陆续根据目录更新文章 掌握LED八段

    2024年02月07日
    浏览(11)
  • 《汇编语言》王爽(第四版)第八章 实验7

    《汇编语言》王爽(第四版)第八章 实验7

    文章目录 前言 一、题目 二、分析 1.内存分配情况 2.数据结构分析 3.实现思路 (1)设置段寄存器 (2)复制“年份”数据 (3)复制“年总收入”数据 (4)复制“雇员人数”数据 (5)计算“人均收入” 三、代码 1.实现代码 2.优化代码 3.最终代码 总结 王爽老师《汇编语言》

    2024年02月04日
    浏览(16)
  • 《汇编语言》王爽(第四版) 第十章 实验10

    文章目录 前言 一、子程序1 显示字符串 1.实验任务 2.分析 (1)如何在指定位置显示 (2)如何显示指定颜色 (3)保存子程序中用到的寄存器 3.代码 二、子程序2 解决除法溢出的问题 1.实验任务 2.代码 三、子程序3 数值显示 1.实验任务 2.显示一个word型数据的代码 总结 本文是

    2024年02月08日
    浏览(9)
  • 【汇编语言与微机原理】实验五:键盘按键与数码管显示

    熟悉星研集成开发环境,掌握微机接口程序编写调试的基本方法。 掌握矩阵式键盘工作原理及识别按键的方法。 掌握8段数码管显示数字或字符的工作原理和它的使用方法。 掌握用8255扫描键盘及用8255刷新数码管的显示方法。 在2*8(看 着像4*4,实际上是2*8 )的小键盘上按下

    2024年02月16日
    浏览(9)
  • 实验一8086计CPU系统寻址方式和汇编语言程序设计

    实验一8086计CPU系统寻址方式和汇编语言程序设计

    实验一8086计CPU系统寻址方式和汇编语言程序设 一、实验目的 (1)掌握8086CPU系统的逻辑地址和寻址方式。 (2)掌握8086CPU系统中机器数的表示方式。 (3)掌握指令的机器码表示方法。 (4)掌握堆栈的概念和操作过程。 (5)掌握集成开发环境下的程序设计和调试方法。 (6)掌握汇编语言实

    2023年04月22日
    浏览(15)
  • 南京邮电大学汇编语言程序设计实验二(用户登录验证程序的设计)

    1.掌握循环程序的编写以及结束循环的方法。 2.掌握DOS、BIOS功能调用的使用方法。 用户登录验证程序的实现 程序执行后,给出提示操作,请用户键入用户名和密码;用户在键入密码时,程序不回显键入字符;只有当用户键入的用户名,密码字符串和程序内定的字符串相同时

    2023年04月18日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包