03程序设计.ppt_第1页
03程序设计.ppt_第2页
03程序设计.ppt_第3页
03程序设计.ppt_第4页
03程序设计.ppt_第5页
已阅读5页,还剩130页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Copyright 1993-2011, Prof. Ou Qingli,1,Prof. Ou Qingli,Specialty in: Embedded System, Computer Control, Virtual Technology,QQ: 905907992 Tel:Office:804 Email: ,Copyright 1993-2011, Prof. Ou Qingli,2,湖南科技大学本科教育,微机原理与接口技术,PPT2011 参考但不限于朱晓华等编微机原理与接口技术(第2版) (电子工业出版社),面向: 2009

2、级通信工程001002班、电子信息工程001002班,Copyright 1993-2011, Prof. Ou Qingli,3,3 汇编语言程序设计,3.1 机器语言、汇编语言与高级语言 3.2 汇编语言源程序的结构 3.3 数据定义 3.4 汇编语言的运算符 3.5 基本结构程序设计 3.6 操作系统资源的使用 3.7 关于习题,Copyright 1993-2011, Prof. Ou Qingli,4,3.1 机器语言、汇编语言与高级语言,3.1.1 机器语言与汇编语言 3.1.2 汇编语言与高级语言 3.1.3 汇编与连接,Copyright 1993-2011, Prof. Ou

3、 Qingli,5,3.1.1 机器语言与汇编语言,1) 机器语言与汇编语言之关系,汇编语言 源程序,汇编程序,机器语言,可执行指令 和伪指令,DEBUG、 ASM、 MASM,Copyright 1993-2011, Prof. Ou Qingli,6,3.1.1 机器语言与汇编语言,2) 举例 例3-1 在内存中有一个数据快,其首地址为Buffer (3000H:0200H),其中存放16位的符号数20个。现要找出其中的最大值,并将其存入MAX字单元(其偏移地址为0228H)。 借助8088汇编指令我们可以编写出如下程序:,Copyright 1993-2011, Prof. Ou Qin

4、gli,7,3.1.1 机器语言与汇编语言,;exm3-1h find the largest number and store in the max unit mov ax,3000h mov ds,ax mov si,0200h mov cx,14h dec cx mov ax,si chkmax: add si,2 cmp si,ax jle next ;si ax则转next mov ax,si ;大的送ax next: loop chkmax mov 0228h,ax int 20h ;返回dos,Copyright 1993-2011, Prof. Ou Qingli,8,3.1.

5、1 机器语言与汇编语言,汇编以后机器码在内存中的形式 表3.1.1 汇编指令机器码对应表,Copyright 1993-2011, Prof. Ou Qingli,9,3.1.1 机器语言与汇编语言,汇编以后机器码在内存中的形式 表3.1.1 汇编指令机器码对应表(续),Copyright 1993-2011, Prof. Ou Qingli,10,从表3.1.1可以看出,如果我们用机器语言来写程序不是很直观,也是不现实的,特别是对于复杂问题。 PC机有专门的汇编程序(debug中的a命令和宏汇编软件masm.exe),所以人们可以用汇编语言直接编程。,3.1.1 机器语言与汇编语言,Copy

6、right 1993-2011, Prof. Ou Qingli,11,汇编语言:面向机器的语言。每种机器都有它专门的汇编语言,即它不具备通用性和可移植性。 高级语言:是进一步发展了的计算机语言。它们是面向过程的语言,不依赖于机器,有很好的通用性和可移植性,而且具有很高的程序设计效率。 学习汇编语言的理由: (1)是各中系统软件设计的基本语言。 (2)程序执行快,且占用内存少。 (3)许多实时控制系统中,高级语言不完全适合。 (4)补充高级语言在某些特定领域中的功能不足 。 (5) 对于学习计算机硬件组成及工作原理是十分重要。,3.1.2 汇编语言与高级语言,Copyright 1993-20

7、11, Prof. Ou Qingli,12,1) 汇编语言程序上机环境,3.1.3 汇编与连接,Copyright 1993-2011, Prof. Ou Qingli,13,2) 汇编语言程序建立与运行过程概述 (1)用编辑程序建立和修改源程序。 EDIT .ASM 文件 (2)通过汇编变为机器码的目标文件。 MASM .OBJ 文件 (3)通过连结形成可执行文件。 LINK .EXE 文件 (4)用DEBUG调试程序。(此过程不是必须) A DEBUG - N 文件名 EXE - L (5)运行程序,3.1.3 汇编与连接,Copyright 1993-2011, Prof. Ou Qi

