一个由7个元素组成的整数数组,已经存放在主存的连续存储单元中,数组的起始地址为AS。例如:AS{31h,36h,33h,32h,38h,37h,35h}1. 编程实现:将数组AS中的元素向右循环移动一个位置,例如移位后变成{35h,31h,36h,33h,32h,38h,37h}2. 编程实现:将AS中最大元素和最小元素分别存于Max和Min中3. 将字符串AS中的内容复制到target中,并显示输出
时间: 2023-07-14 22:13:19 浏览: 80
C++二维数组中数组元素存储地址的计算疑问讲解
以下是三道题的解答:
1. 将数组AS中的元素向右循环移动一个位置
```assembly
MOV CX, 7 ; 设置计数器,表示需要移动的元素个数为7
MOV AL, [AS+6] ; AL存放最后一个元素的值
MOV BX, 6
BACK: MOV DL, [AS+BX-1] ; DL存放倒数第二个元素的值
MOV [AS+BX], DL ; 将倒数第二个元素的值存放到当前元素的位置
DEC BX ; 下标减1
LOOP BACK ; 循环移动元素,直到移动完毕
MOV [AS], AL ; 将最后一个元素的值存放到数组的第一个位置
```
2. 将AS中最大元素和最小元素分别存于Max和Min中
```assembly
MOV CX, 7 ; 设置计数器,表示需要比较的元素个数为7
MOV AL, [AS] ; AL初始化为数组的第一个元素
MOV BX, 1 ; BX初始化为数组的第二个元素的下标
MOV DX, [AS] ; DX存放当前最小值
MOV SI, [AS] ; SI存放当前最大值
BACK: CMP [AS+BX], AL ; 比较当前元素和AL的大小
JAE NEXT ; 如果当前元素大于等于AL,则跳过
MOV AL, [AS+BX] ; 更新AL的值
NEXT: CMP [AS+BX], SI ; 比较当前元素和SI的大小
JBE NEXT2 ; 如果当前元素小于等于SI,则跳过
MOV SI, [AS+BX] ; 更新SI的值
NEXT2: CMP [AS+BX], DX ; 比较当前元素和DX的大小
JA NEXT3 ; 如果当前元素大于DX,则跳过
MOV DX, [AS+BX] ; 更新DX的值
NEXT3: INC BX ; 下标加1
LOOP BACK ; 循环比较元素,直到比较完毕
MOV Max, SI ; 将最大值存放到Max中
MOV Min, DX ; 将最小值存放到Min中
```
3. 将字符串AS中的内容复制到target中,并显示输出
```assembly
MOV CX, 7 ; 设置计数器,表示需要复制的字符个数为7
MOV SI, AS ; SI指向字符串AS的起始地址
MOV DI, target ; DI指向字符串target的起始地址
BACK: MOV DL, [SI] ; DL存放当前字符的值
MOV [DI], DL ; 将当前字符复制到target中
INC SI ; 指向下一个字符
INC DI ; 指向下一个位置
LOOP BACK ; 循环复制字符,直到复制完毕
MOV AH, 09H ; 显示字符串功能
MOV DX, offset target ; DX存放要显示的字符串的地址
INT 21H ; 调用21H中断显示字符串
```
阅读全文