《汇编语言第4章 汇编语言程序格式》由会员分享,可在线阅读,更多相关《汇编语言第4章 汇编语言程序格式(25页珍藏版)》请在金锄头文库上搜索。
1、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(字):表示此段必须从双字的
2、边界开始 即 00WORD(字):表示此段必须从字的边界开始 即 0BYTE(字节):表示此段可以从任何地址开始 即 *省略定位类型,即为PARA2.组合类型(combine _type):告诉连接程序,本段与其它段的关系。PRIVATE:本段与其它段在逻辑上不发生关系,每段有自 己的基地址:隐含的组合类型。PUBLIC: 把本段与同名同类的其它段相邻地连在一 起,给定一个共同段基地址,大小不超过64K。STACK: 把本段与同名同类的其它段相邻地连在一 起,指定该段在运行时为堆栈的一部分。无间 隙。COMMON:连接程序为本段与其它同名同类段指定相同 的基地址,产生覆盖存贮。AT 表达式表达
3、式:连接程序把本段装在表达式的值所指定的段地 址上,它不能指定代码段。MEMORY:连接程序将把本段定位在被连接一起的其它所 有段之上。3.类别(“class”):为单引号括起来的字符串,一般为:CODE,DATA,EXTRA,STACK功能:按类别名相同的段(段名不一定相同)组织 起来存放在连接的存贮区中。例:模块1 : :A SEGMENT PARA PUBLIC A SEGMENT PARA PUBLIC S S A1 DB 55H DUP(0) A1 DB 55H DUP(0)A ENDSA ENDSB SEGMENT PARA COMMON B SEGMENT PARA COMMON
4、 S1S1 B1 DB 202H DUP(0) B1 DB 202H DUP(0)B ENDSB ENDS模块2 : :A SEGMENT PARA PUBLIC A SEGMENT PARA PUBLIC S S A2 DB 103H DUP(0FFH) A2 DB 103H DUP(0FFH)A ENDSA ENDSB SEGMENT PARA COMMON B SEGMENT PARA COMMON S1S1 B2 DB 104H DUP(0) B2 DB 104H DUP(0)B ENDSB ENDS0000H:0000H 000000H:0000H 00 : : : :0000H:0
5、054H 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 A SEGMENT PARA S S A1 DB 55H DUP(0) A1 DB 55H DUP(0)A ENDSA ENDSB SEGMENT P
6、ARA COMMON B SEGMENT PARA COMMON S1S1 B1 DB 202H DUP(0) B1 DB 202H DUP(0)B ENDSB ENDS模块2 : :C C SEGMENT PARA SEGMENT PARA S S A2 DB 103H DUP(0FFH) A2 DB 103H DUP(0FFH)C ENDSC ENDSB SEGMENT PARA COMMON B SEGMENT PARA COMMON S1S1 B2 DB 104H DUP(0) B2 DB 104H DUP(0)B ENDSB ENDS0000H:0000H 000000H:0000H
7、 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 用途:给符号名定义一个值、别的符号名、一条可执行命 令
8、等。 例如: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 0
9、056H 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字节单元的内容是
10、( )4.3 汇编语言程序格式格式:名字项 操作项 操作数,操作数 ;注释一、名字项(name)1.标号:机器指令语句存放地址的符号表示,也可表示过程名。用于转移指令和CALL语句的操作数项。 标号有三种属性: 段属性:指定义该标号所在段的段首址。 偏移地址属性:它表示段起始地址到定义符号的位置之间的字节数。 类型属性:制定符号在本段使用,还是在其它段中使用: NEAR:本段使用 FAR:段外使用2.变量:数据存放地址的符号表示 变量有三种属性: 段属性:变量所在段的段首址 偏移地址属性:段首址到变量处的字节个数 类型属性:字节或字等类型,由类型定义伪指令定义。 DB:字节类型1个字节 DW:
11、字类型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(或),
12、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)即
13、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:取段首址
14、算符格式: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
15、 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 地址表达式其中
16、:类型为 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
17、 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高低四、注释项本章小结:重点掌握汇编语言的伪指令;汇编语言的格式,以及表达式的灵活应用。