8、ngli,14,2) 汇编语言程序建立与运行过程概述 D:EDIT ABC.asm D:MASM ABC; 有语法错,回EDIT下改该程序 D:LINK ABC; 有错,回在EDIT下改程序 D:ABC 运行结果错,回EDIT下改程序 或在DEBUG下调试,找原因。 D:DEBUG ABC.exe,3.1.3 汇编与连接,Copyright 1993-2011, Prof. Ou Qingli,15,4) 汇编语言程序建立与运行方法及举例 (1)用编辑程序建立和修改源程序 EDIT ASM 文件 汇编语言程序文件:Z3.ASM (ASCII、文本) 文本文件编辑软件: OS(DOS、WINDO

9、WS)附件:edit.exe wordstar office(word) WPS TC other,3.1.3 汇编与连接,Copyright 1993-2011, Prof. Ou Qingli,16,4) 汇编语言程序建立与运行方法及举例 (2)通过汇编变为机器码的目标文件 命令: C:masm sample.asm 目标程序: sample.obj (可更名) 列表文件: sample. LST 目标文件一般还不是可执行的程序,在汇编后再用link命令:,3.1.3 汇编与连接,Copyright 1993-2011, Prof. Ou Qingli,17,4) 汇编语言程序建立与运行方

10、法及举例 (3)通过连结形成可执行文件 命令: C:link sample.obj 可执行文件: sample.exe (可更名) exe文件包含一个文件头。称为程序段前缀psp,占256个字节。Psp头两个字节是一条int 20h指令,即返回dos指令。,3.1.3 汇编与连接,Copyright 1993-2011, Prof. Ou Qingli,18,3.2 汇编语言源程序的结构,3.2.0 源程序结构概述 3.2.1 汇编语言语句结构 3.2.2 汇编语言源程序的段定义 3.2.3 汇编语言源程序的过程定义 3.2.4 汇编语言源程序的段寻址 3.2.5 汇编语言源程序的标准程序前奏

11、 3.2.6 汇编结束伪指令END 3.2.7 汇编语言源程序结构,Copyright 1993-2011, Prof. Ou Qingli,19,3.2.0 源程序结构概述,1)汇编语言源程序基本构成: (1) 汇编语言程序由汇编指令构成,即完成某一(多)功能的有序指令集合。 (2) 汇编语言程序由四段构成:CS、SS、DS、ES,其中CS是必须的。 (3) 汇编语言语句由指令+注释+other构成,Copyright 1993-2011, Prof. Ou Qingli,20,3.2.0 源程序结构概述 2) 程序举例,;exm3-1 find the largest number and

12、 store in the max unit data segment org 0200h buffer dw 0,1,-5,10,256,-128,-100,45,6 dw 3,-15,-67,39,4,20,-1668,-32766 dw 32765, -525,300 count equ ($-buffer)/2 max dw ? data ends,Copyright 1993-2011, Prof. Ou Qingli,21,3.2.0 源程序结构概述 2) 程序举例,Stack segment stack stack db 100 dup (s) Stack ends,Copyri

13、ght 1993-2011, Prof. Ou Qingli,22,3.2.0 源程序结构概述 2) 程序举例,Code segment para code assume cs: code, ds: data, ss: stack Sta proc far push ds xor ax, ax push ax mov ax, data mov ds, ax lea si, buffer,Copyright 1993-2011, Prof. Ou Qingli,23,3.2.0 源程序结构概述 2) 程序举例,mov cx, count dec cx mov ax, si Chkmax: add

14、 si, 2 cmp si, ax jle next mov ax, si next: loop chkmax mov max, ax ret sta endp code ends end sta,Copyright 1993-2011, Prof. Ou Qingli,24,3.2.0 源程序结构概述 3) 源程序结构,程序由数条语句构成,每条语句占一行。 指令性语句(指令语句) 指示性语句(伪指令语句) 分段结构 程序按段编写, 与8088内存分段编址相对应。 每段由伪操作SEGMENT开始、由ENDS结束。 程序最后为END结束语句,后跟一启动地址。 启动地址指示程序开始执行的第一条语句

15、。 程序中设有返回DOS的功能。 使程序执行完后返回DOS系统的命令接受状态。 程序中用到内存操作数时, 应按操作数的寻址方式,给相应的段寄存器赋值,Copyright 1993-2011, Prof. Ou Qingli,25,;汇编语言程序结构例一 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 D

