什么是子程序

什么是子程序,第1张

子程序是一个大型程序中的某部份代码,由一个或多个语句块组成。

一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。函数在面向过程的语言中已经出现。是结构(Struct)和类(Class)的前身。本身就是对具有相关性语句的归类和对某过程的抽象。

程序(subroutine)是一个概括性的术语,任何高级程序所调用的程序,都被称为子程序。它经常被使用在汇编语言层级上。子程序的主体(body)是一个代码区块,当它被调用时就会进入运行。

子程序的应用:

1、零件上若干处具有相同的轮廓形状,在这种情况下,只要编写一个加工该轮廓形状的子程序,然后用主程序多次调用该子程序的方法完成对工件的加工。

2、加工中反复出现具有相同轨迹的走刀路线,如果相同轨迹的走刀路线出现在某个加工区域或在这个区域的各个层面上,采用子程序编写加工程序比较方便,在程序中常用增量值确定切入深度。

3、在加工较复杂的零件时,往往包含许多独立的工序,有时工序之间需要适当的调整,为了优化加工程序,把每一个独立的工序编成一个子程序,这样形成了模块式的程序结构,便于对加工顺序的调整,主程序中只有换刀和调用子程序等指令。

百度百科—子程序

1

DATA SEGMENT

SRC DB 'How are you'

DES DB 'are'

DATA ENDS

STACK SEGMENT STACK

DB 200 DUP(0)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START: MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV SI,OFFSET SRC

MOV DI,OFFSET DES

LOP: MOV CX,3

CLD

REPZ CMPSB

CMP CX,0

JZ NEXT

MOV DI,OFFSET DES

ADD SI,CX ;si-(3-cx)+1

SUB SI,2

JMP LOP

NEXT: AND DH,0

MOV DX,SI ;SI存放'are'出现的末位置

SUB DL,3

ADD DL,30H ;显示位'are'的起始位置

MOV AH,2

INT 21H

MOV AH,4CH

INT 21H

CODE ENDS

END START

2

DATA SEGMENT

BUFFER DB 'How are you',00H

DATA ENDS

STACK SEGMENT STACK

DB 200 DUP(0)

STACK ENDS

CODE SEGMENT

ASSUME DS:DATA,CS:CODE,SS:STACK

START: MOV AX,DATA

MOV DS,AX

MOV SI,OFFSET BUFFER

LOP1: MOV BL,[SI]

CMP BL,20H

JNZ NEXT ;如果为逗号,将后面的数据前移

MOV DI,SI

LOP2: MOV BL,[DI+1]

MOV [DI],BL

INC DI

MOV BL,[DI]

CMP BL,0H ;如果为00,跳出内循环

JNZ LOP2

NEXT: INC SI

MOV BL,[SI]

CMP BL,0H ;如要[SI]小于为00H,跳出循环

JNZ LOP1

MOV AH,4CH

INT 21H

CODE ENDS

END START

3

DATA SEGMENT

BUF DB 60

N DB

CHAR DB 60 DUP(0)

STR DB 'INPUT NUM:','$'

DATA ENDS

STACK SEGMENT STACK

DB 200 DUP(0)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START: MOV AX,DATA

MOV DS,AX

MOV DX,OFFSET STR

MOV AH,9

INT 21H

MOV DX,OFFSET BUF

MOV AH,10

INT 21H

MOV AH,2

MOV DL,0AH

INT 21H

MOV DL,0DH

INT 21H

MOV CL,N

MOV SI,OFFSET CHAR

AND BH,0

MOV BL,N

ADD SI,BX

LOP1: DEC SI

MOV DL,[SI]

MOV AH,2

INT 21H

LOOP LOP1

MOV AH,4CH

INT 21H

CODE ENDS

END START

4

DATA SEGMENT

BUF DW 1234H,3456H,2134H,7893H,3456H

RESULT DW 0,0

DATA ENDS

STACK SEGMENT STACK

DB 200 DUP(0)

STACK ENDS

CODE SEGMENT

ASSUME DS:CODE,SS:STACK,CS:CODE

START: MOV AX,DATA

MOV DS,AX

CALL PLUS_N

MOV SI,OFFSET RESULT

MOV BX,[SI+2]

CALL DISPLAY

MOV BX,[SI]

CALL DISPLAY

MOV AH,4CH

INT 21H

;功能:计算多字节相加

;入口参数:BUF

;出口参数:RESULT

PLUS_N PROC

AND DX,0

AND AX,0

MOV CL,5

MOV SI,OFFSET BUF

LOP: ADD AX,[SI]

ADC DX,0

INC SI

INC SI

LOOP LOP

MOV SI,OFFSET RESULT

MOV [SI],AX

MOV [SI+2],DX

RET

PLUS_N ENDP

;功能:显示十六进数

;入口参数:BX

DISPLAY PROC

MOV CH,4

LOP1: MOV CL,4

ROL BX,CL

MOV DL,BL

AND DL,0FH

ADD DL,30H

CMP DL,3AH

JB NEXT

ADD DL,7

NEXT: MOV AH,2

INT 21H

DEC CH

CMP CH,0

JNZ LOP1

RET

DISPLAY ENDP

CODE ENDS

END START

编码不容易,望能帮到楼主。楼主好好看

CRLFMACRO;宏定义,实现回车换行

MOVAH,2

MOVDL,0DH

INT21H

MOVAH,2

MOVDL,0AH

INT21H

ENDM

DSEGMENT

SCOREDB76,69,84,90,73,88,89,63,100,80;数组接收分数

SDB5DUP();预留5个位置存储每个分数段的人数

WORDSDB"THENUMBERBETWEEN60~69IS:$"

WORDS1DB"THENUMBERBETWEEN70~79IS:$"

WORDS2DB"THENUMBERBETWEEN80~89IS:$"

WORDS3DB"THENUMBERBETWEEN90~99IS:$"

WORDS4DB"THENUMBERBETWEEN100IS:$"

DENDS

CODESEGMENT

ASSUMECS:CODE,DS:D

BG:

MOVAX,D

MOVDS,AX

CALLCOUNT;调用子程序

MOVAH,9;输出每个分数段的人数

LEADX,WORDS

INT21H

MOVAH,2

MOVDL,S

ADDDL,30H

INT21H

CRLF

MOVAH,9

LEADX,WORDS1

INT21H

MOVAH,2

MOVDL,S1

ADDDL,30H

INT21H

CRLF

MOVAH,9

LEADX,WORDS2

INT21H

MOVAH,2

MOVDL,S2

ADDDL,30H

INT21H

CRLF

MOVAH,9

LEADX,WORDS3

INT21H

MOVAH,2

MOVDL,S3

ADDDL,30H

INT21H

CRLF

MOVAH,9

LEADX,WORDS4

INT21H

MOVAH,2

MOVDL,S4

ADDDL,30H

INT21H

CRLF

MOVAH,4CH

INT21H

COUNT:;子程序入口

MOVCX,10;循环10次

MOVSI,0

LOP:

INT3

MOVAL,SCORE[SI]

CMPAL,70

JBNUMBER6;比较进入不同的标号进行计算每个分数段人数

CMPAL,80

JBNUMBER7

CMPAL,90

JBNUMBER8

CMPAL,100

JENUMBER10

JMPNUMBER9

NUMBER6:;不同标号之下的作用是计算每个分数段人数并存于预留的位置中

MOVBL,S

INCBL

MOVS,BL

JMPL

NUMBER7:

MOVBL,S1

INCBL

MOVS1,BL

JMPL

NUMBER8:

MOVBL,S2

INCBL

MOVS2,BL

JMPL

NUMBER9:

MOVBL,S3

INCBL

MOVS3,BL

JMPL

NUMBER10:

MOVBL,S4

INCBL

MOVS4,BL

JMPL

L:

INCSI

LOOPLOP

RET;子程序结束,放回主程序

CODEENDS

ENDBG

以上就是关于什么是子程序全部的内容,包括:什么是子程序、汇编语言程序 题目请教 求高人解答!、汇编语言程序设计方法_汇编语言程序设计教程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9695202.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存