Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1352948
  • 博文数量: 416
  • 博客积分: 13005
  • 博客等级: 上将
  • 技术积分: 3297
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-05 16:26
文章分类

全部博文(416)

文章存档

2014年(1)

2013年(4)

2012年(46)

2011年(64)

2010年(12)

2009年(4)

2008年(40)

2007年(187)

2006年(58)

分类: WINDOWS

2007-10-23 16:29:23

6.2.5

用代码流传递参数

由位于CALL指令之后的代码流(Code Stream)传递参数。

 

DESG SEGMENT

COUNT

DW 5

;DW1个字,即16bit或两个字节

ARRAY

DW 8,-1,32766,0,100

;32766=7FFEH

MAX

DW ?

DESG ENDS

SSEG SEGMENT STACK

DW 128 DUP(?)

SSEG ENDS

CSEG1 SEGMENT

ASSUME CS:CSEG1,DS:DSEG,SS:SSEG

START:

MOV AX,DSEG

MOV DS,AX

CALL FINDMAX

DD COUNT,ARRAY,MAX

MOV AH,4CH

INT 21H

CSEG1 ENDS

CSEG2 SEGMENT

ASSUME CS:CSEG2,SS:SSEG

FINDMAX PROC FAR

MINSW

=8000H

;16位带符号数的最小值

PUSH BP

MOV BP,SP

PUSH AX

PUSH BX

PUSH CX

PUSH SI

PUSH DS

PUSH ES

LDS BX,2[BP]

;装入返回地址到DSBX

LES SI,[BX]

;取元素个数所在地址到ESSI

MOV CX,ES:[SI]

;取得元素个数

LES SI,4[BX]

;取得数组首地址

MOV AX,MINSW

NEXT:

CMP AX,ES:[SI]

JG SKIP

MOV AX,ES:[SI]

SKIP:

ADD SI,2

LOOP NEXT

LES SI,8[BX]

;取得存放最大值的地址

MOV ES:[SI],AX

ADD BX,12

;代码流有12个字节

MOV 2[BP],BX

;修改返回地址

POP ES

POP DS

POP SI

POP CX

POP BX

POP AX

POP BP

RET

FINDMAX ENDP

CSEG2 ENDS

END START

阅读(1118) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~