一、问题描述:
输入十个数字(默认十进制);找到其中的最大值及最小值;以十进制和十六进制的形式在屏幕上输出;可适当添加提示语句!
二、思路讲解:
①获取每一次的输入数据,并将其转换成为具体的数值存储在声明的数据区中。
- 因为我们要多次输入数据,因此我将这个接收数据的代码分离成为了一个函数,便于重复使用;这个函数的核心思想就是——通过ASCII码值判断每一次接收过来的字符是否为数字字符;是的话就通过减48获得其原始的值,再通过乘法使其可以接收多位数并存储在其值;该过程持续到接收的字符非数字时结束。
- 通过上面的函数获得输入值之后,再通过偏移量和循环操作,依次将该数值放入我们事先声明好的数据区中。
②将存储在数据区中数据依次取出,找到其中的最大值及最小值。
- 利用偏移量和循环依次取出之前存储在数据区中的值,遍历一遍之后找到其中的最大值及最小值,并将其分别存储在两个寄存器中。
③将找到的最大值及最小值分别以十进制和十六进制形式输出。
- 十进制形式的输出,通过除法运算较为便利,通过除10依次将待输出的多位数从低位至高位将其剥离,再压入栈中;处理完后再依次出栈将其输出。
- 十六进制形式的输出,因为放置数据的寄存器是16位的,我们可以通过移位操作(四位一移)就可以比除法更加简便的将其输出,稍微麻烦一点的地方就是需要判断是输出数字还是字母。
小心得:
在我们输出相关的提示语句或者换行时,会用到AX和DX寄存器,保留的数据不多时,寄存器够用所以没什么感觉。
在下面的代码中,我将最大值在寄存器ax中;最小值在寄存器bx中;而且我还要调用函数,对于输入参数进行赋值;这个时候寄存器就不太够用了,为了实现提示语句的输出,需要将寄存器中的值倒腾来倒腾去,麻烦不说还容易出错;这个时候你就需要一个好帮手——堆栈,帮你临时保存一下重要的数据了。
我刚