汇编--学习笔记(十二)-子程序(二)-子程序数据传递
来源:互联网 发布:新东方托福知乎 编辑:程序博客网 时间:2024/06/04 04:57
一、利用存储器传送数据
利用存储器传送数据时,通常是把一个参数表(数据表)放在某一数据区,然后把这个数据区的首地址传送给过程,而过程把计算结果送至某个变量。
例子一:
主程序把一个3字节的参数表的首地址放在SI寄存器中。子程序ADSUB把参数表中第一个字节和第二个字节相加,结果存入第三个字节。
DISP MACRO ;宏定义 OR DL,30H MOV AH,02H INT 21H ENDMDATAS SEGMENTLIST1 DB 23 DB 68 DB ?LIST2 DB 35,26,? DATAS ENDSSTACKS SEGMENT PARA STACK 'STACH' DW 4 DUP(?)STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS ;装载数据段中的值 MOV DS,AX MOV AX,STACKS ;转载堆栈段中的值 MOV SS,AX MOV SI,OFFSET LIST1 ;获取参数表1首地址,并将其放到SI中去CALL1: CALL ADSUB ;调用子程序对参数表1运算RET1: CALL OUTP ;调用子程序,输出运算结果1 MOV DL,' ';显示一个空格符号 MOV AH,02H INT 21H LEA SI,LIST2 ;获取参数表2的首地址放到SI中CALL2: CALL ADSUB ;调用子程序对参数表2运算RET2: CALL OUTP MOV AH,4CH INT 21HADSUB PROC ; MOV AL,[SI] ;将SI的第一个字节的值放到AL中去 ADD AL,[SI+1] ;将SI的第一个字节与第二字节与第二字节相加 MOV [SI+2],AL ;将前两个字节相加的值放到参数表的第三个字节中去 RETADSUB ENDPOUTP PROC ;二进制化成十进制输出 MOV AH,0 ;AX高位清零 MOV BL,10 DIV BL ;AX/BL MOV DL,AL ;商在AL(十位) MOV BH,AH DISP MOV DL,BH ;余数在AH(个位) DISP RETOUTP ENDPCODES ENDS END START
阅读全文
0 0
- 汇编--学习笔记(十二)-子程序(二)-子程序数据传递
- Fortran学习笔记6(函数、子程序)
- ARM汇编子程序参数传递
- 汇编源码学习7-子程序设计-寄存器传递参数
- 汇编学习---子程序之call的四种参数传递
- 汇编学习---子程序之call的四种参数传递
- perl子程序学习笔记
- perl子程序学习笔记
- 汇编学习-堆栈与子程序
- Oracle数据笔记-【5】子程序(存储过程)和函数
- 汇编学习笔记----转移指令及子程序原理
- perl学习笔记五----子程序
- 子程序(章节摘要)
- VHDL子程序(Subprograms)
- 子程序
- 子程序
- 子程序
- 子程序
- Ajax之helloWorld
- Node之Linux下多版本管理整理总结
- 数据结构之螺旋方阵实现
- dll 导出函数名的那些事
- java基础篇(八)——接口
- 汇编--学习笔记(十二)-子程序(二)-子程序数据传递
- javaweb
- Hadoop基础教程-第6章 MapReduce入门(6.2 解读WordCount)(草稿)
- Magic
- 简单的链表与自动清理内存
- 创建json
- Android 解析json对象,存放到List中
- jQuery基础-样式篇
- html里制作简单导航栏