16、S , 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 ;指示程序结束,3.2.0 源程序结构概述 3) 源程序结构,Copyright 1993-2011, Prof. Ou Qingli,26,3.2.0 源程序结构概述 3) 源程序结构,汇编语言源程序结构 名称 1 SEGMENT 用变量定义与予置的数据空间 (初始数据、中间数据、结果数据) 名称 1 ENDS 名称 2

17、 SEGMENT 用变量定义予置的堆栈空间 名称 2 ENDS 名称 3 SEGMENT ASSUME CS:名称 3,DS:名称 1,. 程序 SS,DS,ES赋值(MOV),.,(数据段),(堆栈段),(代码段),Copyright 1993-2011, Prof. Ou Qingli,27,3.2.0 源程序结构概述 3) 源程序结构,MOV AH ,4CH INT 21H ;返回 DOS 名称 3 ENDS END 1、任何一个程序至少有一个代码段和一条作为源程序结束的伪指令 END。 2、每个段都以SEGMENT开始,以ENDS结束,若在DOS下运行,还 应在CS段ENDS前加 MO

18、V AH ,4CH INT 21H两条指令。 3、数据段应在代码段前。 4、ASSUME一定在CS开始。 5、注意堆栈不能过小,否则可能导致栈溢出。,(代码段),Copyright 1993-2011, Prof. Ou Qingli,28,3.2.1 汇编语言语句结构,Copyright 1993-2011, Prof. Ou Qingli,29,1) 名字项 据语句功能的不同, 名字项可用来表示段名、变量名、标号、过程名以及常量名等。,data SEGMENT ;数据段 var DB ? data ENDS code SEGMENT ;代码段 ASSUME CS:code,DS:data

19、start: MOV AX, data MOV DS , AX MOV var, CL MOV AH , 4CH INT 21H ;返回DOS code ENDS END start,3.2.1 汇编语言语句结构,Copyright 1993-2011, Prof. Ou Qingli,30,名字项用一个符号表示。 对符号的规定: 由字符AZ ,az ,09及符号、$、下划线_ 等组成, 最长31个字符,超出部分忽略。 不能用数字打头,以免与十六进制数相混。 不使用汇编程序中的保留字。 (如指令的助记符等) 对定义的符号不区分大小写。,3.2.1 汇编语言语句结构,Copyright 1993

20、-2011, Prof. Ou Qingli,31,2) 助记符项 助记符可以是指令、伪操作中的助记符。,对于指令,汇编程序将其翻译成机器语言指令。 MOV AX, 100 B8 00 01,对于伪操作,汇编程序据其要求的功能进行处理。 data SEGMENT data与一段值对应 string DB Tsinghua string与一内存地址对应,3.2.1 汇编语言语句结构,Copyright 1993-2011, Prof. Ou Qingli,32,3)操作数项 操作数给出参与操作的数或数所在的地方。 操作数多于一个时,用逗号分开。 操作数可以是常数、寄存器、存储器操作数、 标号名、

21、过程名或表达式等。,3.2.1 汇编语言语句结构,Copyright 1993-2011, Prof. Ou Qingli,33,3.2.1 汇编语言语句结构,Copyright 1993-2011, Prof. Ou Qingli,34,3.2.1 汇编语言语句结构,Copyright 1993-2011, Prof. Ou Qingli,35,4)注释项 由分号引出,用来说明语句或程序的功能。 汇编程序对分号后的内容不做处理。 作用: 注释程序,增强程序可读性。 注释不应是指令功能的重复。如对于指令“mov cx,25”,“25送入寄存器CX”毫无意义,可能应该写 成“设置循环次数”。 可

22、放在语句最前,暂时注释某语句,调试程序用。 例 ; MOV AH, 2 ;显示提示信息 ; MOV DL, A ; INT 21H,3.2.1 汇编语言语句结构,Copyright 1993-2011, Prof. Ou Qingli,36,3.2.1 汇编语言语句结构,5)说明性语句(伪指令)(可位于任何段) 名字 伪指令助记符 参数,参数;注释 (1)名字 可以是变量名、段名、子程序名或宏名,这些名字既反映逻辑地址,又具有自身的各种属性;对不同的说明性语句,其中的名字具有不同的属性,具体内容在介绍伪指令时介绍。名字也可以是一个常数或一个符号的代号,可称其为“符号名”,这种名字仅仅具有标识的

