实验二  高级汇编程序设计

  • 实验目的

1、 掌握中断服务子程序的编写。

2、 汇编语言与高级语言的混编。

  • 实验内容

1、挂接1CH中断,正计时90秒后退出。要求屏幕显示0-89的秒数。

2、VC++中编写内联汇编,将字节数组的每个元素高低四位互换。

char dbyte[] = {0x34,0x45,0x56,0x67,0xaf};

  • 实验过程和程序

1、

详细过程:本题要求挂接1CH中断,正计时90秒后退出,要求屏幕显示0-89的秒数。因此定义一个计数器,把counter赋初值0,每隔一秒加1,并与89作比较,小于89则继续执行,否则退出。在具体编写中断服务子程序时按照具体的格式进行编写:保护现场、开中断、处理中断、关中断、发中断结束命令、恢复现场和中断返回这七个部分。中断服务子程序写好之后,挂接中断服务子程序需要修改中断向量以及保护恢复。

源程序:

stack    segment stack
stack   ends
data    segment
oldisr  dw ?,?
timer   db 100
counter dw 0
isdone  db 0
data    endscode    segment
assume  cs:code,ds:data
start:  mov ax,data;把data赋给给ax                          mov ds,ax;把数据转到数据段寄存器mov ax,0mov es,ax;protectcli;CLImov ax,es:[1ch*4]mov oldisr[0],axmov ax,es:[1ch*4+2]mov oldisr[2],axsti;set new isrclimov word ptr es:[1ch*4],offset isrmov word ptr es:[1ch*4+2],seg isrsti;wait herewaithere:cmp isdone,1jnz waithere;restore
exit:climov ax,oldisr[0]mov es:[1ch*4],axmov ax,oldisr[2]mov es:[1ch*4+2],ax;恢复原中断处理stimov ax,4c00h;该中断就是安全退出程序int 21hisr proc farpush dxpush axmov ax,datamov ds,axsti;便于中断嵌套             ;COUNT HEREinc timer
again:cmp timer,1000/55;18jb donemov timer,0;carriagemov ah,2mov dl,13int 21h;print timemov ax,countermov dl,10div dlmov dh,ahmov dl,almov ah,2add dl,30hint 21hmov dl,dhadd dl,30hint 21hinc countercmp counter,90 jnz donemov isdone,1;设置完成标志   done:pushfcall dword ptr oldisr;调用原中断处理clipop axpop dxiret;中断返回
isr     endpcode    endsend start

2、

详细过程:按照题目要求定义一个数组dbyte[] ={0x34,0x45,0x56,0x67,0xaf},然后用内联汇编子程序实现将字节数组的每个元素高低四位互换,具体操作就是把数组中的每一位分别存到al和bl中,对al右移4次,使高位到低位,高位用0补齐;对bl左移4次,使低位到高位,低位用0补齐,然后将al和bl相加,对数组中的每一位重复这个过程,直到结束。具体写代码时要注意的是,为了让编译程序识别内联汇编子程序,它的名称一定要以下划线_开头。

源程序:

