汇编语言程序结构例一 程序: movs.asm 功能:实现数据传送功能 数据段1传送到数据段2 目的:学习程序结构
6 汇编语言程序结构例一 程序: movs.asm 功能: 实现数据传送功能 数据段1 传送到 数据段2 目的: 学习程序结构
程序结构 汇编语言程序结构例一mows.asm 实现数据传送功能 aa SEgment;数据段1 ●程序由数条语句构成,每条语句占一行。 strl Db 'Hello!' 指令性语句(指令语句) aa ENds 指示性语句伪指令语句) bb SEgment 数据段2 str2 DB 6 dup ●分段结构 bb ENds 程序按段编写,与8088内存分段编址相对应。 CC SEGMENT;代码段 ASSUME CS: cc. DS: aa. ES: bb 每段由伪操作 SEGMENT开始、由ENDS结束。 tart: CLD ●程序最后为END结束语句,后跟一启动地址。 MOV AX. aa MOV DS. AX 启动地址指示程序开始执行的第一条语句。 LEA SI. strl ●程序中设有返回DOS的功能 MOV AX. SEG str2 MOV ES,AX 使程序执行完后返回DOS系统的命令接受状态 MOV DI OFFSET str2 MOV CX. 6 ●程序中用到内存操作数时, REP MOVSB 应按操作数的寻址方式给相应的段寄存器赋值 MOV AH. 4CH INT21H;返回DOS ENDS END start;指示程序结束
7 一、程序结构 ⚫ 程序由数条语句构成,每条语句占一行。 指令性语句(指令语句) 指示性语句(伪指令语句) ⚫ 分段结构 程序按段编写,与8088内存分段编址相对应。 每段由伪操作SEGMENT开始、由ENDS结束。 ⚫ 程序最后为END结束语句,后跟一启动地址。 启动地址指示程序开始执行的第一条语句。 ⚫ 程序中设有返回DOS的功能。 使程序执行完后返回DOS系统的命令接受状态。 ⚫ 程序中用到内存操作数时, 应按操作数的寻址方式,给相应的段寄存器赋值 ;汇编语言程序结构例一 movs.asm ;实现数据传送功能 aa SEGMENT ;数据段1 str1 DB 'Hello!’ aa ENDS bb SEGMENT ;数据段2 str2 DB 6 dup (?) bb ENDS cc SEGMENT ;代码段 ASSUME CS:cc, DS:aa, ES:bb start: CLD MOV AX , aa MOV DS , AX LEA SI , str1 MOV AX , SEG str2 MOV ES , AX MOV DI ,OFFSET str2 MOV CX , 6 REP MOVSB MOV AH , 4CH INT 21H ;返回DOS cc ENDS END start ;指示程序结束
汇编语言程序结构例二 程序 scans.asm (子程结构) 子程内容:用二进制显示BX内容 功能:实现 用二进制显示 中断向量表中(0:0-0:3FFH) 数据D0H的个数 目的:了解程序可由多个段构成
8 汇编语言程序结构例二 程序: scans.asm (子程结构) 子程内容: 用二进制显示BX内容 功能: 实现 用二进制显示 中断向量表中(0:0~0:3FFH) 数据D0H的个数 目的: 了解程序可由多个段构成
程序可由多个段构成,至少有一个代码段 ;汇编语言程序结构例〓(子程结构) scans.,asm ;用二进制显示中断向量表中(0:00:3FFH)数据D0H的个数 key EQU0D0H;用符号表示常量(关键字) code Segment ;代码段开始 ;用二进制显示BX内容子程 ASSUME CS: code display PROC begin: MOV AX, 0000H MOV CX.16 MOV DS. AX rotate: ROL BX. 1 MOV SI 0000H MOV DL BL MOV CX. 0400H AND DL. OIH MOV BX. 0 ADD DL. 30H MOV AL, key MOV AH 2H next: CMP I SI, AL INT 21H JNZ point LOOP rotate INC BX RET ;子程返回 point: INC SI display eNDP LOOP next CALL display;调用显示子程 code ENDS ;代码段结束 MOV AH,4CH;返回DOS eNd begin;指示程序结束和 INT 21H ;程序入口
9 程序可由多个段构成,至少有一个代码段 ;汇编语言程序结构例二(子程结构)scans.asm ;用二进制显示中断向量表中(0:0~0:3FFH)数据D0H的个数 key EQU 0D0H ;用符号表示常量(关键字) code SEGMENT ;代码段开始 ASSUME CS:code begin: MOV AX , 0000H MOV DS , AX MOV SI , 0000H MOV CX , 0400H MOV BX , 0 MOV AL , key next: CMP [ SI ] , AL JNZ point INC BX point: INC SI LOOP next CALL display ; 调用显示子程 MOV AH, 4CH ; 返回DOS INT 21H ;用二进制显示BX内容子程 display PROC MOV CX , 16 rotate: ROL BX , 1 MOV DL , BL AND DL , 01H ADD DL , 30H MOV AH , 2H INT 21H LOOP rotate RET ;子程返回 display ENDP code ENDS ;代码段结束 END begin ;指示程序结束和 ;程序入口
语句结构 「名字]:1助记符操作数,…][;注释 名字项助记符项操作数项 注释项 例: data SEgment;数据段 var db data ENDS code SEgment 代码段 ASSUME CS: code. ds: data start: MOv AX. data MOV DS. AX MOv var CL MOV AH. 4CH INT21H;返回DOS code ENDS END start
10 二、语句结构 [名字] [: ] 助记符 [ 操作数, ] [;注释] 名字项 助记符项 操作数项 注释项 data SEGMENT ;数据段 var DB ? data ENDS code SEGMENT ;代码段 ASSUME CS:code,DS:data start: MOV AX, data MOV DS , AX MOV var, CL MOV AH , 4CH INT 21H ;返回DOS code ENDS END start 例: