这样扮蚂定义的:
子程序名 PROC NEAR|FAR
.
.
RET
子程序名 ENDP
子程序名相当于标号,表示本过拆则程的符号地址。过程有NEAR和FAR两种类型,FAR型的过程可供段间调用,NEAR型过程仅供段内调用。
在一个过程中,至少要有一条返回指令RET,它可以书写在过程中的任何位置,但是过程执行的的最后一条指令一定是RET。
扩展资料:注意事项
一、子程序调用指令
格式:CALL [NEAR PTR] 子程序名
CALL指令的两个作用,1.将断点地址(CALL指令的下一条指令地址)压栈保存,2.转去子程序执行。
[NEAR PTR]可以省略。
二、返回指令
格式:RET [N]
指令旅缺棚作用:实现子程序执行完后返回主程序的指令。从堆栈栈顶d出一个字数据(段内调用)送入IP作为返回地址。N是立即数,执行完RET之后,再将SP增加N,也叫“平栈”。
你好,子程序的汇编代码只有在最终的Link阶段才会为代码和数据分配内存地址,因此指定代码段的地址一般是通过写一个link脚本来进行的。Link阶段时,编译器的Linker会读取你写的Link脚本,并且按照脚本的规定给代码分配地址。
根据
子程液哪序的汇编代码开发工具的不同,link脚本的语法和形闹薯码式也有所不同手模。ARM MDK,ARM ADS,Eclips+GCC,Linux GCC, ARM Realview等开发工具都支持Link脚本。
如果你英文还可以,建议你直接找到开发工具的Help手册去研究。如果你英语实在不行,也可以把开发工具名称和你代码的具体情况告诉我,我帮你看看。
1.将AX中的值以十六进制形式显示。要求:主程序利用寄存器把AX的值传送给子程序。
在子程序中将AX中的值以十六进制形毁做式显示。
=====================================
DATA SEGMENT
D1 DW 13276 数: 0~65535
DATA ENDS
------------------------------
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
------------------------------
MOV AX, D1取来数字.
CALL DISP_AX
MOV DL, 'H'
MOV AH, 2
INT 21H 输出H
------------------------------
MOV AH, 4CH
INT 21H 返回DOS
------------------------------
DISP_AX:
MOV BX, 1616进制,要除16
MOV CX, 4 求4位16进制数.
ABC:
CWD将AX扩展到DX
DIV BX
PUSH DX保存余数到堆栈.
LOOP ABC
MOV CX, 4 显示4位.
ASD:
POP DX
CMP DL, 10
JB A48
ADD DL, 7
A48:
ADD DL, 48
MOV AH, 2
INT 21H 输出.
LOOP ASD
RET
------------------------------
CODE ENDS
END START
===========================
2.编写子程序,完成的纤陵衡功能是将DL中的2位十六进制数转换为对应ASCII码。
说明:入口参数AL=待转换的2位十六汪如进制数
出口参数DX=转换后的ASCII码,(高字节对应高位、低字节对应低位)
举例:若AL=2AH,则DX=3241H。
0----9转换为30H----39H +30H
A---F转换为41H----4FH +30H+7H
------------------------------
AL_ASC_DX:
MOV AH, 0 要除16
MOV CL, 16求16进制数.
DIV CL
CMP AL, 10
JB A48
ADD AL, 7
A48:
ADD AL, 48
MOV DH, AL
CMP AH, 10
JB A482
ADD AH, 7
A482:
ADD AH, 48
MOV DL, AH
RET
------------------------------
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)