#include<iostream>
using namespace std;
int main()
{ unsigned char dbyte[]={0x34,0x45,0x56,0x67,0xaf};cout << "交换之前数组内元素依次为:" << endl;for (int i = 0; i < 5; i++)cout << "0x" << hex << (int)dbyte[i] << ' ';cout << endl;cout << "交换之后数组内元素依次为:" << endl;for(int i=0;i<5;i++){unsigned char x=dbyte[i];unsigned char a;_asm{   mov cl, 4mov al, xmov bl, xshr al, cl//高位置低位shl bl, cl//低位置高位add al, blmov a, al}cout<<"0x"<<hex<<(int)a<<' ';}cout<<endl;return 0;
}
  • 实验结果(包括必要的截图)

1:

 

2:

  • 实验体会
  1. 通过这个实验内容我初步认识了中断向量表,了解了中断的流程:保存原中断向量->设置新中断向量->执行新中断处理->调用原中断处理->恢复原中断向量。知道了在中断服务子程序中,开始中断用sti表示,关闭中断用cli表示,但是在中断返回的伪代码上中断服务子程序与子程序不同,中断返回用的是iret而不是ret,而且中断是为系统所调用执行。
  2. 我了解到了如何实现嵌入式汇编——在C/C++语言中直接使用汇编语言语句,程序的大部分采用高级语言编写,以提高程序的开发效率;而在某些部分,可以利用汇编语言编写,以提高程序的运行效率。

其他实验:

合肥工业大学2021汇编语言程序设计上机实验一https://blog.csdn.net/qq_52791068/article/details/122703493

合肥工业大学2021汇编语言程序设计上机实验二相关推荐

  1. 合肥工业大学2021汇编语言程序设计上机实验一

    实验一  基本汇编程序设计 实验目的 1.熟悉在PC机上建立.汇编.连接.调试和运行8086/8088汇编语言程序的过程: 2.掌握基本汇编语言程序设计方法. 3.熟悉DOSBOX下运行dos程序方法 ...

  2. 合肥工业大学2022大数据技术实验二

    实验序号及名称:实验二 在Hadoop平台上部署WordCount程序实验时间∶ 2022年5月14日 预习内容 一.实验目的和要求∶ 在Hadoop平台上部署WordCount程序. 二.实验任务∶ ...

  3. 合肥工业大学2021离散数学上机实验一

    实验一:逻辑运算表示与验证 实验目的和要求 实验目的:理解命题逻辑相关运算,增强逻辑推理能力 实验要求: (1).从键盘输入命题常元的真值求他们的合取.析取.求反.异或.单条件. 双条件以及命题表达式 ...

  4. 合工大计算机学硕分数线,合肥工业大学2021考研复试分数线已公布

    2021考研国家线已公布,接下来迎来的是考研复试分数线,复试分数线决定游走在边缘的考生是否能够顺利进入复试环节,中公考研为大家整理"合肥工业大学2021考研复试分数线已公布",一起 ...

  5. 合肥工业大学计算机保研,合肥工业大学2021届保研分析,全校保研率12. 6%,而“它”48.8%...

    合肥工业大学位于安徽,是教育部直属的全国重点大学,有合肥和宣城两个校区,学校是"211工程"."双一流"一流学科建设高校,管理科学与工程.电气.机械等学科为学校 ...

  6. 合肥工业大学2022大数据技术实验一

    实验序号及名称:实验 一    安装Hadoop 实验时间∶ 2022年5月8日 预习内容 一.实验目的和要求∶ 在虚拟机上安装并熟悉Hadoop 二.实验任务∶ 请各位同学完成如下3个实验中的1个, ...

  7. 合工大计算机专业拟录取名单,合肥工业大学2021硕士研究生拟录取名单链接汇总...

    2021合肥工业大学研究生拟录取名单汇总(各学院) 机械工程学院2021年硕士研究生拟录取名单公示 http://jxxy.hfut.edu.cn/2021/0330/c9177a252788/pag ...

  8. java合肥工业大学考试题库_合肥工业大学java程序设计实验二

    合肥工业大学java程序设计实验二 1 / 3<Java 程序设计>实验报告--实验 2实验室:三.四机房 2014 年 05 月 22日学院 计算机与信息学院 专业班级 姓名 成绩课程名 ...

  9. 合肥工业大学c语言是试卷,合肥工业大学2005-2007年C语言程序设计试卷参考答案.doc-资源下载人人文库网...

    合肥工业大学2005-2007年<C语言程序设计>试卷参考答案.doc 合肥工业大学2005年C语言程序设计试卷参考答案一. 填空题(分,每空1分)1main( ) 或主函数 21 7 3 ...

最新文章

  1. Android中的坐标系以及获取坐标的方法
  2. python abs()函数是什么意思?
  3. python2定点找色_Python实现按键精灵(二)-找图找色
  4. erlang精要(5)-列表推导式
  5. android游戏开发框架libgdx的使用(完)—杂谈Libgdx
  6. oem模式是什么_OEM的完整形式是什么?
  7. 微软 Windows 再度“围剿” Google Chrome
  8. poj 2728 Desert King 01分数规划
  9. bcdboot修复win10引导并通过ubuntu live USB安装grub
  10. python如何截长图_python如何实现对元素的长截图功能 python实现对元素的长截图功能实例...
  11. MongoDB实验练习题
  12. python实现自动点击桌面按钮_Python实现鼠标隔几秒自动点击电脑某区域
  13. 人工神经网络及其应用,人工神经网络的实现
  14. 自动控制原理matlab pdf下载,第五章-matlab在自动控制原理中的应用.pdf
  15. 用java输出学生信息表代码_使用java导出学生成绩表-excel成绩表
  16. 有 5 个人坐在一起,问第五个人多少岁?
  17. 销售管理——怎样判断商机
  18. 猫儿PDF-Word格式转换经验谈
  19. Oracle优化面试题
  20. java笔试题50道 收藏版

热门文章

  1. 西南林业大学“西林链”通过工信部电子标准院功能测试 | FISCO BCOS案例
  2. Character类型
  3. swiper 点击分页器之后不能继续轮播
  4. vb.net写的串口通讯类模块 源码
  5. 杂记--帮我哥戒网瘾的恶意程序
  6. 皮一皮:戒网瘾专用手机...
  7. STM32CubeMX和Keli5系列基础教程——GPIO输入输出的实现
  8. 88se9125 88se9230的驱动初始化有什么差异吗
  9. 43-Java编程案例三:验证码
  10. 目标检测 YOLO 系列模型