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