编写程序,将数据段里的某数组在原位置逆序(例如ARRAY数组{1,2,3}变为{3,2,1},但首地址依然是ARRAY),要求用子程序实现逆序操作。子程序要求有一定通用性,能够处理不同数组。
DATAS SEGMENT
;此处输入数据段代码
ary dw 1,2,3,4,5,6,7,8,9
ary_size equ ($-ary)/2 ;表示数组的长度
;equ是伪指令 $-ary表示用当前的地址减去ary的地址
;减去之后的结果就是数组元素的个数
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
mov bx,offset ary
push bx
mov bx,offset ary_size
push bx
call reverse ;调用逆序子程序
MOV AH,4CH ;结束程序
INT 21H
reverse proc near
push bp
mov bp,sp
push ax
push cx
push si
push di
lea ax,ary ;把ary的初始地址赋值给ax
mov si,ax
mov cx,ary_size ;把size的具体数值放到cx中
mov di,si
mov ax,cx
mov bl,2
mul bl
add di,ax
;数组的尾地址的下一个地址
sub di,2;现在指向数组的尾地址
legal1:
cmp cx,0
jle done
mov al,[si]
xchg al,[di]
mov [si],al
inc si
dec di
loop legal1
done:
pop di
pop si
pop cx
pop ax
pop bp
ret 6
reverse endp
CODES ENDS
END START