23、作用。 (2) 名字与标号的区别: 无冒号;可以在任何段定义(严格来说是变量名和符号名)。名字的定义规则与标号相同。两种语句的四部分要用分割符分开,操作数和参数用逗号,其他用空格或制表符。,Copyright 1993-2011, Prof. Ou Qingli,37,3.2.2 汇编语言源程序的段定义,汇编语言程序是按段来组织程序和数据的。 和存储器的物理段相对应,汇编语言程序中的段称为逻辑段。汇编连接后被映射到物理段中。 三类段:代码(程序)、数据、堆栈 段定义伪指令:SEGMENT、ENDS、ASSUME、ORG,Copyright 1993-2011, Prof. Ou Qingli,

24、38,3.2.2 汇编语言源程序的段定义,基本格式: 段名 SEGMENT 定位类型连接类型类别 段名 ENDS 段定义由伪操作SEGMENT开始、ENDS结束。 其中: SEGMENT 和ENDS 必须成对出现, 且语句前必须有段名,段名必须相同。 SEGMENT和ENDS语句之间可以有指令和其他伪操作, 表示存放在该段内存的变量、指令或其他伪操作对该段内存的处理 程序中可以定义多个段。 程序经汇编、连接及装入内存后,段名为一具体的段值。,.,Copyright 1993-2011, Prof. Ou Qingli,39,3.2.2 汇编语言源程序的段定义,SEGMENT可选项: 定位类型连

25、接类型类别 1) 定位类型 说明如何确定逻辑段的边界。有四种: PARA(Paragraph): 逻辑段从一个节 (16个字节) 的边界开始。即段的起始地址应能被16整除, 或这说段起始物理地址应为0H。默认类型 BYTE : 逻辑段从字节边界开始,即段可以从任何地址开始。 WORD : 逻辑段从字边界开始。即段的起始地址必须是偶数。 PAGE : 逻辑段从页边界开始。256字节称为一页,故段的起始物理地址应为00H。,.,Copyright 1993-2011, Prof. Ou Qingli,40,3.2.2 汇编语言源程序的段定义,SEGMENT可选项: 定位类型连接类型类别 2) 组合

26、类型 说明不同模块中同名段的组合方式。 PUBLIC: 所有此类型的同名段组合成一个逻辑段,公用一个段地址,运行时装入同一个物理段中。 COMMON : 所有此类型的同名段具有相同的起始地址(覆盖),共享相同的存储区域。 AT : 按绝对地址定位,段地址就是表达式的值。 STACK : 专用于说明堆栈段,组合方式同PUBLIC,.,Copyright 1993-2011, Prof. Ou Qingli,41,3.2.2 汇编语言源程序的段定义,SEGMENT可选项: 定位类型连接类型类别 3) 类别 用单引号括起来的字符串。所有同类别的段被安排在连续的存储区域中。 如:在模块1中有段定义:

27、seg1 SEGMENT PARA STACK stack seg1 ENDS 在模块2中有段定义: seg2 SEGMENT PARA STACK stack seg2 ENDS 则连接时这两个段被安排在一起。,Copyright 1993-2011, Prof. Ou Qingli,42,3.2.3 汇编语言源程序的过程定义,过程就是子程序。一个过程可以被其它程序所调用(用CALL指令),过程的最后一条指令一般是返回指令(RET)。 过程定义伪指令的格式为 PROC 类型 RET ENDP 注意:PROC和ENDP必须成对出现。,Copyright 1993-2011, Prof. Ou

28、Qingli,43,3.2.3 汇编语言源程序的过程定义,过程的类型有两种: NEAR(默认类型)表示段内调用 FAR表示段间调用 调用一个过程的格式为: CALL ,Copyright 1993-2011, Prof. Ou Qingli,44,3.2.4 汇编语言源程序的段寻址,ASSUME伪指令 在代码段中,还必须明确段和段寄存器的关系,这由ASSUME语句来指定。如 ASSUME CS:code, DS:data, ES:data 语句中的code和data为段名。 这个语句说明: 1. CS将指向名字为code的代码段 2. DS和ES将指向名字为data的数据段,Copyright

29、 1993-2011, Prof. Ou Qingli,45,3.2.4 汇编语言源程序的段寻址,但要注意,ASSUME伪指令只是告知汇编程序有关段寄存器与段的关系,并没有给段寄存器赋予实际的初值。故下面的语句 MOVAX,DATA MOVDS,AX MOVES,AX 将段基址装入段寄存器。如果程序中用到堆栈段,则SS也需装入实际的初值。 代码段基地址不需要程序员装入CS寄存器,而由OS负责装入。,Copyright 1993-2011, Prof. Ou Qingli,46,3.2.5 汇编语言源程序的标准程序前奏,PUSH DS SUB AX,AX ;XOR AX,AX PUSH AX 在

