文档详情

汇编语言第十三章.ppt

发布:2017-06-17约3.03千字共19页下载文档
文本预览下载声明
第十三章 模块化程序设计 * * 13.1 汇编程序 源程序模块 目标模块 汇编程序 OBJ 文件 LST 文件 CRF 文件 几个问题: (1) 向前引用 在操作数字段出现变量或标号时,如果它们未被定义过,称为向前引用。 (2) 浮动地址 变量和标号都是浮动地址。 13.2 连接程序 目标模块 装入模块 连接程序 EXE 文件 MAP 文件 连接程序的主要功能: 再定位:确定所有的段地址值和所有汇编程序不能确定的偏移地址值。 构成装入模块(EXE 文件),并装入存储器。 多个模块组合时的连接情况: 段定义伪操作 定位类型 组合类型 类别 PUBLIC COMMON STACK MEMORY 例: ; b.asm data segment common …… data ends ? stack segment stack …… stack ends ? code segment public …… code ends ; a.asm data segment common …… data ends ? stack segment stack …… stack ends ? code segment public …… code ends 多个模块之间的变量传送问题: 局部符号:在本模块中定义,又在本模块中引用的符号 外部符号:在某一模块中定义,又在另一模块中引用的符号 PUBLIC 符号 EXTRN 符号: 类型 例6.4 ; proadd1.asm extrn proadd : far data segment common ary dw 1,2,3,4,5,6,7,8,9,10 count dw 10 sum dw ? data ends code1 segment main proc far assume cs:code1, ds:data start: push ds sub ax, ax push ax mov ax, data mov ds, ax call far ptr proadd ? ret main endp code1 ends end start ; proadd2.asm public proadd data segment common ary dw 1,2,3,4,5,6,7,8,9,10 count dw 10 sum dw ? data ends ? code2 segment proadd proc far assume cs:code2, ds:data ? mov ax, data mov ds, ax ? push ax push cx push si lea si, ary mov cx, count xor ax, ax next: add ax, [si] add si, 2 loop next mov sum, ax ? pop si pop cx pop ax ? ret proadd endp code2 ends end 13.3 汇编语言程序与高级语言程序的连接 连接中要解决的问题: 存储器分配问题 两种语言之间的控制传送问题 变量传送问题 调用协议: 用于C/C++语言的C语言调用协议 用于BASIC、PASCAL、FORTRAN语言的 PASCAL语言调用协议 C 语言和汇编语言混合编程 (一) C 语言程序中直接嵌入汇编代码 内嵌汇编语言格式: asm 操作码 操作数 ; 或换行符 例:test1.c #include stdio.h main()
显示全部
相似文档