第八章汇编语言高级编程技巧PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
子模块PRICES.ASM
CODE SUBM
SUBM CODE
SEGMENT PROC FAR ASSUME CS:CODE MOV AX,PRICE MUL QTY MOV WORD PTR TOTAL,AX MOV WORD PTR TOTAL+2,DX RET ENDP ENDS END
(1)外部引用伪指令EXTRN
SUBM SEGMENT COMMON DW 80 DW 60 DD ? DB‘123’ ENDS
;局部变量
CODE SUBM
SEGMENT PROC FAR ASSUME CS:CODE,DS:DATA PUSH DS PUSH AX PUSH DX MOV AX,DATA MOV DS,AX
SUBM CODE
汇编语言程序设计
第八章 汇编语言高级编程技巧
8.1 模块化程序设计
8.2 汇编语言程序与高级语言程序的连接 8.3 使用DOS EXEC功能执行程序 8.4 TSR程序设计
8.1 模块化程序设计
软件工程开发包括以下步骤:
① 系统分析; ② 系统设计; ③ 细化各模块的功能、确定模块间的关系及通信方 法; ④ 完成各模块的程序编码及模块调试; ⑤ 连接多个模块组成大系统; ⑥ 调试大系统; ⑦ 系统维护。
格式:EXTRN 名字:类型[,...] 注意:EXTRN伪指令应该出现在引用该名字之前,一般
放在程序的开头。
(2)全局符号说明伪指令PUBLIC
格式:PUBLIC 名字[,...] 例8.1 实现PRICE×QTY=TOTAL的功能。其中数据定义
和乘法实现分别在两个模块中。程序见程序8.1。
程序8.1a 主模块PRICEM.ASM
MOV AX,PRICE
MUL QTY
MOV WORD PTR TOTAL,AX
MOV WORD PTR TOTAL+2,DX
POP DX
POP AX
POP DS
RET
ENDP
ENDS
END
返回
3.使用寄存器或堆栈实现过程通信
在模块化程序设计中,也可以使用寄存器 或堆栈传递参数或参数地址,从而实现过程通 信。例如,通过AX、DX寄存器把PRICE和QTY的 值传递给子程序实现过程通信。
MAIN CODE
SEGMENT PROC FAR ASSUME CS:CODE,DS:DATA MOV AX,DATA MOV DS,AX CALL FAR PTR SUBM MOV AX,4C00H INT 21H ENDP ENDS END MAIN
程序8.2b(子程序)
PUBLIC DATA PRICE QTY TOTAL REM DATA
主模块
模块A
模块B
模块D
模块C
模块E
图8-1 模块的层次结构
模块C
8.1.1 模块通信
1.外部引用与全局符号说明
例.实现PRICE×QTY=TOTAL的功能。要求由 两个模块实现,其中主模块给出数据,子模 块实现两数相乘。
主模块PRICEM.ASM
DATA SEGMENT
PRICE DW 60
main proc far
assume cs:code,ds:data
mov ax,data
mov ds,ax
CALL FAR PTR SUBM
MOV AX,4C00H
INT 21H
main endp
code ends
end main
返回
程序8.1b 子模块PRICES.ASM
EXTRN PUBLIC
CODE SUBM
SUBM CODE
PRICE:WORD,QTY:WORD,TOTAL:DWORD
SUBM
SEGMENT
PROC FAR
ASSUME CS:CODE
...
MOV AX,PRICE
MUL QTY
MOV word ptr TOTAL,AX
MOV word ptr TOTAL+2,DX
...
EXTRN PUBLIC
… data PRICE QTY TOTAL data
SUBM:FAR TOTAL
segment
DW 60
DW 80
DD ?
ends
…
MOV AX,PRICE
MOV DX,QTY
CALL FAR PTR SUBM
…
end
main
可以把程序8.1b改为:
EXTRN PUBLIC
EXTRN SUBM:FAR PUBLIC PRICE,QTY,TOTAL stacksg segment stack 'stk'
dw 32 dup('s') stacksg ends data segment PRICE DW 60 QTY DW 80 TOTAL DD ? data ends
code segment
TOTAL:DWORD SUBM
… MUL DX MOV word ptr TOTAL,AX MOV word ptr TOTAL+2,DX
… END
8.1.2 模块连接
一个程序可以由若干个模块组成,一个 模块又可以包含多个段,这些模块经过分别 调试后,最终要组装到一起,形成一个大系 统。
一、多模块程序设计上机步骤
程序8.2a(主程序):
EXTRN SUBM:FAR STACKSG SEGMENT STACK 'STK'
DW 32 DUP('S') STACKSG ENDS DATA SEGMENT COMMON PRICE DW 60 QTY DW 80 TOTAL DD ? DATA ENDS
CODE MAIN
以程序8.1的PRICEM.ASM和PRICES.ASM两个独立模块为 例,讨论多模块程序设计上机步骤。
QTY
DW 80
TOTAL DD ?
DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROC FAR
MOV AX,DATA MOV DS,AX CALL FAR PTR SUBM MOV AX,4C00H INT 21H MAIN ENDP CODE ENDS END MAIN
RET
ENDP
返回
ENDS
END
2. 使用公用数据段实现过程通信
COMMON功能:告诉连接程序把多个同名数据段 在连接时重叠形成一个段,产生段覆盖。
说明:具有COMMOຫໍສະໝຸດ Baidu组合类型的最长段决定了公共段
的长度,重叠部分的内容取决于连接时最后一个公 共段的内容。
例8.2 实现例8.1的功能,但使用公用数据段实 现过程通信,见程序8.2。