30、程序一开始通过上面三条指令把psp起点地址压入堆栈。 这样当程序执行到最后一条ret指令时,它将从堆栈顶部弹出psp的起点地址cs:ip,使得int 20h指令得以执行,从而把控制权交还给dos。,Copyright 1993-2011, Prof. Ou Qingli,47,3.2.6 汇编结束伪指令END,汇编语言源程序的最后,要加汇编结束伪指令END,以使汇编程序结束汇编。 格式: END 表达式 END后跟的表达式通常就是程序第一条指令的标号,指示程序的启动地址(要执行的第一条指令的地址)。,Copyright 1993-2011, Prof. Ou Qingli,48,3.2.7 汇

31、编语言源程序结构,汇编语言源程序的两种分段结构 EXE程序:包括CS、DS、SS、ES等 COM程序:只有CS,Copyright 1993-2011, Prof. Ou Qingli,49,3.2.7 汇编语言源程序结构,COM程序 代码段、数据段以及堆栈段(附加段)合并成一个段,长度不超过64KB。磁盘上的COM文件是内存的完全映象,不含附加信息。 1)所有段地址都指向PSP的段地址; 2)执行起点:CS:0100 处。 3)SP自动设为0FFFEH(64K的最后一个字单元。且将0FFFEH和0FFFFH单元设为0。,Copyright 1993-2011, Prof. Ou Qingli

32、,50,3.2.7 汇编语言源程序结构,COM程序,CS=DS=ES=SS,Copyright 1993-2011, Prof. Ou Qingli,51,3.2.7 汇编语言源程序结构 COM程序举例,;exm3-1c find the largest number and ; store in the max unit,Copyright 1993-2011, Prof. Ou Qingli,52,3.2.7 汇编语言源程序结构 COM程序举例,Code segment assume cs: code Sta proc far org 0100H Start: jmp init org 0

33、200h buffer dw 0,1,-5,10,256,-128,-100,45,6 dw 3,-15,-67,39,4,20,-1668,-32766 dw 32765, -525,300 count equ ($-buffer)/2 max dw ?,Copyright 1993-2011, Prof. Ou Qingli,53,3.2.7 汇编语言源程序结构 COM程序举例,Init: mov ax,cs mov ds, ax lea si, buffer mov cx, count dec cx mov ax, si,Copyright 1993-2011, Prof. Ou Qin

34、gli,54,3.2.7 汇编语言源程序结构 COM程序举例,Chkmax: add si, 2 cmp si, ax jle next mov ax, si next: loop chkmax mov max, ax ret sta endp code ends end sta,Copyright 1993-2011, Prof. Ou Qingli,55,3.3 数据定义,3.3.1 常量、变量和标号 3.3.2 数据定义或分配数据单元的伪操作语句 3.3.3 等值伪操作语句,Copyright 1993-2011, Prof. Ou Qingli,56,3.3.1 常量、变量和标号,数据

35、项包括常量、变量、标号及表达式。 1)常量 二进制数,以B结尾。如01001101B。 十进制数,如85。 十六进制数,以H结尾。第1个数字为A-F时,前面应加0,如0F160H。 字符串:用引号括起来的1个或多个字符。如ERROR!, a,汇编时被翻译成对应的ASCII码45H,52H,52H,4FH,52H,21H和61H。,Copyright 1993-2011, Prof. Ou Qingli,57,3.3.1 常量、变量和标号,2)变量 变量即内存中的存储单元或数据区。 变量名是存储单元(数据区)的符号地 址或名字。 变量也有三个属性: 段地址变量所在段的段地址 偏移量变量单元地址与

36、段首地址之间的位移量。 类 型有BYTE、WORD和DWORD三种。 变量在程序中作为存储器操作数被引用。,Copyright 1993-2011, Prof. Ou Qingli,58,3.3.1 常量、变量和标号,3)标号 指令所在内存单元的符号地址 有三个属性: 段地址:即标号所在段的段地址; 偏移量:标号所代表存储单元的段内偏移地址; 类 型:NEAR或FAR: NEAR表示标号所在语句与转移指令/ 调用指令在同一码段内,跳转时 只需改变IP即可。 FAR标号所在语句与转移指令/调用 指令不在同一代码段内。 若没有对类型进行说明,默认为NEAR。 标号通常作为转移指令或CALL指令的转

