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

news2025/2/27 23:20:24

《汇编语言程序设计》实验报告

  • 实验八 BIOS/DOS功能调用与宏指令程序设计
    • 1. 实验目的
    • 2. 实验任务
    • 3.1 BIOS/DOS及宏汇编程序题目设计
    • 3.2 编写代码
    • 3.3 代码分析
    • 3.4 运行测试
    • 4. 实验总结

实验八 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 运行测试

在这里插入图片描述
在这里插入图片描述

图表 1 代码一测试


在这里插入图片描述

图表 2 代码二测试


在这里插入图片描述
在这里插入图片描述

图表 3 代码三测试


在这里插入图片描述

图表 4 代码四测试


4. 实验总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/9587.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于工业级4G5G路由器大型设备远程无线监控方案

一、行业背景进入21世纪&#xff0c;我国经济持续高速发展&#xff0c;全球各地的企业对大型设备的需求日益旺盛&#xff0c;例如工业锅炉、数控车床、医疗器械等&#xff0c;在产品服务业全球的时候&#xff0c;产品厂家需要对所有在外的设备进行远程监控管理&#xff0c;实时…

Linux 内存管理知识总结(二)

Linux 内存管理框架 传统的多核运算是使用 SMP(Symmetric Multi-Processor )模式&#xff1a;将多个处理器与一个集中的存储器和 I/O 总线相连&#xff0c;所有处理器访问同一个物理存储器&#xff0c;因此 SMP 系统有时也被称为一致存储器访问&#xff08;UMA&#xff09;结构…

Leetcode刷题day1|数组一|704.二分查找,27.移除元素,35.搜索插入位置

文章目录一、面试中数组相关理论知识二、二分查找问题思路注意事项AC代码三、移除元素思路注意事项AC代码四、寻找插入位置思路AC代码五、总结二分法|二分查找法|二分搜索法|二分易错点相关概念代码实现一、面试中数组相关理论知识 数组是非常基础的数据结构&#xff0c;在面试…

【树状数组】前缀和问题

一、引子 给你一个数组 nums &#xff0c;请你完成两类查询。 其中一类查询要求更新数组 nums 下标对应的值另一类查询要求返回数组 nums 中索引 left 和索引 right 之间&#xff08; 包含 &#xff09;的nums元素的和 题目只是一个用来检测我们思想的东西&#xff0c;比如这…

Android BottomSheet总结

文章目录Android BottomSheet总结BottomSheetBottomSheetDialogBottomSheetDialogFragment全屏无阴影BottomSheetDialogFragment代码下载Android BottomSheet总结 BottomSheet XML布局&#xff1a; <?xml version"1.0" encoding"utf-8"?> <an…

C++ 条件变量的使用

绪论 并发编程纷繁复杂&#xff0c;其中用于线程同步的主要工具——条件变量&#xff0c;虽然精悍&#xff0c;但是要想正确灵活的运用却并不容易。 对于条件变量的理解有三个难点&#xff1a; 为什么wait函数需要将解锁和阻塞、唤醒和上锁这两对操作编程原子的&#xff1f;为…

MCMC学习笔记-马尔科夫链概述

参考文章&#xff1a;MCMC(二)马尔科夫链 - 刘建平Pinard - 博客园 写给小白看的马尔科夫链&#xff08;Markov Chain&#xff09;最佳入门教程_许进进的博客-CSDN博客_markov链 目录 1.马尔科夫链概述 1.1股票市场模型 2.马尔科夫链模型状态转移矩阵的性质 (本节重点) 2.…

小程序容器技术加持下,企业自主打造小程序生态

小程序是一种不用下载就能使用的应用&#xff0c;也是一项门槛非常高的创新&#xff0c;经过将近两年的发展&#xff0c;已经构造了新的小程序开发环境和开发者生态。 据对公开资料进行统计&#xff0c;2021年全网小程序数量已超700万&#xff0c;其中微信小程序开发者突破300…

java使用world模板动态生成PDF文件

