用汇编语言编写子程序后如何调用?

 我来答
FormatMemory
2018-01-31 · TA获得超过123个赞
知道答主
回答量:51
采纳率:0%
帮助的人:29.4万
展开全部
如果汇编语言自己调用就用个call 就行了,给你举个例子:在运行到需要调用的时候这样用:
call crlf //这里调用crlf这个子程序
crlf proc near //这里写名为crlf的子程序
//子程序代码
ret
crlf endp
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
爱旅行的小米粒儿
推荐于2019-08-27 · TA获得超过2087个赞
知道小有建树答主
回答量:34
采纳率:0%
帮助的人:5.5万
展开全部
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207                                                                                                                                             208                                                                                                                                               209                                                                                                                                         210

CODE  SEGMENT

ASSUME    CS:CODE

ORG       100H

START:  PUSH      CS

POP       DS

PUSH      CS

POP       ES

MOV       DI,0

MOV       SI,0

MOV       BX,10

@MAIN1:  MOV       CX,BX

CALL      FACT

ADD       SI,AX

ADC       DI,DX

DEC       BX

JNZ       @MAIN1

MOV       AX,SI

MOV       DX,DI

CALL      DISPDXAX

MOV       AH,4CH

INT       21H

 

; cx中存放要求阶乘的数 

; 阶乘结果在dx、ax中 

FACT  PROC      NEAR

PUSH      BX

PUSH      SI

PUSH      DI

PUSHF

MOV       DX,0

MOV       AX,1

@FACT1:  MOV       BX,CX

CALL      MULT

LOOP      @FACT1

POPF

POP       DI

POP       SI

POP       BX

RET

FACT  ENDP

 

; 将要显示的无符号数置于 ax 中 

DISPAX  PROC      NEAR

PUSH      BX

PUSH      CX

PUSH      DX

PUSH      SI

PUSH      DS

PUSH      CS

POP       DS

MOV       BYTE PTR NZ,0

PUSH      AX

LEA       SI,DIVARR

MOV       CX,5

@1:

POP       AX

MOV       DX,0

MOV       BX,[SI]

DIV       BX

PUSH      DX

CMP       AL,0

JNE       @2

CMP       BYTE PTR NZ,1

JE        @2

CMP       CX,1

JE        @2

MOV       DL,20H

JMP       @3

@2:

ADD       AL,30H

MOV       DL,AL

MOV       BYTE PTR NZ,1

@3:

MOV       AH,2

INT       21H

INC       SI

INC       SI

LOOP      @1

POP       DX

POP       DS

POP       SI

POP       DX

POP       CX

POP       BX

RET

DIVARR  DW        10000,1000,100,10,1

NZ  DB        0

DISPAX  ENDP

 

; 无符号乘法子程序 (mul指令只能实现16位乘16位,本子程序实现32位乘16位--限定数的大小,结果仍为32位) 

; 被乘数放置于dx,ax 中, 乘数放置于 bx中 

; 结果放置于dx,ax中(dx为高16位,ax为低16位) 

MULT  PROC      NEAR

PUSH      CX

PUSH      SI

PUSH      DI

PUSHF

MOV       SI,0

MOV       DI,0

CMP       BX,0

JE        @MULTEXIT

@MULT1:  SHR       BX,1

JNC       @MULT2

ADD       SI,AX

ADC       DI,DX

@MULT2:  SHL       AX,1

RCL       DX,1

CMP       BX,0

JNE       @MULT1

MOV       DX,DI

MOV       AX,SI

POPF

POP       DI

POP       SI

POP       CX

RET

@MULTEXIT:

MOV       AX,0

MOV       DX,0

POPF

POP       DI

POP       SI

POP       CX

RET

MULT  ENDP

 

; 将要显示的32位无符号数置于dx、ax中 

DISPDXAX  PROC      NEAR

MOV       WORD PTR [Y],AX

MOV       WORD PTR [Y+2],DX

; 以下将 Y (16进制)转为10进制串并输出

MOV       AX,WORD PTR [Y]         ;=====

MOV       DX,WORD PTR [Y+2]       ;=====

MOV       BX,WORD PTR [Z]         ;=====  这一段是关键,加上后不会出现除法溢出

MOV       CX,WORD PTR [Z+2]       ;=====

MOV       WORD PTR N,0            ;=====

MM0:  INC       WORD PTR N  ;=====

SUB       AX,BX       ; 不停地减 10万 ,得到被10万除的商,放在 n 中

SBB       DX,CX       ;=====

JNC       MM0         ;=====

DEC       WORD PTR N  ;  保存 高5位

ADD       AX,BX       ;=====

ADC       DX,CX       ;=====

MOV       WORD PTR[Y],AX          ;=====

MOV       WORD PTR[Y+2],DX        ;=====

;==============

MM1:  LEA       DI,CC

ADD       DI,9

M2:

MOV       AX,WORD PTR [Y]

MOV       DX,WORD PTR [Y+2]

MOV       BX,10000

DIV       BX          ; 这里是发生溢出之处

PUSH      AX

PUSH      DX

; ============

; 以下转换10进制的低4位

POP       DX

MOV       CX,4

MOV       AX,DX

M3:  MOV       DX,0

MOV       BX,10

DIV       BX

ADD       DL,30H

MOV       [DI],DL

DEC       DI

LOOP      M3

; ===========

; 以下转换10进制的高万位

POP       AX

MOV       CX,1

M4:  MOV       DX,0

MOV       BX,10

DIV       BX

ADD       DL,30H

MOV       [DI],DL

DEC       DI

LOOP      M4

;=============

MOV       AX,WORD PTR N

MOV       CX,5

M5:  MOV       DX,0

MOV       BX,10

DIV       BX

ADD       DL,30H

MOV       [DI],DL

DEC       DI

LOOP      M5

; ============

; 输出换行回车

LEA       DX,LFCR

MOV       AH,9

INT       21H

; ============

; 输出两数的和的10进制串

LEA       DX,CC

MOV       AH,9

INT       21H

RET

Y  DD        ?

CC  DB        10 DUP(' '),10,13,'$'

LFCR  DB        10,13,'$'

Z  DD        100000

N  DW        0

DISPDXAX  ENDP

CODE  ENDS

END       START

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式