汇编语言(2016级)实验5 子程序与条件转移

2024-03-03 05:58

本文主要是介绍汇编语言(2016级)实验5 子程序与条件转移,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实验5 子程序与条件转移

1. 实验目的

会利用条件转移指令循环和控制结构解决问题
训练程序中要加注释

2. 实验内容

任务1-求最大值
  在BUFFER处给出了多个无符号数,请找出其中的最大值,放至MAX指定的存储单元中。

data  segmentbuffer dw 35098, 17758, 54582, 61504, 46054, 58513, 4409, 7902, 14255dw 40623, 47645, 15575, 51572, 18110, 26511, 14880, 5921, 31999dw 2893, 21056, 16574, 147, 25532, 33336, 5251, 64269, 31514, 23670dw 53335, 49581, 57895, 25689, 51697, 58198, 27548, 54151, 41373dw 44382, 23511, 39326, 56955, 51911max dw  ?
data ends

  已知标号为BUFFER的数组后直接就是标号为MAX的单元,数组中元素的个数由程序计算,不得人工数。
  要求在程序中给出足够多的注释。
  给定的数据中,最大者为64269(FB0DH)。
参考解答

任务2-成绩统计
  下面提供了100名同学AS课成的成绩,请编程序统计其中90~100、60~89、60以下者各有多少人?并把结果连续存放到自RESUT开始的单元中。

 data segmentbuf db 85, 72, 79, 90, 79, 54, 63, 66, 83, 79, 71, 77, 77, 65, 89, 93db 69, 96, 72, 98, 60, 78, 69, 68, 80, 65, 91, 64, 90, 90, 64, 90db 99, 55, 84, 56, 80, 54, 55, 66, 53, 54, 83, 61, 52, 92, 66, 51db 95, 81, 51, 100, 70, 65, 50, 74, 91, 57, 95, 66, 54, 50, 73, 59db 78, 80, 92, 78, 89, 78, 99, 100, 82, 92, 59, 71, 74, 81, 93, 74db 98, 57, 57, 96, 76, 79, 57, 67, 52, 84, 87, 54, 67, 72, 59, 75db 64, 89, 77, 80resut db 3 dup(0) 
data ends

  要求在程序中给出足够多的注释。
参考解答

任务3-保留字符串中的大写字母
  在数据区,给定用0作为结束的字符串,请补充完成子程序,只保留字符串中的大写字母,并在最后一个大写字母后记录0作为所有大写字母构成的新字符串的结束。(以下面程序数据区中给出的字符串,最后得到的字符串为YTU后加0)

assume cs:cseg, ds:dseg, ss:sseg
sseg   segment  stackdw  100h  dup  (?)
sseg   ends
dseg   segmentdb 'YanTai University 264005', 0
dseg   ends
cseg   segment
start: mov  ax, dsegmov  ds, axmov  ax, ssegmov  ss, axmov  sp, 100hmov bx, 0call getUppermov  ax, 4c00hint   21h;子程序名:getUpper
;功    能:对从DS:bx开始,以0结束的字符串,只保留大写字母,并仍以0结束
;入口参数:DS和BX寄存器中保存字符串的起始地址
;出口参数:无
getUpper  proc; 在这里写出你的代码ret
getUpper  endp
cseg  endsend   start

参考解答

任务4:冒泡排序(选做)
  在数据区,给出了学生人数及汇编语言课程的成绩,请将成绩排序并保存在原数据区。
  下面给出部分代码,要求完成排序子程序。
  程序中给出的数据段,包括20位同学的成绩,每名同学的数据占1字节。
参考程序段:

assume cs:cseg, ds:dseg, ss:sseg
sseg segment  stackdw 100H dup (?)
sseg ends
dseg segmentdb 20db 98,61,57,82,89,73,61,58,53,54db 84,78,70,64,84,63,76,84,83,86
dseg ends
cseg segmentstart: mov ax, dsegmov ds, axmov cl, ds:[0]mov ch, 0      ;cx中存储要排序数的个数mov bx, 1      ;要排序数的起始偏移地址call sortmov ax, 4c00hint   21h
;子程序名:sort
;功    能:对从(DS):(bx)开始的(cx)个字节排序
;入口参数:(DS):(BX)保存数据的起始地址
;        (cx)中是要排序的数据个数
;出口参数:无
sort proc;这儿写子程序
sort endpcseg ends
end start

参考解答

这篇关于汇编语言(2016级)实验5 子程序与条件转移的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/768665

相关文章

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

封装MySQL操作时Where条件语句的组织

在对数据库进行封装的过程中,条件语句应该是相对难以处理的,毕竟条件语句太过于多样性。 条件语句大致分为以下几种: 1、单一条件,比如:where id = 1; 2、多个条件,相互间关系统一。比如:where id > 10 and age > 20 and score < 60; 3、多个条件,相互间关系不统一。比如:where (id > 10 OR age > 20) AND sco

使用条件变量实现线程同步:C++实战指南

使用条件变量实现线程同步:C++实战指南 在多线程编程中,线程同步是确保程序正确性和稳定性的关键。条件变量(condition variable)是一种强大的同步原语,用于在线程之间进行协调,避免数据竞争和死锁。本文将详细介绍如何在C++中使用条件变量实现线程同步,并提供完整的代码示例和详细的解释。 什么是条件变量? 条件变量是一种同步机制,允许线程在某个条件满足之前进入等待状态,并在条件满

一些数学经验总结——关于将原一元二次函数增加一些限制条件后最优结果的对比(主要针对公平关切相关的建模)

1.没有分段的情况 原函数为一元二次凹函数(开口向下),如下: 因为要使得其存在正解,必须满足,那么。 上述函数的最优结果为:,。 对应的mathematica代码如下: Clear["Global`*"]f0[x_, a_, b_, c_, d_] := (a*x - b)*(d - c*x);(*(b c+a d)/(2 a c)*)Maximize[{f0[x, a, b,

notepad++ 正则表达式多条件查找替换

基础语法参考: https://www.cnblogs.com/winstonet/p/10635043.html https://www.linuxidc.com/Linux/2019-05/158701.htm   通常情况下我们查找的内容和要被替换掉的内容是一样的,我们只需要使用正则表达式精确框定查找内容,替换直接输入要替换的内容即可。 但有时会比较复杂,查找的内容,只需要替换其中

FPGA开发:条件语句 × 循环语句

条件语句 if_else语句 if_else语句,用来判断是否满足所给定的条件,根据判断的结果(真或假)决定执行给出的两种操作之一。 if(表达式)语句; 例如: if(a>b) out1=int1; if(表达式)         语句1; else         语句2; 例如: if(a>b)out1=int1;elseout1=int2; if(表达式1) 语句1; els

Kernel 中MakeFile 使用if条件编译

有时需要通过if  else来选择编译哪个驱动,单纯的obj-$(CONFIG_)就不是很方便,下面提供两种参考案例: 案例一: 来源:drivers/char/tpm/Makefileifdef CONFIG_ACPItpm-y += tpm_eventlog.o tpm_acpi.oelseifdef CONFIG_TCG_IBMVTPMtpm-y += tpm_eventlog.o

shell循环sleep while例子 条件判断

i=1# 小于5等于时候才执行while [ ${i} -le 5 ]doecho ${i}i=`expr ${i} + 1`# 休眠3秒sleep 3doneecho done 参考 http://c.biancheng.net/cpp/view/2736.html