汇编语言第4章汇编语言程序格式.ppt
IBM-PC汇编语言程序设计第4章 汇编语言程序格式4.1 汇编程序功能 编辑TCTC产生.ASM.ASM文件宏汇编MASM产生.OBJ文件连接LINK产生.EXE调试DEBUG.EXEDOS下运行.EXE错错错4.2 伪指令一、处理器选择伪操作 二、段定义格式:段名 SEGMENT 定位类型 组合类型 类别 段名 ENDS1.定位类型(align _type):告诉连接程序,前段放完后,后一段将从什么起始地址边界存放。PAGE(页):表示此段物理地址起始地址后8位为0 即 0000 0000PARA(节):表示此段物理地址起始地址后4位为0 即 0000DWORD(字):表示此段必须从双字的边界开始 即 00WORD(字):表示此段必须从字的边界开始 即 0BYTE(字节):表示此段可以从任何地址开始 即 *省略定位类型,即为PARA2.组合类型(combine _type):告诉连接程序,本段与其它段的关系。PRIVATE:本段与其它段在逻辑上不发生关系,每段有自 己的基地址:隐含的组合类型。PUBLIC:把本段与同名同类的其它段相邻地连在一 起,给定一个共同段基地址,大小不超过64K。STACK:把本段与同名同类的其它段相邻地连在一 起,指定该段在运行时为堆栈的一部分。无间 隙。COMMON:连接程序为本段与其它同名同类段指定相同 的基地址,产生覆盖存贮。AT 表达式表达式:连接程序把本段装在表达式的值所指定的段地 址上,它不能指定代码段。MEMORY:连接程序将把本段定位在被连接一起的其它所 有段之上。3.类别(“class”):为单引号括起来的字符串,一般为:CODE,DATA,EXTRA,STACK功能:按类别名相同的段(段名不一定相同)组织 起来存放在连接的存贮区中。例:模块1 :A SEGMENT PARA PUBLIC SA SEGMENT PARA PUBLIC S A1 DB 55H DUP(0)A1 DB 55H DUP(0)A ENDSA ENDSB SEGMENT PARA COMMON S1B SEGMENT PARA COMMON S1 B1 DB 202H DUP(0)B1 DB 202H DUP(0)B ENDSB ENDS模块2 :A SEGMENT PARA PUBLIC SA SEGMENT PARA PUBLIC S A2 DB 103H DUP(0FFH)A2 DB 103H DUP(0FFH)A ENDSA ENDSB SEGMENT PARA COMMON S1B SEGMENT PARA COMMON S1 B2 DB 104H DUP(0)B2 DB 104H DUP(0)B ENDSB ENDS0000H:0000H 000000H:0000H 00 :0000H:0054H 000000H:0054H 00 空11个字 节单元0000H:0060H 0FFH0000H:0060H 0FFH :0000H:0162H 0FFH0000H:0162H 0FFH 空13个字 节单元0017H:0000H 000017H:0000H 00 :0017H:0201H 000017H:0201H 00 :A段B段B1B1和B2B2公共存贮区(覆盖存放)例:模块1 :A SEGMENT PARA SA SEGMENT PARA S A1 DB 55H DUP(0)A1 DB 55H DUP(0)A ENDSA ENDSB SEGMENT PARA COMMON S1B SEGMENT PARA COMMON S1 B1 DB 202H DUP(0)B1 DB 202H DUP(0)B ENDSB ENDS模块2 :C C SEGMENT PARA SSEGMENT PARA S A2 DB 103H DUP(0FFH)A2 DB 103H DUP(0FFH)C ENDSC ENDSB SEGMENT PARA COMMON S1B SEGMENT PARA COMMON S1 B2 DB 104H DUP(0)B2 DB 104H DUP(0)B ENDSB ENDS0000H:0000H 000000H:0000H 00 :0000H:0054H 000000H:0054H 00 空11个字 节单元0006H:0000H 0FFH0006H:0000H 0FFH :0006H:0102H 0FFH0006H:0102H 0FFH 空13个字 节单元0017H:0000H 000017H:0000H 00 :0017H:0201H 000017H:0201H 00 :A段B段B1B1和B2B2公共存贮区(覆盖存放)C段三、程序的开始和结束。四、数据定义五、赋值伪操作EQU和=1.等价伪指令 格式:符号名 EQU exp 用途:给符号名定义一个值、别的符号名、一条可执行命 令等。例如:PORT EQU 256 BUF EQU PORT+22.等号伪指令 格式:符号名exp 如:EMP=6 EMP=9*等号伪指令可以给已定义符号名重新定义值,而等价伪指令不能对符号名重新定义值。*不为已定义的符号名分配存贮单元。六、地址计数器与对准为操作1.地址计数器伪指令:$例:JZ$+8 VAR DW 1,2,$+7,3,$+42.ORG伪指令格式:ORG 数值表达式3.EVEN 偶地址4.Align 格式:Align 2n七、基数控制伪操作 RADIX EXP VAR 0054H 01VAR 0054H 01 0055H 00 0055H 00 0056H 02 0056H 02 0057H 00 0057H 00 0058H 5F 0058H 5F 0059H 00 0059H 00 005AH 03 005AH 03 005BH 00 005BH 00 005CH 60 005CH 60 005DH 00005DH 00设某数据段:DATA SEGMENT ORG 20H NUM1=8 NUM2=NUM1+10H DA1 DB COMPUTER DB 0AH,0DH COUNT EQU$-DA1 DA2 DW CO,MP,UT,ERDATA ENDS试回答:(1)DA1的偏移地址是()(2)COUNT的值是()(3)DA2+5字节单元的内容是()4.3 汇编语言程序格式格式:名字项 操作项 操作数,操作数 ;注释一、名字项(name)1.标号:机器指令语句存放地址的符号表示,也可表示过程名。用于转移指令和CALL语句的操作数项。标号有三种属性:段属性:指定义该标号所在段的段首址。偏移地址属性:它表示段起始地址到定义符号的位置之间的字节数。类型属性:制定符号在本段使用,还是在其它段中使用:NEAR:本段使用 FAR:段外使用2.变量:数据存放地址的符号表示 变量有三种属性:段属性:变量所在段的段首址 偏移地址属性:段首址到变量处的字节个数 类型属性:字节或字等类型,由类型定义伪指令定义。DB:字节类型1个字节 DW:字类型2个字节 DD:双字节类型4个字节 DQ:四字类型8个字节 DT:十字节类型1个数据占10个字节二、操作项(operation)三、操作数项(operand)组成:常数、寄存器、标号、变量或表达式表达式:由常数、变量、标号通过操作运算符连接而成的。1.算术运算符(arithmetic operator):,/,MOD用于:数据和地址表达式 例:var1 dd 1,7,8,6,9 var2 dw?mov ax,var1+(5-1)*4 mov cx,(var2-var1)/42.移位和逻辑操作符移位运算符:SHR(右移),SHL(左移)逻辑运算符:AND(与),OR(或),XOR(异或),NOT(非)用于:数值和地址表达式中。例:AND DX,789AH AND 0FH(立即数)MOV AL,A SHR 3 (立即数)若A=11111111B,则:表达式:A SHR 3,结果为00011111B AL3.关系运算符(conditional operator):EQ,NE,LT,GT,LE,GE结果:真值为0FFFFH(全“1”),假值为0(全“0”)用于:数值和地址表达式中。例:MOV BX,3 LT 5 ;(BX)=0FFFFH MOV BX,(PORT LT 5)AND 20)OR(PORT GE 5)AND 30)即 PORT5,MOV BX,20 PORT5,MOV BX,304.数值回送(value _returning operator)(1)TYPE格式:TYPE 变量或标号功能:若是变量,回送该变量以字节数表示的类型DB为1,DW为2,DD为4,DQ为8,DT为10。若是标号,回送代表该标号类型的数值NEAR为0FFFFH(-1),FAR为0FFFEH(-2)。例:VAR1 DW 1,2 MOV AX,TYPE VAR1 2(2)LENGTH:取存贮单元个数算符格式:LENGTH 变量(3)SIZE:取存贮区大小算符 格式:SIZE 变量SIZE=LENGTH*TYPE(4)SEG:取段首址算符格式:SEG 变量或标号(5)OFFSET:取偏移地址算符格式:OFFSET 变量或标号例:DAT SEGMENTDAT SEGMENT A DW 50,100,70H A DW 50,100,70H B DB ABCDEF,5 DUP(0)B DB ABCDEF,5 DUP(0)C DW B C DW B D DD 50 DUP D DD 50 DUP(?)(?)DAT ENDSDAT ENDS :MOV AX,SEG B ;DAT MOV AX,SEG B ;DATAXAX MOV BX,OFFSET B ;6 MOV BX,OFFSET B ;6 BX BX MOV CX,TYPE B ;MOV CX,TYPE B ;1 CXCX MOV AX,A+2 ;(A+2)=100 MOV AX,A+2 ;(A+2)=100 AX,AX,MOV DXMOV DX,LENGTH D LENGTH D;50 50 DX DX MOV SI MOV SI,SIZE D SIZE D ;200 200 SI SI :例:MOV SI,OFFSET VAR LEA DI,VAR MOV BX,DI LEA BX,DI MOV BX,OFFSET DI(错)(错)5.属性操作符(attribute operator)(1)PTR格式:类型 PTR 地址表达式其中:类型为 BYTE 字节 WORD 字 DWORD 双字 NEAR 段内 FAR 段(2)THIS格式:THIS 类型类型同PTR改变类型的方法:LABEL格式:名字 LABEL 类型 LABEL通常要与指令语句或用DB、DW、DD伪指令的数据定义语句连用。例:BYTE_VAR LABEL BYTE WORD_VAR DW 1,2,3,4PTR与EQU例:VAR DW 1234H BYTE_VAR EQU BYTE PRT VAR WORD_VAR EQU BYTE PTR VAR+1PTR例:MOV AL,BYTE PTR VAR THIS与EQU例:BYTE_ table EQU THIS BYTE WORD_table DW 1,2,3,4(3)段操作符(4)short(5)字节分离运算符:HIGH和LOW格式:HIGH 常量或地址表达式 LOW 常量或地址表达式功能:HIGH 用来分离出16位常量或地址表达式的偏移量的高字节;LOW用来分离出16位常量或地址表达式偏移量的低字节。6.算符优先级:括号(圆括号,方括号,尖括号),SIZE,LENGTH :PTR OFFSET,SEG,TYPE,THIS HIGH,LOW *,/,MOD,SHL,SHR +,-EQ,NE,LT,LE,GT,GE NOT AND OR,XOR SHORT高低四、注释项本章小结:重点掌握汇编语言的伪指令;汇编语言的格式,以及表达式的灵活应用。