首页 > 编程语言 >汇编实验:按15行×16列的表格形式显示ASCII码为10H—100H的所有字符

汇编实验:按15行×16列的表格形式显示ASCII码为10H—100H的所有字符

时间:2022-09-28 10:23:20浏览次数:63  
标签:可执行文件 15 程序运行 100H 16 实验 ASCII 运行

上海大学  计算机学院

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

         

 

实验名称:       第三周实验        

 

一、实验任务

1. 完成资料里的实验任务一。

2.另外用任意一种高级语言实现相同的任务。

3.比较两种实现方式的可执行代码的长度。选做:比较两种可执行代码的运行时间。

二、实验内容

实验任务1. 按15行×16列的表格形式显示ASCII码为10H—100H的所有字符。

实验步骤

1.设想代码结构:要实现15*16的表格输出,常用方法是使用两层循环分别打印每一行的所有列和各个行,这样就需要2个计数器,因此我们需要在内外循环分别push计数器以保存状态。此外要实现程序的计时功能,应当调用DOS功能的置/读时钟,但是想输出必须将数字转为ASCII字符。

2.在VScode中新建.asm文件,输入以下代码段

 

上述代码分为3层:(1)world层之外:该层在代码核心段之外,作用是首先使用INT 1aH将时钟置0,然后保存dx(里面存程序运行时间);在整段代码执行完毕后将使用INT 1aH读取时钟,并输出到终端显示。在计时并显示时,遇到了问题:dx中存储的是程序运行时间(数字),是无法直接输出到终端的,必须转成ASCII码才行。常用的方法是对16进制的数字使用辗转相除法取余,将每次获得的余数压栈,最后依次输出即是结果。但针对本次实验代码分析,我们发现C++执行同样功能程序一次的时间大约在10~20ms,这意味着汇编程序运行的时间也不会超过100ms.而由INT 1aH中读写时钟的单位:可知,显示的数字是以10ms为基本单位的,因此最后输出的结果不可能是超过1位的(因为即使0AH也代表运行时间有100ms了),所以我们无需考虑辗转相除了,最终答案以16进制和10进制表示是一样的数字。我们只需要+30H即可直接获得对应数字的ASCII码。

需要注意的是我在这里将最外层的CX赋值为60H,这是因为最初只在代码执行的最开始与结束使用一次读取时钟,最后的结果是0,这说明程序运行一次的耗时太短,想要获取准确运行时间我们可以让程序多运行几次,获取运行时间。因此我们选择让程序运行60H(96)次,记录运行时间,再除以96即可获得单次运行的时间。

(2)outer层:设置外层计数器,并且在内层循环结束时输出回车、换行。

(3)innner层:保存外层计数器,设置内层计数器,并且循环输出。

3.右键打开DOS终端,在终端使用命令masm test.asm进行编译,再使用link test.obj对生成的test.obj文件进行链接,生成.exe可执行文件;使用dos环境下的dir指令,可以看到可执行文件大小为584B:

 

再执行程序:

 

从结果我们可以看出程序运行96次耗时40ms,每次运行耗时0.417ms.

实验任务2. 用任意一种高级语言实现相同的任务。

选用C++,编写下列程序实现同样的打印ASCII码表:

 

在这里使用clock函数记录程序运行时间,返回单位为ms。

首先找到程序所在的文件夹目录,查询到可执行文件的大小为14KB:

 

再点击运行:

 

从结果我们可以看出程序运行每次运行耗时8ms.

 

实验任务3. 比较两种实现方式的可执行代码的长度。比较两种可执行代码的运行时间。

上面我们已经获得了两种语言变成下生成可执行文件的大小以及执行时间,下面我们比较其大小和运行时间差异:

 

汇编程序

C++程序

可执行文件大小

584B

14KB

运行时间

0.417ms

8ms

由表格可知汇编程序生成的可执行文件更小,运行时间更短。

 

标签:可执行文件,15,程序运行,100H,16,实验,ASCII,运行
From: https://www.cnblogs.com/czy-blogs/p/16737077.html

相关文章

  • P1600 [NOIP2016 提高组] 天天爱跑步
    P1600NOIP2016提高组天天爱跑步LCA+桶点击查看代码///*考虑上行的情况(u,v)中u被i看到<=>1.u∈{i的子树} 2.lca(u,v)不属于{i的子树} 3.de......
  • (转载)【RocketMQ 课程笔记】15.消费者概述
    消费者概述几个关键概念消费者组:一个逻辑概念,在使用消费者时需要指定一个组名。一个消费者组可以订阅多个Topic。消费者实例:一个消费者组程序部署了多个进程,每个进程......
  • 如何正确安装VMware16以及配置Centos7
    如何正确安装VMware16以及配置Centos7https://blog.csdn.net/m0_53533877/article/details/123442079?ops_request_misc=&request_id=&biz_id=102&utm_term=vmware16%E6%9......
  • leetcode 1640.能否连接形成数组
    1640.能否连接形成数组难度简单132  给你一个整数数组arr,数组中的每个整数互不相同。另有一个由整数数组构成的数组pieces,其中的整数也互不相同。请你以任......
  • CF1603D Artistic Partition 题解
    题意一个长度为\(n\)的序列,分为\(k\)段,每段代价是\(c(l,r)=\sum\limits_{i=l}^r\sum\limits_{j=i}^r[\gcd(i,j)\geql]\),求总代价的最小值。分析若\(2^k>n\),总......
  • 代码随想录训练营|Day 7|454, 383, 15, 18, 总结
    454.4SumIIGivenfourintegerarrays nums1, nums2, nums3,and nums4 alloflength n,returnthenumberoftuples (i,j,k,l) suchthat:0<=i,j,......
  • 在2016年如何学习JavaScript?
    在2016年如何学习JavaScript?作者:​​VincentO​​译者:相信有不少人已经读过​​在2016年学JavaScript是一种什么样的体验?​​这篇神文,那么假如你真的要在2016年开始学......
  • Qt实战15.构建网络拓扑图
    1需求描述基于Qt图形视图框架开发一个网络拓扑模块,用于可视化展示、控制HUB(类似于交换机)与NODE(类似于连接到交换机上的设备)的关系网路。2设计思路先来看个图:这里将......
  • GB/T28181-2016基于RTP的视音频数据封装和技术实现
    首先我们先回顾下相关技术规范,看看基于RTP的音视频数据PS封装。C.1基于RTP的视音频数据PS封装基于RTP的PS封装首先按照ISO/IEC13818-1:2000将视音频流封装成PS包,再将PS包......
  • GB/T28181-2016 SDP定义和音视频传输模式解读
     SDP定义联网系统中SIP消息体中携带的SDP内容应符合IETFRFC2327的相关要求。应有如下字段:Sessiondescription:v=(protocolversion)o=(owner/creatorandsessioni......