1、4.1 汇编程序功能汇编程序功能4.2 伪操作伪操作4.3 汇编语言程序格式汇编语言程序格式4.4 汇编语言程序的上机过程汇编语言程序的上机过程第第4章章 汇编语言程序格式汇编语言程序格式把一个长度为8的字符串从源缓冲区转送到目的缓冲区中data1 segment source_buffer db personal data1 endsdata2 segment dest_buffer db 8 dup(?)data2 endscode1 segment assume cs:code1,ds:data1,es:data2start:mov ax,data1 mov ds,ax mov ax,d
2、ata2 mov es,ax lea si,source_buffer lea di,dest_buffer cld mov cx,8 rep movsbexit:mov ah,4ch int 21hcode1 ends end start1.汇编程序功能汇编程序功能汇编程序的主要功能:汇编程序的主要功能:检查源程序,给出出错信息。检查源程序,给出出错信息。产生目标文件产生目标文件(.objobj)和和列表文件列表文件(.lstlst)。展开宏指令。展开宏指令。2.程序运行步骤及生成的文件程序运行步骤及生成的文件myfile.asm编辑程序编辑程序汇编程序汇编程序连接程序连接程序myfile.
3、crfotherfiles.objmyfile.lstmyfile.objmyfile.mapmyfile.exe建立建立,运行汇编语言程序过程运行汇编语言程序过程1、编写编写汇编源代码asm文件2、用汇编程序(masm.exe)源代码汇编汇编成目标代码obj文件3、用连接程序(link.exe)将目标程序连接连接成可执行程序exe文件4、执行程序。上机过程:CMASM test1.ASMCLINK test1.OBJCtest1.exe3.伪操作(伪指令)伪操作(伪指令)伪操作是汇编程序对源程序进行汇编时处理的伪操作是汇编程序对源程序进行汇编时处理的操作,完成处理器选择、存储模式定义、数据定
4、义、操作,完成处理器选择、存储模式定义、数据定义、存储器分配、指示程序开始结束等功能。存储器分配、指示程序开始结束等功能。伪指令伪指令是是命令汇编编译器命令汇编编译器执行某种操作的;执行某种操作的;指令指令是是命令命令CPU执行某种操作的。执行某种操作的。(1)段定义伪操作:段定义伪操作:segment和和ends段名段名 SEGMENT ;语句序列段名段名 ENDS格式:格式:例如:data segment data segment ;定义数据段定义数据段 data endsdata ends;-;-extra segment extra segment ;定义附加段定义附加段 extra
5、endsextra ends;-;-code segment code segment ;定义代码段定义代码段 assume assume cs:codecs:code,ds:datads:data,es:extraes:extrastart:start:movmov ax,data ax,data movmov dsds,ax ,ax ;段地址段地址 段寄存器段寄存器 code endscode ends end start end start(2)明确段和段寄存器的关系伪操作:明确段和段寄存器的关系伪操作:assume格式:格式:assume 分配情况1,分配情况2,分配情况1格式为:段寄
6、存器名:段名说明:说明:例如:END 标号标号(3)源程序结束伪操作:源程序结束伪操作:end格式:格式:说明:说明:l end表示结束汇编,因此必须放 在源程序末尾。l“标号”应指向程序起始地址,在主模块中必须指定,在子模 块中可以不指定。例如:(4)数据定义及存储器分配伪操作:)数据定义及存储器分配伪操作:DB、DW变量名变量名 助记符助记符 操作数操作数 ,操作数操作数,助记符:助记符:DB DWDB DWDATA_BYTE DB 10,4,10H,?DATA_WORD DW 100,100H,-5,?-0AH0AH 04H04H 10H10H -64H64H 00H00H 00H00H
7、 01H01H FBHFBH FFHFFH -DATA_BYTE DATA_BYTE DATA_WORD DATA_WORD 例4.7:ARRAY DB HELLO DB AB DW AB 48H48H 45H45H 4CH4CH 4CH4CH 4FH4FH 41H41H 42H42H 42H42H 41H 41H ARRAY ARRAY VAR DB 100 DUP(?)DB 2 DUP(0,1,2,?)例4.8:例4.10:OPER1 DB?,?OPER2 DW?,?MOV OPER1,0 ;字节指令 MOV OPER2,0 ;字指令OPER1 DB 1,2OPER2 DW 1234H,5
8、678H MOV AX,OPER1+1 MOV AL,OPER2 类型不匹配 MOV AX,MOV AX,WORD PTRWORD PTR OPER1+1 OPER1+1 MOV AL,MOV AL,BYTE PTRBYTE PTR OPER2 OPER2(AX)=3402H (AL)=34H(5)表达式赋值伪操作:表达式赋值伪操作:equ和和=表达式名表达式名 EQU 表达式表达式ALPHA EQU 9BETA EQU ALPHA+18BB EQU BP+8 格式:格式:例如:(6)地址计数器与对准伪操作:地址计数器与对准伪操作:地址计数器地址计数器$:保存当前的偏移地址保存当前的偏移地址例
9、如:JNE$+6 ;转向地址是 JNE 的首址+6ARRAY DW 1,2,$+4,3,4,$+4 00H00H 01H 00H 02H 00H 7CH7CH 00H00H 03H 00H 04H 00H 82H82H ARRAY ARRAY 007E007E0078007800740074例4.17:假设ARRAY单元的首偏移地址为0074H4.汇编语言程序格式汇编语言程序格式标号标号 指令指令 寄存器寄存器 说明程序或语句说明程序或语句变量变量 伪指令伪指令 标号标号 的功能的功能 宏指令宏指令 变量变量 常数常数 表达式表达式源程序的每条语句格式:源程序的每条语句格式:名字名字 操作操作
10、 操作数操作数 ;注释注释 标号标号/变量:变量:段值、偏移量、类型三种属性段值、偏移量、类型三种属性 表达式:表达式:数字表达式数字表达式 地址表达式地址表达式举例说明举例说明汇编源程序结构及格式 由若干各段组成,最少要有一个代码段。代码段用来存放指令存放指令,其它段用来存放数据存放数据。每条语句占一行每条语句占一行,一行只能放一条语句,分号表示注分号表示注释释,一行内分号以后的内容为注释,不汇编。源程序以end伪指令结束汇编结束汇编,因此end以后若有程序是没有意义的。源程序以end后的标号地址为源程序起始源程序起始地址。源程序结束时应加上终止程序终止程序返回DOS语句,否则程序不能正常终
11、止。例如例如(1)算术操作符:算术操作符:、ModVIDEO_BUF DB 25*80*2 DUP(?)ARRAY DW 1,2,3,4,5,6,7ARYEND DW?MOV CX,(ARYEND-ARRAY)/2ADD AX,BLOCK+2 ;符号地址常数 有意义 ;时意义不明确MOV AX,BX+1 ;MOV AX,BX+1 ;寄存器间接寻址例例4.1819(2)数值回送操作符:数值回送操作符:OFFSET、SEGOFFSETOFFSET/SEGSEG 变量变量/标号标号功能:回送变量或标号的偏址功能:回送变量或标号的偏址 /段址段址(3)属性操作符:属性操作符:PTR、段、段操作符、操作符、SHORT类型类型 PTR PTR 表达式表达式 MOV WORD PTRPTR BX,5段操作符段操作符 MOV ES:ES:BX,ALSHORT SHORT 标号标号 JMP SHORTSHORT NEXT