37、移地址。,Copyright 1993-2011, Prof. Ou Qingli,59,3.3.1 常量、变量和标号,4)标号和变量名的使用规则 组成:A-Z(不分大小写), 0-9, ? . _ $ 不能以数字开头,句号(.)只能作为首字符 长度小于31个字符 不能与保留字(指令助记符、伪指令、预定义符号等)重名 不能重复定义 例如: 正确的:LP1, AGAIN, NEXT, _GO, OK_1 错误的:4M, LOOP, AAA, #HELP, +ONE,Copyright 1993-2011, Prof. Ou Qingli,60,3.3.1 常量、变量和标号,5) 表达式 表达式是

38、常数、寄存器、标号、变量与运算符的组合。 有数字表达式和地址表达式两种。 汇编时按优先规则对表达式进行计算,计算出具体的数值或地址。运行时不能改变。 表达式中的运算符有6类:算术、逻辑、关系、取地址、属性、杂类。,Copyright 1993-2011, Prof. Ou Qingli,61,3.3.2 数据定义或分配数据单元的伪操作语句,用于定义变量,即内存单元或数据区。数据定义伪指令的格式为: 变量名 数据定义伪指令 操作数,操作数, 常用的数据定义伪指令有如下几种: DB 定义字节 DW 定义字 DD 定义双字 操作数可以是常数、变量或表达式,Copyright 1993-2011, P

39、rof. Ou Qingli,62,3.3.2 数据定义或分配数据单元的伪操作语句,例1: DATA_B DB 10,5,10H DATA_W DW 100H,-4 DATA_D DD 0FFFBH 汇编后的内存分配情况 如右图所示。,05H,10H,00H,01H,FCH,FFH,FBH,FFH,00H,00H,0AH,DATA_B,DATA_W,DATA_D,10,5,10H,100H,-4,0FFFBH,Copyright 1993-2011, Prof. Ou Qingli,63,3.3.2 数据定义或分配数据单元的伪操作语句,例2:操作数可以是字符串,例如 STR DBHELLO 汇

40、编后的情况如图: 注意下面两个定义的不同之处: DBAB ;41H在低字节, ;42H在高字节 DW AB ;42H在低字节, ;41H在高字节,STR,H,E,L,L,O,48H,45H,4CH,4CH,4FH,Copyright 1993-2011, Prof. Ou Qingli,64,3.3.2 数据定义或分配数据单元的伪操作语句,例: TABLE DB 10 DUP(?) BUFFER DW TABLE,$+3 设TABLE的偏移地址为0080H,则汇编后如下图所示:,BUFFER,0080H,80H,TABLE,008AH 008BH 008CH 008DH,. . .,8FH,0

41、0H,00H,0089H,10 Bytes,Copyright 1993-2011, Prof. Ou Qingli,65,3.3.2 数据定义或分配数据单元的伪操作语句,操作数?用来保留存储空间,但不存入数据. 例3:ABC DB 0,1,2,3,4,OK,$ RSV DW ?,?,?,?,?,?,?,? 复制操作符DUP: 重复的数据可以使用复制操作符DUP,如上面RSV亦可写成: RSV DW 8 DUP(?) 若操作数中若使用$,则表示的是地址计数器的当前值。,Copyright 1993-2011, Prof. Ou Qingli,66,3.3.3 等值伪操作语句,即:符号定义伪指令

42、 把一个表达式用一个符号表示,以后凡出现该表达式的地方都可用这个符号表示。类似于C语言中的#define。 符号定义伪指令有两种:EQU,= 用EQU定义的符号未清除前,不能重新定义。清除EQU定义可用PURGE伪指令。 用”=”定义的符号可在任何时候进行重定义。 二者均不占用存储空间,仅是给符号赋值。,Copyright 1993-2011, Prof. Ou Qingli,67,3.3.3 等值伪操作语句,例:FIVE EQU 5 COUNT EQU CX TEN EQU 10 DIST = BYTE PTRSI+BP GOTO = JMP MOV AX, TEN MOV CX, COUN

43、T ADD DIST, FIVE DIST = WORD PTRSI+BP+1 ADD DIST, AX GOTO LABEL,定义,引用,Copyright 1993-2011, Prof. Ou Qingli,68,3.4 汇编语言的运算符,3.4.1 算术运算符 3.4.2 逻辑运算符 3.4.3 关系运算符 3.4.4 取值(值返回)运算符 3.4.5 属性运算符,Copyright 1993-2011, Prof. Ou Qingli,69,3.4.1 算术运算符,算术运算符 +、-、*、/,MOD 用于数字表达式,例: MOV AX,4*1024 汇编后的形式为: MOV AX,4

44、096 用于地址表达式,例: LEA SI,TAB+3 若TAB的偏移地址为1000H,则汇编后的形式为: LEA SI,1003H,Copyright 1993-2011, Prof. Ou Qingli,70,3.4.2 逻辑运算符,逻辑运算符 AND、OR、XOR、NOT 逻辑运算符只能用于数字表达式中。 例:MOVCL,36H AND 0FH 经汇编后:MOV CL,06H 注意,不要把逻辑运算符与逻辑运算指令混淆: 例:AND AX, 3FC0H AND 0FF00H 汇编后源操作数被翻译为:3F00H,所以上述指令与AND AX, 3F00H等价。,Copyright 1993-2

45、011, Prof. Ou Qingli,71,3.4.3 关系运算符,关系运算符EQ、NE、LT、GT、LE、GE 关系运算的结果是一个逻辑值:真或假 关系为真,结果为全1 关系为假,结果为全0 例:MOV BX,PORT GT 300H 若PORT的值大于300H,则汇编后为: MOV BX,0FFFFH 否则汇编后为: MOV BX,0,Copyright 1993-2011, Prof. Ou Qingli,72,3.4.4 取值(值返回)运算符,1)取当前地址运算符$ 返回汇编器当前地址计数器的值。,Copyright 1993-2011, Prof. Ou Qingli,73,3.

46、4.4 取地址运算符,2)取地址运算符SEG、OFFSET SEG:取变量/标号的段地址 OFFSET:取变量/标号的偏移地址 例:VAR DB 12H MOV BX,OFFSET VAR ;取变量VAR的偏移地址 MOV AX,SEG VAR ;取变量VAR的段地址,Copyright 1993-2011, Prof. Ou Qingli,74,3.4.4 取地址运算符,2)取地址运算符SEG、OFFSET 注意,以下指令的异同: MOV BX, OFFSET VAR LEA BX, VAR OFFSET只能取静态的偏移地址; LEA指令可取静态的偏移地址,也可取动态的偏移地址,Copyri

47、ght 1993-2011, Prof. Ou Qingli,75,3.4.4 取值(值返回)运算符,3)取值运算符TYPE、LENGTH、SIZE TYPE 取变量的类型(1,2,4) LENGTH 取所定义变量的长度 (即变量中元素的个数) SIZE 取所定义存储区的字节数 (=TYPE*LENGTH) 例:VAR DW 1,2,3,4,5 则 TYPE VAR = 2 LENGTH VAR = 5 SIZE VAR = 10,Copyright 1993-2011, Prof. Ou Qingli,76,3.4.4 取值(值返回)运算符,4)取值运算符HIGH、LOW HIGH和LOW分

48、别返回一个16位表达式的高字节和低字节。 例: NUM EQU 0CDEFH MOV AH,HIGH NUM ;(AH)=CDH MOV AL,LOW NUM ;(AL)=EFH,Copyright 1993-2011, Prof. Ou Qingli,77,3.4.5 属性运算符,1)属性运算符PTR 用来指定地址操作数的类型。 格式: PTR 类型BYTE, WORD, DWORD, NEAR, FAR BYTE、WORD、DWORD 用于描述数据存储单元(变量)地址 NEAR、FAR 用于描述转移、调用的目的地址,Copyright 1993-2011, Prof. Ou Qingli,

49、78,3.4.5 属性运算符,例:MOVBYTE PTRDI,0 ;字节类型 MOVWORD PTRDI,0 ;字类型 MOVDI,0B5H ;类型不定 PTR也可用来进行强制类型转换 例:STR1 DW ? ;STR1定义为字类型 MOVAX,STR1 ;合法 MOVAL,STR1 ;非法 MOV AL,BYTE PTR STR1 ;合法,Copyright 1993-2011, Prof. Ou Qingli,79,3.4.5 属性运算符,2)LABEL伪指令 名字 LABEL 类型 3)THIS运算符 给当前偏移地址指定一种类型属性,同时定义了一个名字。 名字 EQU THIS 类型 4

50、)SHORT 设定标号为短转移,只用于JMP指令。转移范围为-128+127字节(相对于JMP的下一条指令)。,Copyright 1993-2011, Prof. Ou Qingli,80,3.4.5 属性运算符,2)LABEL伪指令 名字 LABEL 类型 3)THIS运算符 给当前偏移地址指定一种类型属性,同时定义了一个名字。 名字 EQU THIS 类型 4)SHORT 设定标号为短转移,只用于JMP指令。转移范围为-128+127字节(相对于JMP的下一条指令)。,Copyright 1993-2011, Prof. Ou Qingli,81,3.5 基本结构程序设计,3.5.0 程