根据项目需求&#xff0c;需要用到一个功能&#xff0c;根据页面参数需要动态的生成一个world&#xff0c;并将world生成两份PDF文件&#xff0c;一份正式文件&#xff0c;一份临时的电子文件&#xff08;带有二维码&#xff0c;扫描可以下载正式文件的电子版本&#xff09;。同…

JAVA开发(nginx)

主要描述下面4个内容&#xff1a; 1.Nginx的正向代理和反向代理 2.Nginx的动静分离 3.Nginx的负载均衡 4.Nginx的配置详解 解释&#xff1a; Nginx的正向代理&#xff1a;代理的是客户端。 Nginx的反向代理&#xff1a;代理的是服务端。在web服务中&#xff0c;一般都是…

2022年“网络安全”赛项驻马店市赛选拔赛 任务书

2022年“网络安全”赛项驻马店市赛选拔赛 一、竞赛时间 共计3小时。 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段单兵模式系统渗透测试 任务一 Windows操作系统渗透测试 100分钟 100 任务二 Linux操作系统渗透测试 150 任务三 数字取证调查 150 任务四 …

vscode不能打开终端问题

遇到vscode不能打开终端问题&#xff0c;一直以为是安全软件限制问题&#xff0c;也没搜到解决方案&#xff0c;因为影响也不大&#xff0c;就没有管。 最近&#xff0c;要用vscode调试代码&#xff0c;发现不能打开终端&#xff0c;没法玩了&#xff0c;又来看这个问题&#…

【图像隐藏】基于matlab像素预测和位平面压缩的加密图像可逆数据隐藏【含Matlab源码 2218期】

⛄一、加密图像可逆数据隐藏简介 1 信息隐藏技术概述 信息隐藏技术是把秘密信息隐藏在多媒体信息中的一种方法。图像是最适合信息隐藏的数据载体。信息隐藏的方法主要有数字水印技术、隐写术等。 信息隐藏可以分为有损信息隐藏与可逆信息隐藏信息隐藏技术, 区别在于接收端是否…

【虚幻引擎UE】UE5 简单实现范围计算圆圈绘制

先来看看可以实现的效果&#xff1a; 一、实现快速绘制圆圈的C函数 .cpp文件 #include "drawPolygon.h" #include "Components/LineBatchComponent.h" #include "Engine/World.h" #include "EngineGlobals.h" #include "Prim…

墨西哥专线详解:墨西哥专线时效多久,墨西哥专线价格多少?

墨西哥专线是国内直飞墨西哥或者海运墨西哥的专线物流服务&#xff0c;从中国到墨西哥的物流大约需要3到30天。不同的运输方式到墨西哥的时间不同。国际快递是最快的。通常3到5天就可以完成目的地派送&#xff0c;最慢的是海运专线&#xff0c;到墨西哥大约需要20到30天才能到达…

隐式神经表示二:超分网络学习傅里叶系数Local Texture Estimator for Implicit Representation Function

文章目录1. Local Texture Estimator for Implicit Representation Function1. 通过隐式神经网络表示方法 实现 超分辨率。2. 在编码器和解码器之间作者引入一个 local texture estimator3. 代码分析整体框架生成图像特征&#xff0c;编码器是一个常规的卷积网络&#xff0c;文…

【Pytorch with fastai】第 8 章 :协同过滤深入探讨

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

十四、Java String 类

Java String 类 字符串广泛应用 在 Java 编程中&#xff0c;在 Java 中字符串属于对象&#xff0c;Java 提供了 String 类来创建和操作字符串。 创建字符串 创建字符串最简单的方式如下: String str "xxx"; 在代码中遇到字符串常量时&#xff0c;这里的值是 &q…

大数据开源平台好在哪里?

当前是大数据发展时代&#xff0c;对于企业而言需要紧紧抓住契机乘势而上&#xff0c;利用好内部数据做好数字化转型&#xff0c;可以为企业带来更高的发展空间。大数据开源平台是助力企业提升办公效率的软件平台&#xff0c;那么&#xff0c;哪里有这样的大数据开源平台&#…