[汇编] 测试使用堆栈传递参数

试编制一个将字符串STR1传送到字符串STR2的调用程序与子程序(设两串无地址重叠)。并将STR2串送显示。

DATA   SEGMENT
	        STR1    DB  'ABC'                       ;源串
	        N       EQU  $-STR1
	        STR2    DB   N  DUP(0),'$'
DATA   ENDS
STAK   SEGMENT  STACK
       		DB  100  DUP(0)
STAK    ENDS
CODE   SEGMENT
       		ASSUME  CS:CODE,DS:DATA,ES:DATA       
START: 
	    MOV   AX,DATA
       	MOV  DS,AX
       	MOV  ES,AX 
       	PUSH   DS
          
       	LEA   SI,STR1
       	LEA   DI,STR2
       	MOV  CX,N
       PUSH  CX                         ;入口参数3进栈
        PUSH  DI                         ;入口参数2进栈
        PUSH  SI                         ;入口参数1进栈
        CALL  SMOVB  
        
        MOV AH,4CH
        INT 21H
                         
;子程序名:SMOVB
;功能:完成字符串传送,并显示STR2
;输入参数:源、目的串首址及字符串长度的SI,DI,CX进栈
;输出参数:在附加段中存放STR2开始的目的串
SMOVB  PROC  NEAR
         POP  BX                     ;取出断点地址偏移量
         POP  SI                     ;取出输入参数1
         POP  DI                     ;取出输入参数2
         POP  CX                     ;取出输入参数3
         PUSH  BX                    ;恢复断点保存,要关注断点地址
         CLD                         ;增址方向
         REP  MOVSB                  ;重复串传送
         LEA  DX,STR2                ;9号功能的字符串显示
         MOV  AH,9
         INT   21H
         RET
SMOVB  ENDP  

CODE    ENDS
               END  START

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值