
2019/10/23 第三章汇编语言程序设计 微机技术与仪器系统设计 ·汇编语言源程序语法格式与组成结构; ·伪指令语句: 第三章 汇偏语言程序设计 ·宏指令语句; ·系统功能调用; ·汇编语言程序设计方法 管汇编语言程序设计与执行过程 ·计算机语言: ·输入汇编语言源程序一→源文件.ASM 机器语言+·汇编语言→,高级语言 ·汇编(编译) 目标文件.OBJ 机器语言 一面向机最的语言 ·链接 可执行文件.EXE 汇编语言 ·调试 最终程序 高级语言
2019/10/23 1 微机技术与仪器系统设计 第三章 汇编语言程序设计 1 第三章 汇编语言程序设计 • 汇编语言源程序语法格式与组成结构; • 伪指令语句; • 宏指令语句; • 系统功能调用; • 汇编语言程序设计方法 2 • 计算机语言: 机器语言 汇编语言 高级语言 •面向机器的语言 •机器语言 •汇编语言 •高级语言 3 汇编语言程序设计与执行过程 • 输入汇编语言源程序 源文件 .ASM • 汇编(编译) 目标文件 .OBJ • 链接 可执行文件 .EXE • 调试 最终程序 4

2019/10/23 术予汇编语言源程序的格式 常称为伪指冷,这些指令在汇编过程中被执 行,指示相应的汇偏操作,其自身并不产 DATA SEGMENT :定义教据段 生任何目标代码。可以完成如处理喜选择 .(兼滑定义伪指令序列) 定义程序模式、定义数据、分配存情区、 DATA ENDS 汇编语言语 指示程序的开始和结束等功能 STACK ENDS 债据定义饰指心序别D'定文维挂股 STACK SEGMENT 1.语句类型 汇编语言语句类型分为:指令性语句、指示性语 CODE SEGMENT :定义代码段 ASSUME CS,CODE,SS:STACK,DS,DATA,ES:DATA 句、宏指令语句。 START MOV AX,DATA ;意立最据设剂附抑厥的可哥批连 m. ,量DS率正S的初值 宏指令是由用户按照宏定义格式输写的一段 程序,其中语句可以是指令、伪指令,甚 MOV AH,4CH ,汇国操作承能 至是已定义的宏指令, INT 21H CODE ENDS END START ①标号(名字) 2.语句格式 1)指令性语句的格式 标识符一般由字母和数字、下划线组成,字母开头 [标号:】助记符操作整【操作数【:注利 用于标识指令的地址。 个指的符号地址 标号后要有膏号 2)指示性语句的格 标号的属性 [名字]伪操作符操作数操作数:注蒂 个一的特址 标号有三种属性: “其后不加号 段属性 3)宏指令语句的格式 际子门宏指令名[,2,.嫩额 偏移量属性 类型属性(NEAR,FAR) 其中,[]表示可逸部分
2019/10/23 2 DATA SEGMENT ;定义数据段 .(数据定义伪指令序列) DATA ENDS STACK SEGMENT ;定义堆栈段 .(数据定义伪指令序列) STACK ENDS CODE SEGMENT ;定义代码段 ASSUME CS:CODE,SS:STACK,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 汇编语言源程序的格式 5 汇编语言语句类型与格式 1.语句类型 汇编语言语句类型分为:指令性语句、指示性语 句、宏指令语句。 也称可执行性语句,表示为CPU指令系统 中各种用助记符形式的机器指令。这些指 令在汇编过程中最终转换为目标程序的机 器代码,在运行该程序时被执行。 常称为伪指令,这些指令在汇编过程中被执 行,指示相应的汇编操作,其自身并不产 生任何目标代码。可以完成如处理器选择、 定义程序模式、定义数据、分配存储区、 指示程序的开始和结束等功能 宏指令是由用户按照宏定义格式编写的一段 程序,其中语句可以是指令、伪指令,甚 至是已定义的宏指令。 6 2.语句格式 1)指令性语句的格式 2)指示性语句的格式 [名字] 伪操作符 操作数 [,操作数] [;注释] 3)宏指令语句的格式 [标号:] 宏指令名 [参数1,参数2,.,参数n[;注释] 其中,[ ]表示可选部分。 [标号:] 助记符 [操作数 [,操作数] [;注释] •变量的符号地址 其后不加冒号•指令的符号地址 ,标号后要有冒号 7 ① 标号(名字) 标识符一般由字母和数字、下划线组成,字母开头 用于标识指令的地址。 标号的属性 标号有三种属性: 段属性 偏移量属性 类型属性(NEAR, FAR) 8

2019/10/23 变量 ② 助记符和伪操作符 变量是数据所存放单元的符号地址,一般位于敢据段取 助记符—有助于记忆的标识符,即为机器指令或 堆找段中,不可在代码段中,可用各种寻址方式对变量进 伪指令中操作码的助记符。 行存取。 ·变量的定义: 对于机器雅今,汇编程序将其潮评成机喜潘言相伞。如 变量是由伪操作命令(简称伪指令)DB、DW、DD等来 MOV AX,100H-+B80001 定义的。 变量的周性: 对于伪指◆,汇情瘦序进行湘应的功能处理。 三种属性:段属性 d恤SEGMENT一→da地与一度值对应 偏移量周性 类型属性(BYTE,.wORD,OWORD,QWORD,TBY tting DB“闪TU'→tig与一内存地址对应 食 ③操作数 操作数岭出参与操作的数成数所在的地址 ·2)等存是 操作数多于一个时,用道号分开。 8位:AH,AL BH BLCH,CLDH DL 操作数可以是常数、寄存县、存储器禄作数、标手名、 过雅名表达式普。 16位:AX.BX.CX.DX.SS,DS,C3Es,SPBP,SLDI ·3)标号 )常戴给出具体的戴据,可以是数李常量或李特常量。 ·代表一条指个的将导地址,常作为拉制特港美指个的操 A数字歌认十进制,如1234D戒1234好 作数。 ▲数字后加B表示二进制数,如1010B; ·4)变量 ▲数字后加H表示十六进制数,知1234H; ·变量在使用中定义为一个数蜂区的名字,作为存储罪操作 ☑手将常量,用单引子表示。知1234江编时,用字特对) 数使用。 应的ASCT表示:31H32H33H34H 9
2019/10/23 3 变量是数据所存放单元的符号地址,一般位于数据段或 堆栈段中,不可在代码段中,可用各种寻址方式对变量进 行存取。 • 变量的定义: 变量是由伪操作命令(简称伪指令)DB、DW、DD等来 定义的。 • 变量的属性: 三种属性:段属性 偏移量属性 类型属性(BYTE,WORD,DWORD,QWORD,TBYTE) 变 量 9 ② 助记符和伪操作符 • 助记符——有助于记忆的标识符,即为机器指令或 伪指令中操作码的助记符。 对于机器指令, 汇编程序将其翻译成机器语言指令。如 MOV AX, 100H → B8 00 01 对于伪指令,汇编程序进行相应的功能处理。 data SEGMENT →data与一段值对应 string DB ‘XJTU’ →string与一内存地址对应 10 ③ 操作数 • 操作数给出参与操作的数或数所在的地址 • 操作数多于一个时,用逗号分开。 • 操作数可以是常数、寄存器、存储器操作数、标号名、 过程名或表达式等。 1) 常数 给出具体的数据,可以是数字常量或字符常量。 ◢ 数字默认十进制,如 1234D或1234; ◢ 数字后加B表示二进制数,如 1010B; ◢ 数字后加H表示十六进制数,如 1234H; ◢ 字符常量,用单引号表示。如 ‘1234’汇编时,用字符对 应的ASCII表示: 31H, 32H, 33H, 34H 11 • 2)寄存器 • 8位:AH,AL,BH,BL,CH,CL,DH,DL • 16位:AX,BX,CX,DX,SS,DS,CS,ES,SP,BP,SI,DI • 3)标号 • 代表一条指令的符号地址,常作为控制转移类指令的操 作数。 • 4)变量 • 变量在使用中定义为一个数据区的名字,作为存储器操作 数使用。 12

