masm汇编语言知识.ppt
44页第4章 ASM汇编语言知识(3学时),4.1 ASM汇编语言格式 4.2 汇编语句表达式 4.3 伪指令,开 始,4.1 ASM汇编语言格式,4.1.1 指令语句格式 4.1.2 伪指令语句格式,返回本章首页,4.1.1 指令语句格式,指令语句的一般格式如下: [标号:] 指令助记符 操作数 ;注释 标号:标号是机器指令语句存放地址的符号表示,代表该指令目标代码的第一个字节地址,后面必须紧跟冒号“:” 指令助记符:指令助记符为语句的核心成分,表示了该语句的操作类型 操作数:操作数表示指令助记符的操作对象 注释:注释均以分号开始,它可占一行或多行,一般放在一条语句的后面返回本节,4.1.2 伪指令语句格式,伪指令语句格式如下: [符号名] 伪指令符 操作数 ;注释 符号名:符号名是伪指令语句的一个可选项 伪指令符:伪指令符指定汇编程序要完成的具体操作,如数据定义伪指令DB、DW、DD,段定义伪指令SEGMENT,假定伪指令ASSUME等 操作数:伪指令后面的操作数可以是常数、字符串、变量、表达式等,其个数由具体的伪指令决定,各个操作数之间必须以“逗号”分隔 注释:伪指令的注释必须以“;”开始,其作用同指令语句中的注释部分。
返回本节,4.2 汇编语句表达式,4.2.1 常量 4.2.2 变量 4.2.3 标号 4.2.4 表达式中的运算符 4.2.5 运算符的优先级,返回本章首页,4.2.1 常量,1.数值常量 2. 字符串常量,1.数值常量,表4.1 各种形式数字常量格式对照表,2. 字符串常量,字符串常量是用单引号引起来的一个或多个字符字符串常量是以各字符的ASCⅡ码表示的如‘A’用41H 表示,字符串‘A1B2’用41H,31H,42H,32H表示返回本节,4.2.2 变量,1.变量 2.变量的定义,(1)段属性 (2)偏移地址属性 (3)类型属性(DB/DW/DD),1.变量,表达式项是给变量或指定存储单元赋予初值,它有以下几种形式: (1)数值表达式 (2) 字符串表达式 (3)? 表达式 (4)带DUP的表达式,2.变量的定义,数据定义伪指令可以为一个或连续的存储单元设置数值初值 【例4.1】为数据段分配存储单元 DATA SEGMENT A DB 11H,12H,13H B DW 1122H,3344H C DD 12345678H DATA ENDS 上述变量(A、B、C)的存储单元分配及初始化情况如下图4-1所示。
1)数值表达式,图4-1 数据段中数据存储分配图,字符串表达式中的字符串必须用引号引起来DB、DW、DD伪指令将字符串中的各字符均以ASCⅡ码形式存放在相应的存储单元,但表示形式各不相同 【例4.2】为字符串分配存储单元 DATA SEGMENT STR1 DB ‘123’ STR2 DW ‘AB’,‘A’ STR3 DD ‘AB’ DATA ENDS 其存储单元分配如下图4-2所示2) 字符串表达式,图4 -2 数据段中存储分配图,(3)?表达式 :?表达式只分配存储单元,不赋值 例如: CNT DB ? BUF DW ?,在表达式中使用重复数据操作符DUP,可以为连续的存储单元提供重复数据,其格式为: N DUP(表达式) 其中N为重复因子,只能取正整数,表示定义了N个重复数据存储单元,其类型由它前面的数据定义伪指令确定,而每个数据存储单元中的初值由DUP后面圆括号中的表达式给定 例如: BUF DB 100 DUP(0) 以上语句定义了以BUF为首址,大小为100个字节,初值为0的数据存储单元4)带DUP的表达式,返回本节,4.2.3 标号,标号是一条指令语句的符号地址在汇编源程序中,只有在需要转向一条指令语句时,才为该指令语句设置标号,以便在转移类指令(含子程序调用指令)中直接引用这个标号。
因此,标号可作为转移类指令的操作数,即转移地址 【例4.3】符号地址表示 NEXT:MOV AL, [SI] ;带标号NEXT的指令 ┆ DEC CX J NE NEXT,1.段属性 2.偏移地址属性 3.类型属性(NEAR/FAR),标号也具有三种属性,返回本节,4.2.4 表达式中的运算符,1.算术运算符 2.逻辑运算符 3.关系运算符 4.属性运算符 5.数值返回运算符,算术运算符包括:+(加)、-(减)、*(乘)、/(除)、MOD(求模)、SHL(左移)、SHR(右移)几种,它既可以用于数值表达式又可用于地址表达式1.算术运算符,┆ NUM1 EQU 25*4 –50 ;NUM1=50 NUM2 EQU NUM1 / 7 ;NUM2=7 NUM3 DB NUM1 MOD 7 ;NUM3=1 VAR1 DB 1,2,3,4,5 VAR2 DB ‘12345’ NUM4 EQU VAR2-VAR1 ;NUM4=5 NUM5 EQU 0FH ┆ MOV AL,NUM5 SHL 4 ;(AL)=11110000B MOV BL,NUM5 SHR 4 ; (BL)=00000000B,【例4.4】用算术运算符进行数值表达式运算。
逻辑运算符包括:AND、OR、XOR、NOT四种运算由于逻辑运算是按位操作,且在汇编过程中完成,因而运算的结果仍为整数常量 【例4.5】用逻辑运算符进行运算 MOV AL,34H AND 0FH ;04H→AL MOV BL,05H OR 30H ;35H→BL MOV CX,NOT 00FFH ;0FF00H→CX MOV DX,789AH XOR 000FH ;7895H→DX,2.逻辑运算符,关系运算符包括:相等(EQ),不等(NE),小于(LT),大于(GT),小于等于(LE)及大于等于(GE) 【例4.6】用关系运算符进行数值表达式运算 NUM1 DB 10 LT 5 ;NUM1=0 NUM2 DB 0AAAAH GT 7FFFH ;NUM2=0FFFFH MOV AX,‘A‘ EQ 41H ;0FFFFH→AX MOV BX,NUM2 LT NUM1 ;0→BX,3.关系运算符,(1)PTR运算符 格式: 类型 PTR 地址表达式 ①用来将“表达式”说明为一种数据类型 例如: MOV BYTE PTR BUF, 23,4.属性运算符,(1)SEG 运算符 (2)OFFSET运算符 (3)TYPE运算符 (4)LENGTH运算符 (5)SIZE运算符,5.数值返回运算符,(1)SEG 运算符 格式:SEG 变量或标号 功能:分离出其后变量或标号所在段的段首址。
例如: MOV AX,SEG IEnter MOV DS,AX (2)OFFSET运算符 格式:OFFSET 变量或标号 功能:分离出其后变量或标号的偏移地址 例如: MOV AX,OFFSET IEnter,(3)TYPE运算符 格式:TYPE 变量或标号 功能:分离出其后变量或标号的类型如果是变量,将返回该变量的类型对应字节数;如果是标号,则返回代表标号类型的数值它们之间的关系见下表所示:,(4)LENGTH运算符 格式:LENGTH 变量 功能:取出变量所含的数据存储单元个数 【例4.7】取出变量占存储单元个数 DATA SEGMENT A DB ‘ABCDEF’ B DW 10 DUP(1,2DUP(2)) C DB 3,20 DUP(0) DATA ENDS ┆ MOV AX,LENGTH A ;1→AX MOV BX,LENGTH B ;10→BX MOV CX,LENGTH C ;1→CX ┆,(5)SIZE运算符 格式:SIZE 变量 功能:取出变量所含的数据存储区大小其返回值为: LENGTH 变量 TYPE 变量 例如:上例中A、B、C三变量: SIZE A = LENGTH A TYPE A = 1 SIZE B = LENGTH B TYPE B = 20 SIZE C = LENGTH C TYPE C = 1,4.2.5 运算符的优先级,表4.3 运算符的优先级,返回本节,4.3 伪指令,4.3.1 数据定义伪指令 4.3.2 符号定义伪指令 4.3.3 段定义伪指令SEGMENT/ENDS 4.3.4 假定伪指令ASSUME 4.3.5 置汇编地址计数器伪指令ORG 4.3.6 源程序结束伪指令,返回本章首页,4.3.1 数据定义伪指令,常用的数据定义伪指令有DB,DW,DD。
格式:[变量名] 数据定义伪指令 表达式 [,…] 功能:定义数据存储区,类型由数据定义伪指令确定,初值由表达式给定返回本节,4.3.2 符号定义伪指令,1.等价伪指令 2.等号伪指令,1.等价伪指令,格式:符号名 EQU 表达式 功能:为常量、表达式及其他各种符号定义一个等价的符号名,但它不申请存储单元 用途:用符号表示常量、数值表达式,即定义符号常量使用符号常量可使程序简单明了,增强程序的可读性和通用性 例如: ICW1 equ 00010011b ICW2 equ 00100001b ICW4 equ 00000001b OCW1 equ 11111101b,2.等号伪指令,格式:符号名 = 表达式 功能:为常量、表达式及其他各种符号定义一个等价的符号名,并能对所定义的符号多次重复定义,且以最后一次定义的值为准 【例3.8】定义等价符号名 ┆ COST = 20 M = MOV LOST = LOST+10 ;30→LOST M = ADD ;M=ADD ┆,4.3.3 段定义伪指令SEGMENT/END,格式: 段名 segment 指令或伪指令 段名 ends 注意:段名是为该段起的名字,用来指出汇编程序为该段分配的存储区起始位置,例如: data segment CNT db 0 data ends,,CODE SEGMENT ASSUME CS:CODE,DS:DATA START PROC MOV AX,DATA MOV DS,AX MOV SI,OFFSET BUF MOV CX,10 MOV BL,1 SCAN: CMP BYTE PTR[SI],0 JS EXIT INC SI DEC CX JNZ SCAN MOV BL,0 EXIT: JMP $ START ENDP CODE ENDS,4.3.4 假定伪指令ASSUME,格式:ASSUME 段寄存器:段名 [,段寄存器:段名] 功能:建立段寄存器与段之间的对应关系。
该伪指令一般出现在代码段中4.3.5 置汇编地址计数器伪指令ORG,格式:ORG 数值表达式 功能:将数值表达式的值赋给汇编地址计数器$ 数值表达式的值须为0~65535之间的非负整数 【例4.13】给汇编地址计数器赋值 DATA SEGMENT ORG 10 ; 置$值为10 VAR1 DW 100H,200H ORG $+5;置$的值为14+5,即为19 VAR2 DB 1,2, $+1,$+2 N EQU $-VAR2 ; ($)=23 DATA ENDS,返回本节,4.3.6 源程序结束伪指令,格式:END [表达式] 功能:该语句标志整个程序的结束,是源程序的最后一条语句返回本节,过程定义伪指令,返回本章首页,格式: 过程名 PROC 指令 ┆ 过程名 ENDP,IInit proc mov dx, CS8259A mov al, ICW1 out dx, al mov dx, CS8259B mov al, ICW2 out dx, al mov al, ICW4 out dx, al mov al, OCW1 out dx, al ret IInit endp,。