51、序的基本结构 3.5.1 程序的顺序结构 3.5.2 程序的分支结构 3.5.3 程序的循环结构 3.5.4 程序的子程序结构,Copyright 1993-2011, Prof. Ou Qingli,82,3.5.0 程序的基本结构,基本程序结构: 顺序结构 循环结构 分支结构 子程序结构 复合结构:多种程序结构的组合,Copyright 1993-2011, Prof. Ou Qingli,83,3.5.1 程序的顺序结构,顺序结构: 特点:按语句顺序逐步执行。 无分支、循环和转移 例:略 参见P86,Copyright 1993-2011, Prof. Ou Qingli,84,3.5.

52、2 程序的分支结构,(1)两路分支结构 (2)多路分支结构,A,B,A,B,X,Copyright 1993-2011, Prof. Ou Qingli,85,3.5.2 程序的分支结构,(1)逻辑尺控制 (2)条件控制 (3)地址跳跃表 TABLE DW ONE, TWO, THREE JMP TABLESI 1000 ONE: 2000 TWO: 3000 THREE: ,。,Copyright 1993-2011, Prof. Ou Qingli,86,3.5.3 程序的循环结构,循环结构:,Copyright 1993-2011, Prof. Ou Qingli,87,3.5.3 程序

53、的循环结构,循环结构程序: 再读:3.2.0 源程序结构概述 2) 程序举例(例3-1扩展),Copyright 1993-2011, Prof. Ou Qingli,88,3.5.4 程序的子程序结构,1)过程(子程序)定义伪操作 procedure_name PROC NEAR ( FAR ) procedure_name ENDP (1)NEAR属性:调用程序和子程序在同一代码段中 (段内调用) (2)FAR属性:调用程序和子程序不在同一代码段中 (段间调用),Copyright 1993-2011, Prof. Ou Qingli,89,3.5.4 程序的子程序结构,2)保存与恢复寄存

54、器 subt proc far push ax push bx push cx push dx . pop dx pop cx pop bx pop ax ret subt endp,Copyright 1993-2011, Prof. Ou Qingli,90,3.5.4 程序的子程序结构,3)子程序的调用和返回 子程序调用(中断调用):隐含使用堆栈保存返回地址 call near ptr subp (1) 保存返回地址 (2) 转子程序 (IP) subp的偏移地址 call far ptr subp (1) 保存返回地址 (2) 转子程序 (CS) subp的段地址 (IP) subp的

55、偏移地址,Copyright 1993-2011, Prof. Ou Qingli,91,3.5.4 程序的子程序结构,4) INT n (n : 中断类型号) (1) 保存现场和返回地址(FLAGS,CS,IP入栈) (2) 转中断处理程序 (IP) (n*4) (CS) (n*4+2) 5)子程序返回: (1)ret (返回地址出栈) (2)iret (IP,CS,FLAGS出栈),int 21H,Copyright 1993-2011, Prof. Ou Qingli,92,3.5.4 程序的子程序结构,6)子程序的参数传送 (1)通过寄存器传送参数 (2)通过存储区传送参数 *子程序和

56、调用程序在同一程序模块中,则子程序可直接访问模块中的变量。 *子程序和调用程序不在同一程序模块中,则有两种传送方式:建立公共数据区和使用外部符号。 (3)通过地址表传送参数地址 (4)通过堆栈传送参数或参数地址,Copyright 1993-2011, Prof. Ou Qingli,93,3.6 操作系统(OS)资源的使用,3.6.0 操作系统资源及调用概述 3.6.1 字符输入输出DOS功能调用 3.6.2 磁盘文件管理DOS功能调用 3.6.3 结束用户程序返回DOS的方法,Copyright 1993-2011, Prof. Ou Qingli,94,3.6.0 操作系统资源及调用概述

57、,1) 操作系统 MS - DOS 的结构,用户,用户程序,命令处理模块,磁盘管理模块,基本输入输出模块,软件中断和,系统调用,键盘命令,COMMAND.COM,IBM DOS.COM,IBM BIO.COM ROM BIOS,Copyright 1993-2011, Prof. Ou Qingli,95,3.6.0 操作系统资源及调用概述,1) 操作系统 MS - DOS 的结构,Copyright 1993-2011, Prof. Ou Qingli,96,3.6.0 操作系统资源及调用概述,1) 操作系统 MS - DOS 的结构 BIOS和DOS中断子程层次特点: ROM BIOS中的中断子程 使用IN/OUT指令直接控制外设, 实现与外设之间的输入/输出操作, 以软件形式向其上层提供服务。 IO.SYS中的中断子程 ( 称基本输入/输出BIOS模块) 调用ROM

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论