2019/10/23 将。气 表达式中的运算符 修5)表达式反表达式中的操作持 由常量、标号、变亚不一些操作将构成。 ,算术远算将:+、/人MOD 。汇躺程序对表达式进行运算后,得到一个确定的最值: 速操远算特:AND、OR、NOT、OR 弄把这个教值汇铺到指令中。 ·择表达式所表示的内客,分最字表达式、地址衰达式。 关暴遂算#:QB、GT、G迅、LT、LB 。表达式是霜伞或伪禄作的操作戴 一真:FFFH餐0 丧达式中的操作特由汇铺短序完成 例MOVA区12-4 ;数字来站式 LEA BX,[suing+4] 地址表达式 她尚慢 强说说州 CODE SEGMENT ASSUME CS:CODE ·data2equ'A START: 批甜脱 data3 equ 8 租燕戏适 data4 equ 3 猫然 mov ax,data1 mod data2 aa1/16+35 mov ax,datal'data2+data3 mov bx,data3 mod data4 mov cx,data4 mod data3 洲 mov cx,data1 mod data2 mov bx,daa3g欧datal 批远 mov cx,32h shl 4 mov dl,not 21h 罚子 CODE ENDS END START mov dh,4/3 ,器榄造战 册贤器授
2019/10/23 4 • 5)表达式及表达式中的操作符 由常量、标号、变量和一些操作符构成。 汇编程序对表达式进行运算后,得到一个确定的数值, 再把这个数值汇编到指令中。 据表达式所表示的内容,分数字表达式、地址表达式。 表达式是指令或伪操作的操作数; 表达式中的操作符由汇编程序完成 例 MOV AX, 12 - 4 ; 数字表达式 LEA BX, [ string + 4 ] ;地址表达式 13 表达式中的运算符 •算术运算符: +、-、*、/、MOD •逻辑运算符: AND、OR、NOT、XOR •关系运算符 :EQ、NE、GT、GE、LT、LE —— 真:FFFFH; 假: 0 14 15 • data1 equ -1 • data2 equ 'A' • data3 equ 8 • data4 equ 3 • mov ax,data1 mod data2 ;27 • mov bx, data3 mod data4 • mov cx, data4 mod data3 • mov cx, 32h shl 4 • mov dl ,not 21h • mov dh,4/3 16

