《2022年2022年汇编子程序 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年汇编子程序 .pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、例:寄存器传递参数(求数组元素之和并以十六进制显示)D_SEG SEGMENT ARRAY DB 10,20,30,5,60 COUNT EQU $-ARRAY D_SEG ENDS S_SEG SEGMENT PARA STACK DW 100 DUP(?) S_SEG ENDS C_SEG SEGMENT ASSUM CS:C_SEG, DS:D_SEG, SS:S_SEG START: LEA SI,ARRAY MOV CX ,COUNT CALL SUM1 CALL DISPLAY 子程序 SUM1 入口参数 SI=数组首地址 CX= 数组长度出口参数 AX= 数组和SUM1 PROC
2、 NEAR CMP CX,0 JZ EXIT XOR AX,AX AGAIN: ADD AL,SI ADC AH,0 INC SI LOOP AGAIN EXIT: RET SUM1 ENDP DISPLAY PROC NEAR MOV BX, AX MOV CH, 4 ROTATE: MOV CL, 4 ROL BX, CL MOV AL, BL AND AL, OFH OR AL, 30H CMP AL, 3AH JL PRINT ADD AL, 07H PRINT: MOV DL, AL MOV AH, 02H INT 21H DEC CH JNZ ROTATE 名师资料总结 - - -
3、精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - RET DISPLAY ENDP 例:直接存储单元传送示例(求数组元素之和,结构送SUM 单元)D_SEG SEGMENT ARRAY DW 50DUP(?) COUNT DW 50 SUM DW ? D_SEG ENDS 主程序CALL PROADDMAIN ENDP PROADD PROC PUSH AX PUSH CX PUSH SI XOR AX,AX LEA SI,ARRAY ;直接使用存储单元
4、MOV CX,COUNT ADDT: ADD AX,SI ADD SI,2 LOOP ADDT MOV SUM, AX POP SI POP CX POP AX RET PROADD ENDPEND MAIN 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - 地址表传递示例调用子程序前,把所有参数的地址送入地址表,然后把地址表的偏移量通过寄存器带进子程序,子程序从地址表中取得参数地址。问题:如果要求两个数组ARRAY 和数组 NU
5、M 各个数组的和。若利用直接存储单元传送的话,要修改子程序求数组之和D_SEG SEGMENT ARRAY DW 50 DUP(?) COUNT DW 50 SUM DW ? TABLE DW 3 DUP(?) D_SEG ENDS 代码段MAIN PROC FARMOV TABLE, OFFSET ARRAY TABLE MOV TABLE+2, OFFSET COUNT (字)MOV TABLE+4, OFFSET SUM LEA BX,TABLE CALL PROADDMAIN ENDP PROADD PROC ;入口参数BX 为地址表首地址PUSH AX ; 保护现场MOV SI ,B
6、X ;数组首地址送SI MOV BP, BX+2 ;数组长度单元地址送BP MOV CX ,DS: BP ;数组长度送CX MOV DI, BX+4 ;存储和单元地址送DI MOV AX ,0 ADDT : ADD AX ,SI ADD SI,2 LOOP ADDT MOV DI ,AX POP DI RET PROADD ENDP 利用堆栈传递参数求数组元素之和ARRAY 首地址COUNT 首地址SUM 地址名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页 - -
7、 - - - - - - - 主程序中:LEA BX,ARRAY ;数组首地址(参数)进栈PUSH BX LEA BX,COUNT PUSH BX LEA BX,SUM PUSH BX CALL FARPTR PROADD ;不在同一段MAIN ENDP PROADD PROC FAR PUSH AX ;保护现场PUSH BX PUSH CX PUSH BP MOV BP, SP ;BP:地址的值PUSH DI MOV DI,BP+14 ;COUNT 的地址(取得地址参数)MOV CX ,DI ;数组长度MOV BX ,BP+12 ;MOV SI,BP+16 MOV AX ,0 ADDT :
8、ADD AX ,SI ADD SI,2 LOOP ADDT MOV BX ,AX ;保存和POP DI POP BP POP CX POP BX POP AX RET PROCADD ENDP 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -