汇编语言实验8:BIOS/DOS功能调用与宏指令程序设计
创始人
2024-01-25 02:44:52

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

  • 实验八 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 ENDSSTACKS SEGMENT;此处输入堆栈段代码
STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
START:MOV AX,DATASMOV DS,AX;此处输入代码段代码MOV AH,09HMOV DX,OFFSET TIPINT 21H     ;输出字符串TIPMOV AH,01HINT 21H     ;接收键盘输入CMP AL,'Y'JE YESCMP AL,'y'JE YESMOV AH,09HMOV DX,OFFSET NINT 21H     ;输出字符串NJMP NEXT
YES:MOV AH,09HMOV DX,OFFSET YINT 21H
NEXT:MOV AH,4CH  ;输出字符串YINT 21H
CODES ENDS
END START

代码二

;2. 利用DOS相关功能,在屏幕上输入10个字符存入S1开始的存储单元,将内容逆序输出到屏幕上。DATAS SEGMENT;此处输入数据段代码  S1 DB 10 DUP(?)
DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码
STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
START:MOV AX,DATASMOV DS,AX;此处输入代码段代码XOR SI,SIMOV CX,10
INPUT:MOV AH,1INT 21H     ;输入一个字符MOV S1[SI],ALINC SILOOP INPUTMOV AH,02HMOV DL,0DHINT 21HMOV DL,0AHINT 21H     ;回车换行MOV CX,10MOV DI,9    ;DI初值为末单元的偏移量
DISP:MOV DL,S1[DI]MOV AH,2INT 21H     ;输出一个字符DEC DI      ;逆序指向下一个单元LOOP DISPMOV AH,4CHINT 21H
CODES ENDS
END START

代码三

;3. 利用宏功能,实现两个字节单元的内容互换。SWAP MACRO X,Y    ;宏定义PUSH AXMOV AL,XXCHG AL,YMOV X,ALPOP AXENDMDATAS SEGMENT;此处输入数据段代码  BLOCK1 DB 45HBLOCK2 DB 17H
DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码
STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
START:MOV AX,DATASMOV DS,AX;此处输入代码段代码SWAP BLOCK1,BLOCK2  ;宏调用MOV AH,4CHINT 21H
CODES ENDS
END START

代码四

;4. 从键盘输入一个字符串(只含英文字母),先将它原样显示一遍,然后将其中的小写字母转为大写字母后再显示一遍。要求使用宏汇编功能实现,观察汇编时宏调用被展开的情况。;字符串输出,COUNT为字符串长度,STRING为字符串的起始地址
DISPSTR MACRO COUNT,STRINGLOCAL NEXTPUSH BXPUSH CXMOV CL,COUNT    ;CL<--字符串长度MOV CH,0LEA BX,STRING   ;字符串存储的起始地址
NEXT:MOV AH,02HMOV DL,[BX]INT 21H         ;输出一个字符INC BXLOOP NEXTPOP CXPOP BXENDM;小写字母转大写字母
CHANGE MACRO BUFFERLEA BX,BUFFER
AGAIN:MOV AL,[BX]CMP AL,'$'JE DONECMP AL,'a'JAE NEXT1JMP DONE1
NEXT1:CMP AL,'z'JA DONE1SUB AL,20HMOV BYTE PTR [BX],AL
DONE1:INC BXJMP AGAIN
DONE:ENDM;回车换行
NEWLINE MACROMOV AH,02HMOV DL,0DHINT 21HMOV DL,0AHINT 21HENDM;主程序
DATAS SEGMENT;此处输入数据段代码 BUFFER DB 200,?,200 DUP(?) 
DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码
STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
START:MOV AX,DATASMOV DS,AX;此处输入代码段代码MOV AH,0AHMOV DX,OFFSET BUFFERINT 21H                     ;接收用户输入字符串NEWLINEDISPSTR BUFFER+1,BUFFER+2   ;原样输出NEWLINECHANGE BUFFER+2             ;小写转大写DISPSTR BUFFER+1,BUFFER+2   ;输出结果MOV AH,4CHINT 21H
CODES ENDSEND 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功能的调用。

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
公司优势怎么写比较好 如何描述... 我对企业竞争优势的理解和总结
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
乌拉是什么意思 乌托邦是什么意... 相信对俄罗斯有一定了解的朋友肯定不会对“乌拉”(Ура,读成“歪--屁--哎”的朋友请出门左转不送)...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...