2019/10/23 表达式中的运算符 P:针对不周的存器操作数类型不周的TPB值 分析运算符(SEG、OFFSET,TYPE,SIZE,LENGTH) 如:VAR DW? ·分析一个存储器操作数的类型。 ARRAY DD 10DUP (? MOV AXTYPE VAR MOV BX,TYPE ARRAY -SEG取符号地址的段地址, ·运行帖果(A)=2B=4 例:MOV AX,SEGy MOVCX LENGTHARRAY ;(CX)=10 -OFFSET取符号地址的偏移地址. SZB运同的是意复作持DUP定义的变量李节卷害 例:MOV BX,OFFSET yy 来用DUP说明N与TYP道圆值湘同 8币 B含成运算符(PTR THIS SHORTA篱) 。TH5应用2:提高访问标号的灵活性, GO:MOV AX,0203H ·PTR:用于指定或修改存储器操作数的类型。 JMPG0:段内亮刺 INC BYTE PTR[BX灯ISJ ·若希望其它段的小MP指今也能跳转到GO标号处: ·THS:同样可用于指定存情器操作数的类型。 GO1 EQU THIS FAR ·VAR2 EQU THIS BYTE GO:MOV AX,0203H VAR1 DW 2030H ·JMP GO;段内跳# FIRST EQU THIS BYTE JMP GO1;段间跳转 SECOND DW 100 DUP (?
2019/10/23 5 表达式中的运算符 •分析运算符 ( SEG、OFFSET,TYPE,SIZE, LENGTH ) •分析一个存储器操作数的类型。 -SEG 取符号地址的段地址。 例: MOV AX , SEG yy -OFFSET 取符号地址的偏移地址。 例: MOV BX , OFFSET yy 17 • TYPE : 针对不同的存储器操作数类型返回不同的TYPE值 。 • 如: VAR DW ? • ARRAY DD 10 DUP(?) • MOV AX,TYPE VAR • MOV BX,TYPE ARRAY • 运行结果(AX)=2;(BX)=4 • LENGTH:返回的是重复操作符DUP定义的变量个数,若 未用DUP说明则结果为1。 • MOV CX,LENGTH ARRAY ;(CX) =10 • SIZE:返回的是重复操作符DUP定义的变量字节总数,若 未用DUP说明则与TYPE返回值相同 18 • 合成运算符 (PTR THIS SHORT等) • PTR: 用于指定或修改存储器操作数的类型。 • INC BYTE PTR[BX][SI] • THIS: 同样可用于指定存储器操作数的类型。 • VAR2 EQU THIS BYTE • VAR1 DW 2030H FIRST EQU THIS BYTE SECOND DW 100 DUP (?) 19 • THIS 应用2:提高访问标号的灵活性。 • GO: MOV AX,0203H • JMP GO ;段内跳转 • 若希望其它段的JMP指令也能跳转到GO标号处: • GO1 EQU THIS FAR • GO: MOV AX,0203H • JMP GO ; 段内跳转 • JMP GO1 ; 段间跳转 20

2019/10/23 其他运算符 ·SHORT:翰定标号臭型为姬桥号,即标号到引用标号间 方括号:变量或寄存馨或普存器加位移量表示存储器地 址时,需加方括号 的偏港量在-128到127个字节花圆内。 段超抛运算符‘,’:变示段粗能,指明存德悬操作数的 JMP SHORT TAG 段离性, HIGHLOW:HGH和LOW被称为李节分高符,它们将 ·TAG: 一个16位的数或表达式的高学节和低学节分离出来。 ·例如:COUNT EQU2A3BH ·则标号TAG与JMP指令的距离不能大于127个字节。 ·COUNT为一个符号常教,它等值于2A3BH。 ·则: MOV AH,HIGH COUNT MOV AL,LOW COUNT ④注释 3.3伪指令 一、数据定义伪指令 ·注彝由分号引出,用来说明语句或租序的功能。 五种数据类型定义伪指令: 汇躺准序对分号后的内容不做处理。 DB- 用来定义李节,表示奉个操作数占用一个字节。 -①注释稚序,增强稚序可读性: ·DW 用来定义字,表示奉个操作最占用2个字节. -②可放在语句最前面,前时注释某语句,供程 ·D0 一用来定义双字,表示奉个操作数占用4个字节。 序调试用。 ·D0一用来定义4个字,表示奉个操作数占用8个李节。 -用来定义10个李节,表示毒个操作数占用10个字节
2019/10/23 6 • SHORT: 指定标号类型为短标号,即标号到引用标号间 的偏移量在-128到127个字节范围内。 • JMP SHORT TAG • . • TAG: . • . • 则标号TAG与JMP指令的距离不能大于127个字节。 21 其他运算符 • 方括号[]:变量或寄存器或寄存器加位移量表示存储器地 址时,需加方括号 • 段超越运算符‘:’:表示段超越,指明存储器操作数的 段属性。 • HIGH和LOW:HIGH和LOW被称为字节分离符。它们将 一个16位的数或表达式的高字节和低字节分离出来。 • 例如: COUNT EQU 2A3BH • COUNT为一个符号常数,它等值于2A3BH。 • 则: • MOV AH,HIGH COUNT • MOV AL,LOW COUNT 22 ④ 注释 • 注释由分号引出,用来说明语句或程序的功能。 汇编程序对分号后的内容不做处理。 –①注释程序,增强程序可读性; –②可放在语句最前面,暂时注释某语句,供程 序调试用。 23 3.3 伪指令 一、数据定义伪指令 五种数据类型定义伪指令: • DB——用来定义字节,表示每个操作数占用一个字节。 • DW——用来定义字,表示每个操作数占用2个字节。 • DD——用来定义双字,表示每个操作数占用4个字节。 • DQ——用来定义4个字,表示每个操作数占用8个字节。 • DT——用来定义10个字节,表示每个操作数占用10个字节。 24

2019/10/23 例:定义赋初值的变量 .D6/DW/D0/D0/DT:定义变量、分家待侍单元。 格式:[变量名】 伪操作 操作数[,操作数] STR DB 'ABCDEFG',30,44H data SEGMENT -FC BA DW AB' ABDD DD AB DB 1,-1,0FCH EXAM1 TABLE,TABLE+5,TABLE+10 y DW 1,-1,0FCH TOTAL DD TABLE NUM DD00112233H 1 DD 1,-1,0FCH QQ DB 20 data ENDS 操作最可以是:数值表达式成表、李符事、? NDUP表达式 ▲常量和表达式表示内存操作数的初始值,其值应在其定义 的类型范围内,否则汇编出猎。 、 例aaDB270X bbDW80000× BUFFER DB 10 DUP(?) ▲用?表示不置初始值的内存操作数。 ABDD DW 10 DUP(0) 例ceDB? MASK DB 5 DUP('A') ▲可用DUP复制操作符定义相同的操作数,其格式为 EXAM1 DB 2DUP(3DUP(8),6) STR DB ABCDEFG BA DW AB' 3DP(4) ABDD DD ‘AB' →1口心ww4,4,4 ▲字符串变量只能用DB定义
2019/10/23 7 • DB/DW/DD/DQ/DT:定义变量、分配存储单元。 • 格式:[变量名] 伪操作 操作数[,操作数] • STR DB ‘ABCDEFG’,30,44H • BA DW ‘AB’ • ABDD DD ‘AB’ • EXAM1 DW TABLE,TABLE+5,TABLE+10 • TOTAL DD TABLE • NUM DD 00112233H • QQ DB 20 操作数可以是:数值表达式或表、字符串、? N DUP表达式 25 例: 定义赋初值的变量 data SEGMENT xx DB 1, -1, 0FCH yy DW 1, -1, 0FCH zz DD 1,- 1, 0FCH data ENDS yy 26 ▲常量和表达式表示内存操作数的初始值, 其值应在其定义 的类型范围内,否则汇编出错。 例 aa DB 270 bb DW 80000 ▲用 ? 表示不置初始值的内存操作数。 例 cc DB ? ▲可用 DUP 复制操作符定义相同的操作数,其格式为 重复次数 DUP( 操作数) 例 ee DB 3 DUP ( 4 ) 等价于 ee DB 4, 4, 4 ▲字符串变量只能用DB定义 STR DB ‘ABCDEFG’ BA DW ‘AB’ ABDD DD ‘AB’ 27 BUFFER DB 10 DUP(?) ABDD DW 10 DUP(0) MASK DB 5 DUP(‘A’) EXAM1 DB 2DUP(3 DUP(8),6) 28

2019/10/23 ·定义字符串变量(只能用DB定义) 二、符号定义伪操作 data SEGMENT stri DB 'TsingHua' str2 DB 'INPUT:',0dH,0aH ·给一个符号量新命名,或定义新的类型属性。 ·EQU:将表达式的值赋予一个名字,可以在教据 data ENDS 为常量表达式、标网 str2→ LEA BX.CLIST- cheng equ mul 注意:3个及其以上的字符, count equ cx 只能用DB定义。如 bE: ADD BX,ENT22- cheng count strl Dw 'abed' COUNT i6:DF71 str2 DD 'abed'/ CBD 二、符号定义伪操作 BoU cx,*321h 备个特号新命名,取定义新的类 识能是常数,对于字符或字符串,在汇编时按 ·EQU:将表达式的值赋子一个名字,可以在教据 d,0 段之外使用,也可放在代码段中间。 格式:标识符EQU操作数 等。 ·=:与EQU基本相同,可以对一个名字重复定义 格式:标识符=操作数 复盖地 ·LABEL:定义标号或变量的类型。 显,藏洲品号示行 ·格式:别名LABEL类型厚性 5=1
2019/10/23 8 •定义字符串变量(只能用DB定义) data SEGMENT str1 DB ' TsingHua ' str2 DB 'INPUT:' ,0dH ,0aH ,'$' data ENDS 注意:3个及其以上的字符, 只能用DB定义。如 str1 DW ‘abcd’ str2 DD ‘abcd’ 29 • 给一个符号重新命名,或定义新的类型属性。 • EQU:将表达式的值赋予一个名字,可以在数据 段之外使用,也可放在代码段中间。 格式: 标识符 EQU 操作数 二、符号定义伪操作 为常量、表达式、标识符等,定义一个符号名 例:CONSTANT EQU 256 ALPHA EQU 7 BETA EQU ALPHA-2 ; =5 ADDR EQU BETA*2-1; =9 BP8 EQU [BP+8] COUNT EQU CX CBD EQU DAA 30 • 给一个符号重新命名,或定义新的类型属性。 • EQU:将表达式的值赋予一个名字,可以在数据 段之外使用,也可放在代码段中间。 格式: 标识符 EQU 操作数 • =:与EQU基本相同,可以对一个名字重复定义 格式:标识符 = 操作数 • LABEL:定义标号或变量的类型。 • 格式:别名 LABEL 类型属性 二、符号定义伪操作 31 (1)=后的表达式只能是常数,对于字符或字符串,在汇编时按 整数处理。 (2) EQU后的表达式可以是数值、字符串,甚至可以是寄存器 名、指令的助记符等。 (3) EQU不能重复定义,而“=”伪指令可以重复定义,其作用 域从定义点到重新定义之前。 注:符号而非变量,故用EQU、= 定义的符号不占用存储单元32

2019/10/23 标号定义伪指令LABEL 式是义振号变给类题。它一条辅共 DATA SEGMENT ARE1 20H000H ·格式:别名LABEL类型属性 ARE1 DB 20H ARE3 ARE2 EQU 20H 42H0001H ARE3 DW 4142H 41国 ·例用LABEL定义变量。 VAR1 LABEL BYTE DATA ENDS VAR2 DW 10 DUP(?) 注:EQU定义的是常量,故不占存储单元 ·VAR1是一个字节型变量,它的开始地址总是与它下面可 以分配的第一存情单元的地址相同。 段定义伪操作 食 ·SEGMENT/ENDS 1)MOV VAR1,0t将一个字节置0 段名SEGMENT定位组合类别属性 MOV VAR2,0;将一个李置0 ·2)MOV AX,VAR1:错误 段名ENDS 段定义由伪指◆EGMENT开,到DS来: MOV AL,VAR1t正确 其中:SEGMENT和ENDS必须成对出现,语句前 ·3 MOV AL,VAR2,错误 必领有段名,且夜名必须相周。 SEGMENT和ENDS语句之间可以有湘令和其他伪指个 MOV AX,.VAR2;正确. 表示存放在域段内存的变量、相令成其他伪操作对 被及内存的处理程序中可以定义多个夜。 VAR1 LABEL BYTE VAR2 DW 10 DUP(?) 值。 准序江、换及入内春后,段名为一具体的
2019/10/23 9 例 DATA SEGMENT ARE1 DB 20H ARE2 EQU 20H ARE3 DW 4142H DATA ENDS 注: EQU定义的是常量,故不占存储单元 20H 42H 41H ARE1 ARE3 0000H 0001H 33 标号定义伪指令 LABEL • LABEL:定义标号或变量的类型。它和下一条指令共享 存储器单元 • 格式:别名 LABEL 类型属性 • 例 用LABEL定义变量。 • VAR1 LABEL BYTE • VAR2 DW 10 DUP(?) • VAR1是一个字节型变量,它的开始地址总是与它下面可 以分配的第一存储单元的地址相同。 34 • 1)MOV VAR1,0 ;将一个字节置 0 • MOV VAR2,0 ;将一个字置0 • 2)MOV AX, VAR1 ;错误 • MOV AL, VAR1 ;正确 • 3)MOV AL, VAR2 ;错误 • MOV AX,VAR2 ;正确。 VAR1 LABEL BYTE VAR2 DW 10 DUP(?) 35 段名 SEGMENT [定位][组合][类别][属性] . 段名 ENDS 段定义由伪指令SEGMENT开始,到ENDS结束。 其中: SEGMENT 和ENDS 必须成对出现,语句前 必须有段名,且段名必须相同。 SEGMENT和ENDS语句之间可以有指令和其他伪指令, 表示存放在该段内存的变量、指令或其他伪操作对 该段内存的处理程序中可以定义多个段。 程序经汇编、连接及装入内存后,段名为一具体的段 值。 三、 段定义伪操作 • SEGMENT/ENDS 36

2019/10/23 DATA SEGMENT :克义数康 ASSUME伪指令 盖AE限专特略食精略一司 段名为C0DE的段·为n△T△的想 成,送地址与cS相 段名为STAC K的段是堆 CODE SEGMENT 段,其盖地址与SS相联暴。 其中段寄存器为CSDS.ES.SS中的一个 START: AXDATA?喻DS威值 MOV DS AX 段名为用伪操作SEGMENT定义过的段名 ▲若未用ASSUME语句指示指令中用到的标号、过程和变 量所在的段,汇编程序将给出错误信息。 例ASSUME CS:ce,DS:a ▲ASSUME语句只起指示作用,并无实际的操作, ▲ASSUME伪指令的作用 ASSUME伪指令与程序运行时段寄存器的值毫无关系。 指示汇编程序指令中用到的标号、过程及变量所在的段. 在程序中引用定义的变量做内存操作数时,需按寻址方 式用传送指令(如MOV)给相应的段寄存器赋值, 其中对标号、过程必须用CS段寄存器指示 对变量可用CS、DS、ES、SS段寄存器指示 在源程序中,ASSUME语句只能安排在代码段内,一龄 37 应在代码段作为首始指令。 四、过程定义伪指令 《·2.程序结束伪指令END 格式:过程名PROC属性 过程内容 格式 ED启动地址 RET 过程名ENDP ▲作用:指示源程序到此结束。 汇编程序对END之后的语句不进行处理, 注:过程定义必须在代码段内 程序中所有有效语句应放在END语句之前, PROC FAR为定义远i过程 PROC NEAR为定义近过程(默认) ▲源程序中必须有END结束语句. 个过程内,至少有一桌返回指令RET 调用过程使用CALL过程名 汇编程序对无END语句的源程序不进行处理 过程调用可以嵌套 只给出无END语句错误信息
2019/10/23 10 格式 ASSUME 段寄存器:段名 [, 段寄存器:段名, . ] 其中 段寄存器为CS、DS、ES、SS中的一个 段名为用伪操作SEGMENT定义过的段名 例 ASSUME CS: cc , DS:aa ▲ ASSUME 伪指令的作用 指示汇编程序指令中用到的标号、过程及变量所在的段。 其中 对标号、过程必须用 CS 段寄存器指示 对变量可用 CS、DS、ES、SS 段寄存器指示 ASSUME伪指令 37 DATA SEGMENT ;定义数据段 . DATA ENDS STACK SEGMENT ;定义堆栈段 . STACK ENDS CODE SEGMENT ;定义代码段 ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA ;给DS赋值 MOV DS,AX MOV AX,STACK ;给SS赋值 MOV SS,AX . • 段名为CODE的段是代码 段,其基地址与CS相联系。• 段名为DATA的段是数据段, • 其基地址与 段名为DSSTACK 相联系。的段是堆栈 段,其基地址与SS相联系。 ▲ 若未用ASSUME语句指示指令中用到的标号、过程和变 量所在的段, 汇编程序将给出错误信息。 ▲ ASSUME 语 句 只 起 指 示 作 用 , 并 无 实 际 的 操 作 , ASSUME伪指令与程序运行时段寄存器的值毫无关系。 在程序中引用定义的变量做内存操作数时,需按寻址方 式用传送指令(如MOV)给相应的段寄存器赋值。 在源程序中,ASSUME语句只能安排在代码段内,一般 应在代码段作为首始指令。 38 四、过程定义伪指令 格式: 过程名 PROC 属性 过程内容 RET 过程名 ENDP •注: 过程定义必须在代码段内 • PROC FAR 为定义远过程 • PROC NEAR 为定义近过程(默认) • 一个过程内,至少有一条返回指令RET • 调用过程使用CALL 过程名 • 过程调用可以嵌套 39 格式 END 启动地址 ▲ 作用:指示源程序到此结束。 汇编程序对 END 之后的语句不进行处理。 程序中所有有效语句应放在 END 语句之前。 ▲ 源程序中必须有 END 结束语句。 汇编程序对无 END 语句的源程序不进行处理, 只给出无 END 语句错误信息。 • 2. 程序结束伪指令END 40