汇编语言程序设计实验:查找最小奇数、删除数组0元素、十六进制转ASCII

需积分: 9 2 下载量 160 浏览量 更新于2024-09-12 2 收藏 34KB DOC 举报
"汇编语言程序设计实验,包含三个实验:寻找数组中最小奇数、删除数组中0元素并压缩、十六进制数转ASCII码" 在汇编语言程序设计中,实验通常用来帮助理解基本操作和流程。以下是对给定文件中三个实验的详细解释: 1. **寻找数组中最小奇数**: - 这个实验的目标是找到以`ARRAY`为首地址的10字数组中的最小奇数,并将其存储在`DX`寄存器中。 - 代码首先初始化`DS`段寄存器,使其指向数据段(`DATAS`)。 - 使用`LEA SI, ARRAY`来设置`SI`寄存器指向数组的首地址。 - `CX`寄存器设置为10,作为循环计数器,表示数组的长度。 - `DX`初始化为`0xFFFFH`,用于暂存最小奇数。 - `NEXT`循环中,`MOV AX, [SI]`加载数组元素到`AX`,然后使用`TEST AX, 0001H`检查是否为奇数。如果为偶数,则跳过比较 (`JZ AGAIN`)。 - 如果是奇数,就与当前最小值进行比较(`CMP DX, AX`),如果小于或等于最小值,则更新最小值(`JBE AGAIN`)。 - 循环结束后,`AX`寄存器包含最小奇数,程序通过`INT 21H`调用退出。 2. **删除数组中所有0元素并压缩**: - 此实验旨在删除`ARRAY`数组中的所有0元素,并将后续元素向前移动,最后用0填充剩余空间。 - 首先,`AL`寄存器初始化为0,`DI`指向数组首地址,`CX`设置为100,表示数组长度。 - 使用`REPNE SCASB`指令在数组中查找非0元素,如果找到则跳转至`STOP`。 - `CX`不为0时,保存`DI`和`CX`,开始删除过程。 - `DEL`循环中,将当前元素移到前一个位置,然后递增`DI`,直到遍历完整个数组。 - 最后用0填充`DI-1`处的空位,恢复`CX`和`DI`,然后减`DI`并跳转回`NEXT`继续查找。 - 当数组无元素(`CX`为0)或所有元素都是0时,程序退出。 3. **十六进制数转ASCII码**: - 实验目标是将`AX`寄存器中的十六进制数转换为ASCII码,并存入`MEM`数组的四个字节中。 - 这通常涉及到对`AX`的每一位进行处理,分别提取高四位和低四位,然后转换成对应的ASCII码。 - `AX`寄存器的高四位和低四位可以通过位移和与操作提取出来,然后转换成十进制数,再转换成ASCII码。 - ASCII码的数字字符'0'到'9'的值在48到57之间,因此转换后的数值需要加上48以得到正确的ASCII值。 - 每个转换后的ASCII码存放在`MEM`数组的相应位置。 通过这些实验,学习者可以深入理解汇编语言中的基本操作,如寻址、条件转移、循环、位操作以及数据转换等。同时,这些实验也强调了在实际编程中如何组织和优化代码,以实现特定功能。