伪指令及汇编语言源程序结构
复习提问:1、 XCHG和 XLAT 指令的区别。 2、ADD和ADC指令的区别。 3、请说出以下指令中源操作数的寻址方式。 1. MOV AL,[ 2000H ] 2. MOV AL,[ SI ] 3. MOV AL,[ BX+3 ] 4. MOV AL,[ SI +3 ] 5. MOV AL,[ BX+SI ] 6. MOV AL,[ BX+SI+3] 4、LEA BX,X 和 MOV BX,X的区别。 5、DAA和AAA指令什么时候使用? 6、ROL和RCL指令的区别。 8、AND 、OR、 XOR三条指令主要用在哪些场合?
伪指令及汇编语言源程序结构
第4章 伪指令及汇编语言源程序结构4.1 汇编程序结构4.2 汇编语言语句格式 4.3 伪指令语句 4.4 标号、变量和表达式 4.5 段的组织 4.6 程序段前缀
伪指令及汇编语言源程序结构
4.1 汇编程序结构1、可编程的寄存器组 (前已讲) 2、语法规则和语法要素 1)字符集: (1)字母 26个英文大小写字母; (2)数字 0~9; (3)特殊字符+ - × / ( ) [ ] < > ; ’ 。 ” _ : ? @ $ & 等 (4)定界符,空格符,制表符,回车符,换行符 2)标识符:用来定义段、变量、标号和常量等项目的名字。 (1)开头字符用字母或?,@,_。 (2)其余的字符可以是字母,数字或上面3个特殊字符,中 间不能有分隔符。 (3)标号和符号名都可由不超过 31 个的字符串组成。 (4)一个程序模块内的每一个标识符只代表一个项。
伪指令及汇编语言源程序结构
名字项不允许用汇编语言中有特定意义的关键字、保 留字,如指令助记符、伪指令、寄存器名和运算符, 如:MOV、ADD、DB、SEGMENT、EQ、OFFSET、 PTR、DUP都不能用作标号或符号名。 正确名字项: SBUF @123 LOOP1 错误的: DD 3MNK 0FFFFH
JNZATHIS_STREET
FIRST$123MOV-PREGAM
伪指令及汇编语言源程序结构
3)关键字和保留字:系统自已预定义的标识符。 关键字:指令助记符 例 :MOV 、ADD、 LOOP、 INT 保留字:伪指令或其他功能符号 例:DB、OFFSET、DUP、REP 4)语言符号和分隔符 语言符号:一条语句结束用换行符 定界符为 ,和 ; 标识符(用户自定义) 常量 关键字和保留字 分隔符: 空格
伪指令及汇编语言源程序结构
4.1.2 源程序框架结构一个以MASM为基础的汇编语言源程序的结构形式如下 例所示: NAME MAIN_PROGMODUL DATA SEGMENT ;定义数据段 ….. DATA ENDS STACK1 SEGMENT PARA STACK ' STACK' ; 定义堆栈段 …….. STACK1 ENDS CODE SEGMENT ;定义代码段 ASSUME CS∶CODE,SS∶STACK1,DS∶DATA,ES∶DATA START:MOV AX,DATA ; MOV DS,AX ;置DS和ES初值 MOV ES,AX …… MOV AH,4CH ;返回操作系统 INT 21H CODE ENDS END START
伪指令及汇编语言源程序结构
例4.2在屏幕上显示一行字符:“This is My First Program” 程序: NAME SIMPLE_EXAMPLEFIRST_DATA SEGMENT STRING_DA DB 'This is My First Program $';要显示的字符串 FIRST_DATA ENDS FIRST_STACK SEGMENT PARA STACK ' STACK' DB 100 DUP(?) FIRST_STACK END FIRST_CODE SEGMENTASSUME DS∶FIRST_DATA,SS∶FIRST_STACK,CS∶FIRST_CODE
START:MOV AX,FIRST_DATA MOV DS,AX ;装数据段地址 MOV DX,OFFSET STRING_DA MOV AH,09H ;显示字符
串 INT 21H ;DOS 9号功能调用 MOV AH,4CH ;返回DOS INT 21H FIRST_CODE ENDS END START
伪指令及汇编语言源程序结构
源程序结构中的每行语句的用法及含义是:1) NAME MAIN_PROGMODULE NAME是保留字,用于定义程序模块的名称, MAIN_MODULE是程序名称,用户可用任意一个标识符为程 序命名。
2) DATA SEGMENT (数据定义伪指令序列) DATA ENDSDATA是程序员命名的数据段名称。SEGMENT和ENDS是 保留字,SEGMENT与ENDS配对使用,ENDS前的DATA应与 SEGMENT取的DATA一致。其功能是定义每个段。 …
伪指令及汇编语言源程序结构
3) STACK SEGMENT (数据定义伪指令序列) STACK ENDS STACK是程序员命名的堆栈段名称。其功能是使用伪指令语 句定义堆栈段。 4) CODE SEGMENTASSUME CS:CODE,SS:STACK,DS:DATA,ES:DATA
…… CODE ENDS CODE是程序员命名的代码段名称,SEGMENT在这里定义 一个代码段。 5) ASSUME CS∶CODE,SS∶STACK,DS∶DATA,ES∶DATA ASSUME是保留字,指示段寄存器对应前面定义的哪个段。 CS∶CODE,SS∶STACK,DS∶DATA,ES∶DATA分别指出 CS、SS、DS和ES寄存器与CODE、STACK、DATA段对应。 …
…
伪指令及汇编语言源程序结构
6) START START是程序员定义的程序入口处的标号名。用冒号“:”说 明START是一个标号。 7) 程序部分 START:MOV AX,DATA MOV DS,AX MOV ES,AX (用户编写的程序段) MOV AH,4CH INT 21H 这里是程序员编写的程序。 8) CODE ENDS 这条语句指出所定义的CODE代码段到此结束。 9) END START END是保留字,指示整个程序模块到此结束。 …
伪指令及汇编语言源程序结构
汇编语言是以逻辑段为基础,按段的概念来组织
代码和数据。每个逻辑段由语句序列组成,各语句可 以是: 1) 指令语句——完成一定操作功能,能够翻
译成机器代码的语句,即为第3章介绍的指令所形成 的语句。指令语句对应于CPU指令系统中的一条指令, 因此为可执行语句。汇编时汇编成目标码。
伪指令及汇编语言源程序结构
2) 伪指令语句——CPU不执行的语句,只是为汇编程序在翻 译汇编语言源程序时提供有关信息,并不翻译成机器代码的语
句。因此,伪指令语句是协助汇编系统实现某种特定的操作,决定程序的数据段、堆栈段和代码段的组织。伪指令语句本身 并不完成任何机器指令的功能,但对汇编系统生成的所有操作 码是要产生影响的。如:在某程序中: 其功能是在内存中设置3个 BUFFERA DB 35H 存储单元,单元的名字分别 是:BUFFERA、 BUFFERB DW 123AH BUFFERB和SUM。 BUFFERA、BUFFERB的 SUM DD ? 初值是35H和123AH,而 SUM单元未定义初值。
伪指令及汇编语言源程序结构
3) 宏指令语句——由若干条指令语句形成的语句。一条宏指令 语句的功能相当于若干条指令语句的功能。宏指令语句实际上
是一个指令序列,汇编时产生对应的目标代码序列。4) 注释语句——以分号“ ;”开始的说明性语句,汇编程 序不予以处理,只起注释作
用,使程序易于理解。 5) 空行语句——为保持程序书写清晰,仅包含回车换行符的 语句行。
伪指令及汇编语言源程序结构
8086/8088只允许同时使用4个段,即堆栈段 (SS)、数据段(DS)、附加段(ES)和代码段(CS) 各一个;80486允许同时使用6个段,即除以上 4个段外,还可有FS和GS两个附加数据段。在 8086和实地址方式下,每个段的大小可以是 1~64 KB;而在保护方式下,80486允许4 GB。
源程序中,除代码段CS(有时还有堆栈段SS)外, 其他所有定义的段寄存器的初值都要在程序代 码段的起始处由用户自己设置
伪指令及汇编语言源程序结构
返回DOS的四种方法:① 采用DOS 4CH号功能调用。这种方法在代码段结束前加调用语句:
MOV AH,4CHINT 21H
;功能号4CH→AH;中断调用
这种方法在前面的源程序结构中我们已使用过。这是返回DOS最有效且兼容性最好的一种方法。
伪指令及汇编语言源程序结构
② 将主程序定义为远过程。这种方法在代码段开始处按例43所述方式定义主程序: 例4-3SEGMENT … ASSUME … 主过程名 PROC FAR PUSH DS MOV AX,0 PUSH AX CODE … RET 主过程名 ENDP END 主过程名 一般也将这种方法称为“标准序”方法。 … …