第三章汇编语言程序设计 第一节汇编语言上机过程 第二节汇编语言程序结构 程序结构 语句结构 第三节指示性语句 一、程序开始和结束 段定义 三、变量定义 四、过程定义 五、 ASSUME语句 六、等值定义 七、表达式中的操作符 第四节汇编语言程序举例 例一、数据传送 例二、查找关键字 ▲DOS的装入和返回功能 第五节BIOS和DOS功能调用 概述 BIOS功能调用 DOS系统功能调用 第六节汇编语言程序设计 概述 汇编语言程序设计举例
第三章 汇编语言程序设计 第一节 汇编语言上机过程 第二节 汇编语言程序结构 一、程序结构 二、语句结构 第三节 指示性语句 一、程序开始和结束 二、段定义 三、变量定义 四、过程定义 五、ASSUME语句 六、等值定义 七、表达式中的操作符 第四节 汇编语言程序举例 例一、数据传送 例二、查找关键字 ▲ DOS的装入和返回功能 第五节 BIOS和DOS功能调用 一、概述 二、BIOS功能调用 三、DOS系统功能调用 第六节 汇编语言程序设计 一、概述 二、汇编语言程序设计举例
第三章汇编语言程序设计 第一节汇编语言上机过程 第二节汇编语言程序结构 第三节指示性语句 第四节汇编语言程序举例 第五节BIOS和DOS功能调用 第六节汇编语言程序设计
第三章 汇编语言程序设计 第一节 汇编语言上机过程 第二节 汇编语言程序结构 第三节 指示性语句 第四节 汇编语言程序举例 第五节 BIOS和DOS功能调用 第六节 汇编语言程序设计
第一节汇编语言上机过程 编辑源程序 EDIT ABC.ASM 汇编源程序 MASM ABC.ASM D: >EDIT ABC. asm 有汇编错误信息? D: >MASM ABC: 有语法错,回EDI下改该程序 形成目标程序ABC.OBJ D: >LINK ABC; 连接目标程序 LINK ABC.OBJ 有错,回在EDI下改程序 有连接错误信息? D: >ABC 形成可执行程序 ABCEXE 运行结果错,回EDI下改程序 装入可执行程序到内存,并执行 或在 DEBUG下调试,找原因。 D: sub>abC D: >DEBUG ABC.exe 运行结果正确?→下一程序 用 DEBUG调试程序查找原因?N 用 DEBUG调试可执行程序 D:>>DEBUG ABC.EXEI|+找到原因
第一节 汇编语言上机过程 D:>EDIT ABC.asm D:>MASM ABC; 有语法错,回EDIT下改该程序 D:>LINK ABC; 有错,回在EDIT下改程序 D:>ABC 运行结果错,回EDIT下改程序 或在DEBUG下调试,找原因。 D:>DEBUG ABC.exe 编辑源程序 EDIT ABC.ASM 汇编源程序 MASM ABC.ASM 形成目标程序 ABC.OBJ 连接目标程序 LINK ABC.OBJ 有连接错误信息? 形成可执行程序 ABC.EXE 装入可执行程序到内存,并执行 D:\>sub>ABC 下一程序 用 DEBUG 调试可执行程序 D:\>sub>DEBUG ABC.EXE 找到原因 Y N Y N N Y N 有汇编错误信息? Y 运行结果正确? 用 DEBUG 调试程序查找原因?
第二节汇编语言程序结构 、程序结构 二、语句结构
第二节 汇编语言程序结构 一 、程序结构 二、语句结构
程序结构 汇编语言程序结构例一movs.asm 实现数据传送功能 ●程序由数条语句构成,每条语句占一行。 aa SEgment 数据段1 指令性语句(指令语句) strl dB Hellon' aa ends 指示性语句(伪指令语句) bb SEgment 数据段2 ●分段结构 str2 DB 6 dup() bb ENDs 程序按段编写,与8088内存分段编址相对应。 CC SEGMENT;代码段 每段由伪操作 SEGMENT开始、由ENDS结束。 ASSUME CS:c,s:a,ES:b ●程序最后为END结束语句,后跟一启动地址 start: CLD 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 cc ENDS END start;指示程序结束
一、程序结构 ⚫ 程序由数条语句构成,每条语句占一行。 指令性语句(指令语句) 指示性语句(伪指令语句) ⚫ 分段结构 程序按段编写,与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 用二进制显示中断向量表中数据D0H的个数 key EQU0DOH;用符号表示常量(关键字) 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 ;程序入口
程序可由多个段构成,至少有一个代码段 ;汇编语言程序结构例二(子程结构)scans.asm ;用二进制显示中断向量表中数据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 ;指示程序结束和 ;程序入口
、语句结构 「名字]:助记符操作数,…]|;注释l 名字项助记符项操作数项 注释项 例 code SEgMENt ;代码段开始 string DB‘ TSinghua’;定义字符串 next: CMP AL,IBX];查找关键字 display PROC 显示子程序 ey EQU 90H 字符常量
二、语句结构 例 code SEGMENT ;代码段开始 string DB ‘Tsinghua’ ;定义字符串 next : CMP AL,[ BX ] ;查找关键字 display PROC ;显示子程序 key EQU 90H ;字符常量 [名字] [: ] 助记符 [ 操作数, ] [;注释] 名字项 助记符项 操作数项 注释项
名字1:1助记符操作数,…;注释 名字项 助记符项操作数项 注释项 1.名字项 ●据语句功能的不同, 名字项可用来表示段名、变量名、标号、过程名以及常量名等。 ●名字项用一个符号表示 对符号的规定 ①由字符AZ,az,09及符号@、S、下划线_等组成, 最长31个字符,超出部分忽略。 ②不能用数字打头,以免与十六位进制数相混 ③不使用汇编程序中的保留字。(如指令的助记符等) ④对定义的符号不区分大小写
[名字] [: ] 助记符 [ 操作数, ] [;注释] 名字项 助记符项 操作数项 注释项 1. 名字项 ⚫ 据语句功能的不同, 名字项可用来表示段名、变量名、标号、过程名以及常量名等。 ⚫ 名字项用一个符号表示。 对符号的规定: ① 由字符A~Z ,a~z ,0~9及符号@、$、下划线_ 等组成, 最长31个字符,超出部分忽略。 ② 不能用数字打头,以免与十六位进制数相混。 ③ 不使用汇编程序中的保留字。 (如指令的助记符等) ④ 对定义的符号不区分大小写
名字]:助记符[操作数,…1;注释 名字项助记符项操作数项 注释项 2.助记符项 助记符可以是指令、伪操作中的助记符。 对于指令,汇编程序将其翻译成机器语言指令。 MOV AX.100 B80001 对于伪操作,汇编程序据其要求的功能进行处理。 data SEgMent data与一段值对应 string DB‘ Tsinghua'→ string与一内存地址对应
[名字] [: ] 助记符 [ 操作数, ] [;注释] 名字项 助记符项 操作数项 注释项 2. 助记符项 助记符可以是指令、伪操作中的助记符。 对于指令,汇编程序将其翻译成机器语言指令。 MOV AX, 100 → B8 00 01 对于伪操作,汇编程序据其要求的功能进行处理。 data SEGMENT → data与一段值对应 string DB ‘Tsinghua’ → string与一内存地址对应
名字]:助记符[操作数,…1;注释 名字项助记符项操作数项 注释项 3.操作数项 ●操作数给出参与操作的数或数所在的地方。 ●操作数多于一个时,用逗号分开。 ●操作数可以是常数、寄存器、存储器操作数、 标号名、过程名或表达式等
3.操作数项 ⚫ 操作数给出参与操作的数或数所在的地方。 ⚫ 操作数多于一个时,用逗号分开。 ⚫ 操作数可以是常数、寄存器、存储器操作数、 标号名、过程名或表达式等。 [名字] [: ] 助记符 [ 操作数, ] [;注释] 名字项 助记符项 操作数项 注释项