子程序是一个大型程序中的某部份代码,由一个或多个语句块组成。
一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。函数在面向过程的语言中已经出现。是结构(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
以上就是关于什么是子程序全部的内容,包括:什么是子程序、汇编语言程序 题目请教 求高人解答!、汇编语言程序设计方法_汇编语言程序设计教程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)