汇编语言 第四章

合集下载

汇编语言程序设计第四章

汇编语言程序设计第四章
code segment …
添加标题
注意:默认是8086 方式。
数据与符号定义伪指令
定义符号伪指令
包括EQU, =, LABEL,它们只用来定义名字,不分配存储空间.
格式: 名字 EQU 表达式
名字 =
表达式
注意 (1)EQU的表达式可以是常量,变量名,标号,指令助记符,寄存器名;而=的表 达式只能是数字表达式,主要用来定义符号常量. 同一个源程序,EQU符号名不能重复定义,=则可以. 同一个源程序中同一符号名,不能同时用EQU和=语句定义.
NOT; AND ; OR,XOR; SHORT
从高到低排列:
4.2 汇编伪指令语句
添加标题
方式伪指令
添加标题
code ends
添加标题
包 括:.8086, .386, . 386P等,用来指定 CPU的类型.
添加标题
例如: .386
添加标题
.8086
添加标题
code segment …
添加标题
○ COUNT =60*60 ○ MOV ECX, COUNT ; COUNT=3600 ECX
算法运算符共7种: +, -, *, /, MOD, SHR, SHL
○ 对于语句:MOV AL,2
可用下列语句替换:
VAL EQU 5
MOV AL, VAL SHL 1 ; VAL=5=00000101B 逻辑右移1 位为:00000010B=2
地址表达式
地址表达式形成的结果是存储器的地址,用来表标指令中的标号或变量操作数,有 3个属性:段地址,EA和类型。
而数值表达式的结果只有大小没有属性。 地址表达式可由变量、标号、常量、寄存器及一些运算符组成。

汇编第4章

汇编第4章

4.2 伪操作 由于ASSUME伪操作只是指定某个段分配给哪一个段寄 存器,它并不能把段地址装入段寄存器中,所以在代码 段中,还必须把段地址装入相应的段寄存器中。代码段 不需要这样做。代码段的这一操作是在程序初始化时完 成的。 为了对段定义作进一步地控制,SEGMENT伪操作还可 以增加类型及属性的说明,其格式如下:
4.2 伪操作 4.2.3 程序开始和结束伪操作 表示源程序结束的伪操作的格式为: END [label] 其中标号(label)指示程序开始执行的起始地址。如果多个 (label) 程序模块相连接,则只有主程序要使用标号,其他子程 序模块则只用END而不必指定标号。 MASM6.0版增加了定义程序的入口点和出口点的伪操作。 .STARTUP 用来定义程序的初始入口点,并且产生设置 DS,SS和SP的代码。如果程序使用了.STARTUP,则结 束程序的END伪操作中不必再指定程序的入口点标号。
4.2 伪操作 (2)组合类型(combine_type)说明程序连接时的段合并方法, 它们可以是: PRIVATE 该段为私有段,在连接时将不与其他模块中 的同名分段合并。 PUBLIC 该段连接时可以把不同模块中的同名段相连接 而形成一个段,其连接次序由连接命令指定。每一分段 都从小段的边界开始,因此各模块的原有段之间可能存 在小于16字节的间隙。 COMMON 该段在连接时可以把不同模块中的同名段重 叠而形成一个段,由于各同名分段有相同的起始地址, 所以会产生覆盖。COMMON的连接长度是各分段中的最 大长度。重叠部分的内容取决于排列在最后一段的内容。
4.2 伪操作 (2)简化的段定义伪操作 汇编程序给出的标准段有下列几种: Code Initialized data Uninitialized data Far initialized data Far uninitialized data Constants Stack 代码段 初始化数据段 未初始化数据段 远初始化数据段 远未初始化数据段 常数段 堆栈段

汇编语言第四章程序流程控制语句及程序设计PPT课件

汇编语言第四章程序流程控制语句及程序设计PPT课件

•第4章 程序设计方法
4.3.2 常用的DOS系统功能调用
1.单字符输入(1号调用) 2.单字符显示(2号调用) 3.打印输出(5号调用) 4.结束调用(4CH号调用) 5.显示字符串(9号调用) 6.字符串输入(10号调用)
•第4章 程序设计方法
1.单字符输入(1号调用) 格式:MOV AH,1
SEGMENT STACK
DB 200 DUP(0)
STACK
ENDS
CODE
SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
START: MOV AX,DATA
MOV DS,AX
•第4章 程序设计方法
LEA MOV INT LEA MOV
INT LEA MOV MOV ADD LEA
2.流程图符号表示
(1)起止框:表示程序 的开始和结束。
•起止框
•第4章 程序设计方法
(2)判断框 (3)处理框 (4)调用框
•第4章 程序设计方法
(5)指向线 (6)连接框
•第4章 程序设计方法
4.2 顺序程序设计
下面举例说明顺序程序的设计。 【例】试编写一程序计算以下表达式的值。 w=(v-(x*y+z-540))/x 式中x、y、z、v均为有符号字数据。 设x、y、z、v的值存放在字变量X、Y、Z、V中,
5.显示字符串(9号调用)
格式:LEA DX,待显示字符串首偏移地址
MOV AH,9
INT
21H
功能:将当前数据区中以‘$’结尾的字符串送显示器显示。
6.字符串输入(10号调用)
格式:LEA DX,缓冲区首偏移地址
MOV AH,10
INT 21H

汇编语言 第四章 汇编语言

汇编语言 第四章 汇编语言

4.1.4 特殊运算符
1.属性替换运算符
(3)短取代运算符SHORT 告诉汇编程序,目标标号在本条指令的 -128~+127 个字节的范 围内,生成节省一个字节的机器指令。一般情况下可以不用。 例如: JMP SHORT NEXTBRACH … NEXTBRACH: MOV EAX,ECX

4.1.4 特殊运算符

4.1.4 特殊运算符
1.属性替换运算符
(2)段地址取代运算符“:” 又称为段地址运算或者跨段前缀。用于临时给定变量,标号或 者地址表达式指定一个段属性,地址表达式EA和类型保持不变。在 指令中替代默认的段以形成物理地址。 例如: MOV DX,ES:[BX + DI];EA = BX +DI,PA =ES ;*16 + EA,临时替换默认的DS

4.1.4 特殊运算符
2.属性分离运算符
TYPE运算符 格式:TYPE 变量或标号 功能:分离出其后变量或标号的类型。如果是变量,将返回该变 量的类型对应字节数;如果是标号,则返回代表标号类型的数值。 MOV CL,TYPE ARRAYW ;若变量ARRAYW为字类型,则CL=2
4.1.4 特殊运算符
(1)LENGTH运算符 功能:当变量由数据定义伪指令定义,并且表达式带有一个DUP项 时,LENGTH取DUP项前面的重复系数;如果表达式有多个DUP项 嵌套时,仍然取第一个DUP项前的数字,LENGTH变量的取值为1. DATA SEGMENT A DB ‘ABCDEF’ B DW 10 DUP(1,2DUP(2)) C DB 4,20 DUP(0) DATA ENDS ┆ MOV AX,LENGTH A ;1→AX MOV BX,LENGTH B ;10→BX MOV CX,LENGTH C ;1→CX

汇编 第四章伪指令及汇编语言源程序结构

汇编 第四章伪指令及汇编语言源程序结构

MOV AL, BUF1
ADD AL, BUF2 MOV SUM, AL
;取第一个加数
;两数加 ;和放入SUM单元
3
伪指令(指 示性)语句: 提供相关辅 助信息。
指令性语句: 完成一定功 能,能翻译 成机器码。
伪指令语句
DATA SEGMENT ;DATA段定义开始 BUF1 DB 34H BUF2 DB 27H SUM DB ? DATA ENDS ;DATA段定义结束 CODE SEGMENT ;CODE段定义开始 ASSUME CS:CODE ASSUME DS:DATA ;段性质规定 START: MOV AX,DATA MOV DS,AX ;给DS赋值 MOV AL, BUF1 ;取第一个加数 ADD AL, BUF2 ;两数加 MOV SUM, AL ;和放入SUM单元 MOV AH,4CH INT 21H ;返回DOS CODE ENDS ;CODE段定义结束 END START ;源程序结束
14
二、= 等号伪指令
格式:符号名 = 表达式 功能:为常量、表达式及其他各种符号定义一个等价的符号 名,并能对所定义的符号多次重复定义,且以最后一次定义 的值为准。 例:COST = 20 M = MOV LOST = COST+10 ;30→LOST M = ADD ;M=ADD 注 : “ = ” 伪 指 令 的 格 式 和 功 能 与 EQU 类 似 。 二者区别:在同一程序中,“=”可以对一个符号重 复定义,EQU不能对同一符号重复定义。
26
三、变量、标号的分析运算和合成运算
例: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 ┆

汇编语言第4章

汇编语言第4章

• 输入要编译的源文件文件名后,按 Enter键。 • 目标文件(*.obj)是我们对一个源程序进 行编译要得到的最终结果(二进制文件)。 • 编译程序默认要输出的目标文件名为1.obj, 所以可以不必再另行指定文件名。
• 列表文件是编译器将源程序编译为目 标文件的过程中产生的中间结果。 • 可以不生成这个文件,直接按 Enter键 即可。
• 输入要编译的源文件文件名后,按 Enter键。 • 目标文件(*.obj)是我们对一个源程序进 行编译要得到的最终结果(二进制文件)。 • 编译程序默认要输出的目标文件名为1.obj, 所以可以不必再另行指定文件名。
• 列表文件是编译器将源程序编译为目 标文件的过程中产生的中间结果。 • 可以不生成这个文件,直接按 Enter键 即可。
汇编程序功能 汇编语言程序的上机过程 伪操作 汇编语言程序格式
现在我们将开始编写完整的汇编语言 程序,用编译器将它们编译成为可执 行文件(如:*.exe文件),在操作系 统中运行。 这一章,我们将编写第一个这样的程序。
汇编语言程序的建立及执行过程
编辑程序
. ASM 文件
汇编程序
. OBJ 文件
汇编语言程序的上机过程 1、 编辑源程序 • 进入DOS方式,运行Edit,在其中编辑程序,如下图所示:
2、编译
• 进入DOS方式,进入 C:\masm 目录,运行 masm.exe。 • 如果源程序文件不是以 asm 为扩展名的 话,就要输入它的全名。比如p1.txt。 • 在输入源程序文件名的时候一定要指明它 所在的路径。如果文件就在当前路径下, 只输入文件名就可以。
• 映像文件是连接程序将目标文件连接为可 执行文件过程中产生的中间结果。 • 可以不生成这个文件,直接按 Enter 键即 可。

第四章 汇编语言程

第四章  汇编语言程
J X G
微机原理及应用
第四章 汇编语言程序设计
在这一章中将介绍汇编语言的语句分类(指令语句、 在这一章中将介绍汇编语言的语句分类(指令语句、 伪指令语句和宏指令语句),汇编语言源程序的结构, ),汇编语言源程序的结构 伪指令语句和宏指令语句),汇编语言源程序的结构, 汇编语言程序设计。并能进行简单的程序设计。 汇编语言程序设计。并能进行简单的程序设计。
微机原理及应用 4.2 8086/8088汇编语言 8086/8088汇编语言
如果变量A1在它段内的偏移量为0100H, 如果变量A1在它段内的偏移量为0100H,则 A1在它段内的偏移量为0100H MOV MOV BX, BX,OFFSET BX, BX, 0100H A1等价于 A1等价于
J X G
J X G
J X G
微机原理及应用 4.1 程序设计语言概述
汇编语言是用指令的助记符、符号地址、 汇编语言是用指令的助记符、符号地址、标号等来表 示指令的程序语言。 示指令的程序语言。用汇编语言编写的程序称为汇编语 言源程序。 言源程序。把汇编语言源程序翻译成机器语言的目标程 序的过程称为汇编, 序的过程称为汇编,完成这个翻译任务的程序称为汇编 程序。 程序。 以上两种都是低级语言。 以上两种都是低级语言。尽管汇编语言具有执行速度 快和易于实现对硬件的控制等优点, 快和易于实现对硬件的控制等优点,但它仍然存在着机 器语言的某些缺点: CPU的硬件结构紧密相关 的硬件结构紧密相关, 器语言的某些缺点:①与CPU的硬件结构紧密相关,移植 性差; 要用汇编语言进行程序设计, 性差;②要用汇编语言进行程序设计,必须了解所使用 的CPU硬件的结构和功能。 CPU硬件的结构和功能。 硬件的结构和功能
4.2
J X G

汇编语言第4章PPT课件

汇编语言第4章PPT课件
3
2. 汇编语言程序设计与执行过程
输入汇编语言源程序(EDIT) 汇编(MASM) 链接(LINK) 调试(TD)
源文件 . ASM 目标文件 .OBJ 可执行文件.EXE 最终程序
4
3. 汇编语言源程序结构
由多个逻辑段组成,包含: 代码段:存放源程序的所有
数据段名 SEGMENT …
数据段名 ENDS
26
一、数据定义伪指令
用途:定义变量类型,给存储器赋初值,或仅给变量分配存储单 元,而不赋予特定的值。
格式: [变量名] DB 操作数;定义字节 [变量名] DW 操作数;定义字 [变量名] DD 操作数;定义双字 [变量名] DQ 操作数;定义8个字节 [变量名] DT 操作数;定义10个字节
操作数——是赋给变量的初始值,可以有一个,也可以有多个, 但不能超出数据类型范围。操作数可以是数值、字 符串、?、或者DUP。
CLC
;CF=0
LPER:MOV AL,DATA2[SI]
ADC DATA1[SI],AL
INC SI
DEC CX
JNZ LPER
MOV AH,4CH
INT 21H
;返回DOS
CODE ENDS
END START
7
二、汇编语言语句类型及格式
1. 汇编语言语句分类
指令性语句
CPU执行的语句, 能够生成目标代码
段 值 变量所在段的段地址 偏移量 变量单元地址与段首地址之
间的位移量。 类 型 字节型、字型和双字型
14
3)表达式
组成:操作数:常量、寄存器名字、存储器操作数 运算符:
算术运算 逻辑运算 关系运算 取值运算和属性运算 其它运算
15

汇编语言第四章

汇编语言第四章

该段的定位组合方式示意图如图3.3所示。 该段的定位组合方式示意图如图 所示。 所示
模 块 位 、 组 1 合 模 方 块 式 连 示 2 意 接 图 后 段 的 定
五、 DB,DW,DD,DUP
PAR1 PAR2 PAR3 DATA1 DATA2 TABLE1 TABLE2 DB DB DB DW DW DW DD 10 DUP(?) 20 DUP(?) 30 DUP(?) 10 DUP(?) 20 DUP(?) PAR1,PAR2,PAR3 DATA1,DATA2
RADIX伪操作
格式: RADIX expression
【例】 MOV MOV 与 .RADIX MOV MOV BX,0FFH BX,178 16 BX,0FF BX,178D
阅读程序L5.ASM,指出此程序所完 , 阅读程序 成的功能
九、作业
1. P156: 4.5, 4.7, 4.8, 4.9 2.编程 (1).求三个数的最小值. (2)比较两个数是否相等,若相等输出1,否 则输出2.
4.组合方式 .
组合方式有六种类型可供选择。 (1)“不选择” (2)PUBLIC (3)STACK (4)COMMON (5)MEMORY 同PUBLIC (6)AT 表达式
【例2】有两个模块,各模块段定义如下:
模块1: ┆ DATA1 M1 DATA1 DATA2 N1 DATA2 END SEGMENT PARA PUBLIC ‘DATA1’ DB 45H DUP(0) ENDS SEGMENT PARA COMMON ‘DATA2’ DB 102H DUP(1) ENDS
【例】定义等价符号名。 CON EQU 256 DATA EQU CON+2 ALPHA EQU 7 B EQU [BP+8] P8 EQU DS:[BP+8]

汇编语言第4章汇编语言

汇编语言第4章汇编语言

4 8 汇编语言第4章汇编语言
10
近类型 (NEAR)
-1
远类型 (FAR)
-2
2. 操作符
操作符可以是指令助记符, 伪指令助记符, 宏指令符号。
3. 操作数
操作数是操作符操作的对象,可以是数据 本身,也可以是标号、寄存器名或算术表达式。
4. 注释
注释是对指令功能的说明,目的实施自 己或他人在阅读分析程序是方便。
第四章 汇编语言
4.1 汇编语句格式 4.2 汇编语言中数据的表示方法 4.3 运算符号 4.4 伪指令 4.5 汇编语言的上机过程
汇编语言第4章汇编语言
4.1 汇编语句格式
4.1.1 字符集 4.1.2 汇编语句格式
汇编语言第4章汇编语言
4.1.1 字符集
Microsoft的宏汇编语言由下列字符组成: (1)英文字母:A~Z和a~z。 (2)数字字符:0~9。 (3)算术运算符:+,-,*,/。 (4)关系运算符:<,=,>。 (5)分隔符:,,:,;,(,),[,], (空格),TAB(制表符)。 (6)控制符:CR(回车),LF(换行),FF(换页)。 (7)其它字符:$,&,_(下划线),.,@,%,!。
SIZE LAB= (L汇E编N语G言T第H4章汇L编A语B言) * (TYPE LAB)
4.3.5 组合算符
1. PTR 用来建立或临时改变存储器操作数的类型。 2. THIS 用来为一个标号建立一个新的类型。
MOV [BX],10H MOV BYTE PTR[BX],10H MOV WORD PTR[BX],10H A1 DB 10H,20H MOV AX,A1 MOV AX,WORD PTR A1 B1 EQU THIS WORD A2 DB 21H,34H MOV AX,B1

汇编语言学习第4章

汇编语言学习第4章

不同而不同。
(名字项,常称为标号) 标号是程序设计人员自己定义的表示符号,用来表示本语句的符号地址
(即该指令的偏移地址,也就是该单元与其所处段基址的偏移量)是可有
可无的,只有当需要用符号地址来访问该语句时才需要。 2.operation(操作符)
操作符项可以是指令、伪操作或宏指令的助记符。对于指令,作用是指出
1.等价语句EQU
等价语句的一般使用格式如下: SYMBOL EQU EXPRESSION
作用是用左边的符号名代表右边的表达式。
注意:等价语句不会给符号名分配存储空间,符号名不能与其它符号同名, 也不能被重新定义。
(1)用符号名代表常量或表达式
例4.14 (2)用符号名代表字符串 例4.15 (3)用符号名代表关键字或指令助记符 例4.16
例4.21
2.定义字变量的伪指令为DW
一个变量占一个字空间
例4.22:WORD1 DW DW 89H, 1909H, -1 0ABCDH, ?, 0
上面的定义语句经汇编后所产生出的内存单元分配情况如下:
… 89 00 09 19 FF FF CD AB --00 00 …
例4.23
3.双字变量定义伪指令DD 每个双字变量占用二个连续的字单元(四个字节)。
功能和作用,而不应该只写出指令的动作。
4.2运算符号
4.2.1算术运算符
算术运算符有:+、-、*、/和MOD。 其中: +、-、*、/就是我们算术中常用的加、减、乘、除。 MOD算符是模运算。指除法运算后得到的余数。 例如:5 MOD 2为1。 注意:算术运算符可以用于数字表达式或地址表达式中,但当它用于地址 表达式时,只有当其结果有明确的物理意义时才是有效的。 例如:将两个地址相乘或相除是无意义的。地址可以做加减运算,但也必 须注意物理意义。例如把两个不同段的地址相加减也是无意义的。 例4.1 例4.2

汇编教程 第四章 汇编语言

汇编教程 第四章 汇编语言
18
数据定义伪指令
用于定义变量,即内存单元或数据区。 格式:
变量名 数据定义伪指令 操作数,操作数,… 操作数,操作数,
数据定义伪指令有如下几种: DB 定义字节 定义字节 DW 定义字 定义字 DD 定义双字 定义双字 DF 定义6字节 定义6 DQ 定义8字节 定义8 DT 定义10字节 定义10字节 操作数可以是常数、变量或表达式
10
语句的构成元素: 标号——指令的符号地址,用来代表指令在存储器中的 标号——指令的符号地址,用来代表指令在存储器中的 地址。只能出现在指令性语句中,标号后应加上冒号。 地址。只能出现在指令性语句中,标号后应加上冒号。 名字——段、过程、变量的名字,用来代表它们在存储 名字——段、过程、变量的名字,用来代表它们在存储 器中的地址。只能出现在指示性语句中,名字后不加冒 器中的地址。只能出现在指示性语句中,名字后不加冒 号。 指令助记符——8086助记符、伪指令 指令助记符——8086助记符、伪指令 操作数——即指令的操作对象 操作数——即指令的操作对象 – 对指令性语句——0,1,2个 对指令性语句——0 – 对指示性语句——根据需要而定 对指示性语句——根据需要而定 – 操作数之间以逗号分隔 – 操作数可以是:寄存器、存储单元、常数或表达式 例如:AX,[DI+BX+10],200,16*8+TABLE,等等
名字
标号
13
DOS系统功能调用 DOS系统功能调用 DOS功能调用以中断服务程序的形式向 DOS功能调用以中断服务程序的形式向 用户提供大量子程序,供用户编程时调用。 一般调用DOS的 一般调用DOS的INT 21H提供的子程序。 21H提供的子程序。 系统功能调用格式:P127 系统功能调用格式:P127 –在AH中设置调用的功能号; AH中设置调用的功能号; –在指定的寄存器中设置入口参数; –执行INT 21H指令,调用功能子程序; 执行INT 21H指令,调用功能子程序; –如果需要,分析出口参数。

汇编语言程序设计教程第4章

汇编语言程序设计教程第4章




例4.2 在指令中说明内存单元的类型,以便操 作数长度匹配。 MOV [BX],AX 以下指令是错误的: MOV [BX],0 指令改写为: MOV BYTE PTR[BX],0 MOV WORD PTR[BX],0


例4.3 段地址寄存器的传送 MOV AX, DATA_SEG MOV DS, AX 段地址寄存器须通过寄存器得到段地址,不能直接由符号地址、 段寄存器、立即数得到。 以下指令是错误的: MOV DS, DATA_SEG ;段寄存器不接受符号地址 MOV DS, ES ;段寄存器之间不能直接传送 MOV DS, 1234 ;段寄存器不接受立即数 MOV CS, AX ;指令合法,但代码段寄存器不能赋值





短格式:OUT DX,AL (字节) ;0000-FFFFH OUT DX,AX (字) 操作: (DX) ← AL (DX) ← AX 功能:把累加器的数据输出到DX指向的端口。

例4.12 写端口 OUT 61H, AL OUT DX, AL
(3)XLAT换码指令

格式:XLAT 操作:AL←(BX+AL) 功能:把BX+AL的值作为有效地址,取出其 中的一个字节送AL。
(4)XCHG交换指令

格式: XCHG OPR1, OPR2 操作: (OPR1) (OPR2) 功能:把两个操作数互换位置。 遵循双操作数指令的规定,但操作数不能为立 即数。


例4.9 XCHG AX, BX ;两个寄存器长度相等 XCHG AX, [BX] ;AX要求[BX]也取字单元 XCHG AX, VAR ;VAR 必须是字变量 以下指令是错误的: XCHG AX, 5 ;显然操作数不能为立即数 XCHG [BX], VAR ;操作数不能同为内存单元 XCHG AX, BH ;操作数长度要一致

汇编语言程序设计第4章

汇编语言程序设计第4章

这条语句指出所定义的CODE代码段到此结束。
9)
END
START
END是保留字,指示整个程序模块到此结束。 按上述格式写出的一个程序如例4-2所示:
第4章 伪指令及汇编语言源程序结构
例4-2 NAME FIRST_DATA STRING_DA FIRST_DATA SIMPLE_EXAMPLE SEGMENT DB 'This is My First Program $' ENDS ;要显示的字符串
令语句的功能相当于若干条指令语句的功能。宏指令语句实际
上是一个指令序列,汇编时产生对应的目标代码序列。
第4章 伪指令及汇编语言源程序结构 注释语句——以分号“;”开始的说明性语句,汇编程序 不予以处理,只起注释作用,使程序易于理解。 空行语句——为保持程序书写清晰,仅包含回车换行符的 语句行。 注意:有关逻辑段的定义和说明伪指令,以及其他伪指令/
80x86系列微处理器的存储器采用了分段管理的方法,其汇
编语言是以逻辑段为基础,按段的概念来组织代码和数据的,
汇编语言源程序的结构特点有:
(1) 由若干逻辑段组成,各逻辑段由伪指令语句定义和说
明。
(2) 整个源程序以END伪指令结束。
第4章 伪指令及汇编语言源程序结构 (3) 每个逻辑段由语句序列组成,各语句可以是: 指令语句——完成一定操作功能,能够翻译成机器代码 的语句,即为第3章介绍的指令所形成的语句。指令语句对应 于CPU指令系统中的一条指令,因此为可执行语句。汇编时汇
是程序名称,用户可用任意一个标识符为程序命名。
第4章 伪指令及汇编语言源程序结构 2) DATA SEGMENT (数据定义伪指令序列) … DATA ENDS

汇编语言第四章:指令系统和寻址方式

汇编语言第四章:指令系统和寻址方式

第四章 第一章 指令系统和寻址方式 基础知识
第四章 第一章 指令系统和寻址方式 基础知识
第四章 第一章 指令系统和寻址方式 基础知识
根据d的不同进行选取
第四章 第一章 指令系统和寻址方式 基础知识
d=1时的操作
第四章 第一章 指令系统和寻址方式 基础知识
d=0时的操作
第四章 第一章 指令系统和寻址方式 基础知识
如果2000H单元在附加段,指令为: MOV AX, ES:[2000H] 段跨越前缀: 段寄存器名: —— 改变默认使用的段寄存器
第四章 第一章 指令系统和寻址方式 基础知识
可以使用属性操作符 type PTR 来进行属性说明
第四章 第一章 指令系统和寻址方式 基础知识
(4)寄存器间接寻址方式 (Register Indirect Addressing ) 特点: (寄存器) = 操作数的偏移地址 计算操作数物理地址的公式:
next
(7)相对基址变址寻址方式 ( Relative Based Index Addressing ) 特点:(基址寄存器) + (变址寄存器)+位移量 = 操作数的偏移地址
例:设 ( SS ) = 3000H ( BP ) = 2000H ARRAY = 0250H ( SI ) = 1000H MOV AX, ARRAY[BP][SI] 要访问的存储单元物理地址为: 30000H+2000H +0250+1000H 30000H = 33250H
第四章 第一章 指令系统和寻址方式 基础知识
第四章 第一章 指令系统和寻址方式 基础知识
第四章 第一章 指令系统和寻址方式 基础知识
Байду номын сангаас

汇编语言第四章

汇编语言第四章

; (DL)变为ASCII码
分支程序设计注意
选择合适的转移指令
如:CMP AX,1
JL L1
JL为有符号转移指令,(AX)<1则转移。若JL换为JB, 则为无符号转移指令,该转移的反而不转移。
4.2 分支程序设计注意
为每个分支安排出口
如:实现(AL)≥0,′+′→DL; (AL)<0,′-′→DL;
4.3.3 循环程序设计
开始 取数→BX 初始化循环计数值 LOOP1 BX循环左移4位 最右边的4位转为ASCII码 N
ASCII在A~F? Y ASCII码再加7 显示一个字符 循环计数值减1 N 循环计数=0? 结束
Y
4.3.3 循环程序设计
STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT BUF DW 1234H DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA, SS: STACK BEGIN:MOV AX, DATA MOV DS, AX MOV BX, BUF; 取要显示 的数 MOV CH, 4; 循环次数 LOOP1: MOV CL, 4 ROL BX, CL; 高4位到低4 位 MOV AL, BL AND AL, 0FH ADD AL, 30H; 得到数的 ASCII CMP AL, 3AH; 数>9? JL DISP; 在0~9之间 ADD AL, 7; 在A~F之间 MOV DL, AL; 显示 MOV AH, 2 INT 21H DEC CH JNZ LOOP1 MOV AH,4CH INT 21H ENDS END BEGIN
… MOV BL, 0; BL中存放1的个数 MOV CL, 16 L1: SAL AX, 1; 算术左移,b15→CF JNC L2 INC BL; CF=1,(BL)+1→CL L2: DEC CL JNZ L1 … 上述方法必须循环16次。

汇编语言第4章王爽版程序设计(字符串)

汇编语言第4章王爽版程序设计(字符串)

mov cx,100 cld rep movsb
mov ah,4ch
int 21h code ends end start
例4.14 串指令LODS和STOS的应用例子。在block数据区有 一组字数据,要求将正数和负数分开存放,并统计个数
DATA SEGMENT block dw count ;block的元素个数 Dw 1234h,4321h,0abcdh,0b645h,8367h,3456h,6845h,0fffeh count = ($-block)/2 -1 buf1 dw 0 ;正数的个数 dw count dup (0) ;存放正数 buf2 dw 0 ;负数的个数 dw count dup (0) ;存放负数 DATA ENDS code segment assume cs:code,ds:data, es:data start: mov ax,data mov ds,ax mov es,ax
为什么要用:数据传送类指令每次只能传送一个数据,若要传 送大批数据就需要重复编程(通过循环来实现),这样就浪 费了大量的时间和空间。为此8086提供了一组处理内存中连 续存放数据的串指令,这就是串操作指令。
串寻址方式
名称:“S”、“B”、“W” 格式:提供3种格式,常用的有2种。 隐含的都是双操作数指令 源操作数用寄存器SI寻址,默认在数据段DS中,
对string1和string2两个字符串
进行比较,若串相同,在result 例4:字符串比较 单元中置0,否则置-1 mov si,offset string1 mov di,offset string2 mov cx,count cld again: cmpsb ;比较两个字符 jnz unmat ;有不同字符,转移 dec cx jnz again ;进行下一个字符比较 ;字符串相等,设置00h Loop again mov al,0 jmp output ;转向output unmat: mov al,0ffh ;设置ffh output: mov result,al ;输出结果标记

汇编语言第四章_(1,2)

汇编语言第四章_(1,2)

A db 'A','B' B dw A+1 ;思考:b单元存储的值?
4).
? 在程序中使用“?”为变量预留空间而不
赋初值。例如 SUM 5). DB ?
<n> DUP(操作数,……) 若要对某些数据重复多次,可以使用这种
格式。其功能是把( )中的内容复制n次。DUP 可以嵌套。如: N DB 5 DUP(1,2)
SEG SEG
变量 标号
OFFSET 变量 OFFSET 标号
注[1]:若使用TYPE 变量,则返回一个数据项占用的字节数。 例若变量用DB定义,则返回1;用DW定义返回2……。若使用 TYPE 标号,则NEAR型标号返回-1,FAR型标号返回-2。 注[2]:SIZE=TYPE*LENGTH,只有在变量用<n> dup (操作 数,…)时表示该变量占用的字节数。其它情况失去实际意义。
判断对错
MOV [DI],6
CMP 15,BX
EQU 、 PTR 、 THIS 都为变量分配存
储空间
思考:此段代码执行后AX的值为多少?
TAB
DW
10,20,30,40,50
NUM DW 3 : MOV BX,OFFSET TAB ADD BX, NUM MOV AX, [BX]
4.4
屏幕显示和键盘输入(83页)
3.操作数 操作数可以是数字常量、数值表达
式、字符串常量、地址表达式、?、<n>
DUP(操作数,……)形式。
1).数字常量及数值表达式 操作数可以是数值表达式。数字中
若出现字母形式,不区分大小写。
如下所示: 十进制数:以D结尾。
2). 字符串常量 在汇编语言中字符需要用单引号括起
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2012-8-12 24
4.3 汇编语言程序格式
3.关系运算符 1) 运算符包括EQ、NE、LT、GT、LE、GE。 2)运算结果为一个数字值。关系成立结果为0FFFFH,结 果不成立结果为0。 例:MOV AX,1234H GT 1024H MOV BX,0LT0 相当于 MOV AX,0FFFFH MOV BX,0
2012-8-12 17
4.2 伪指令
六、过程定义伪指令 可以把具有独立功能的程序段定义为过程 (相当于高级语言中的子程序),供其它程序 调用。 过程定义的语法格式为: <过程名> PROC [NEAR]/FAR ┆ RET <过程名> ENDP
2012-8-12 18
4.3 汇编语言程序格式
语句的种类和格式 表达式的表示
2012-8-12 12
4.2 伪指令
7)定义其他类型数据项DQ,DT DQ定义8字节数据项 DT定义10字节数据项 2.重复操作符DUP 格式:count DUP (表达式[,表达式…]) 1)可以用来定义数组,定义数据缓冲区; 2)count是重复次数; 3)允许嵌套; 例:BUF DB 3 DUP(0);BUF DB 0,0,0 例:BUF1 DB 3,2,5 DUP(1,2,2 DUP(0))
2012-8-12
7
4.2 伪指令
3.SEGMENT伪操作可增加说明 格式:段名 SEGMENT [定位类型][组合类型][使用类 型][类别] …….. 段名 ENDS 1)当需要连接程序把本程序与其他程序模块连接时,需 要使用这些说明。 2)定位类型:说明段的起始地址应有怎样的边界值。 3)组合类型:说明程序连接时的段合并方法。 4)使用类型:说明是16位或32位寻址方式。 5)类别:在引号中给出连接时组成段组的类别。
2012-8-12
23
4.3 汇编语言程序格式
三、操作数项 操作数项可以是由标号,变量,常数和表达式组成. 1.常数 1)十进制、十六进制、二进制、八进制数 D、H、B、Q 2)字符串常数 用引号括起来的一个或多个字符,只是包括在引号中的字 符的ASCII代码值。 例:‘A’的值是41H,’ab’的值是6162H 2.算术运算符 有+、-、*、/、MOD(模)、+(正)、-(负),意义和高 级语言中同样运算符的意义相似。 例:ADD AX,-3*3+32H/5
伪操作:又称伪指令,在程序运行期间不被执行, 只是在汇编程序对源程序汇编期间由汇编程序 处理的操作,他们可以完成如定义程序模式、 定义数据、分配存储区、指示程序结束等功能。
2012-8-12
4
4.2 伪指令
一.段定义伪操作 1.段开始和结束语句 格式:段名 SEGMENT …….. 段名 ENDS 1)段开始语句中的段名与结束语句中的段名要相同; 2)删节号部分,对于数据段、附加段和堆栈段来说, 一般是存储单元的定义、分配等伪指令,对于代 码段是指令及伪指令。
2012-8-12 5
4.2 伪指令
2.段使用设定语句 格式:ASSUME 段寄存器名:段名[,段寄存器名: 段名..] 1)ASSUME语句说明段寄存器与程序段的对应关系; 2)段名必须是由SEGMENT定义的段中的段名。 3)ASSUME语句是伪指令语句,它不能把段地址装 入段寄存器,在代码段中还需要通过指令语句 来给段寄存器赋值.但代码段不需要这么做。 4) ASSUME NOTHING,可取消前面由ASSUME所指定 的段寄存器。
2012-8-12 10
4.2 伪指令
三.数据定义及存储器分配伪操作 1.数据定义语句 3)定义字数据项DW 每一字数据项占用两个字节存储单元 例:FLAG DW 2FCDH,1024,-1 VECT DW 0 DW 2047 4)定义双字数据项DD 每一双字数据项要占用四个字节存储单元 例:VECTOR DD 4 FARPTR DD 12345678H,0
2012-8-12 29
例:有如下数据段定义: VARW DW 1234H,5678H VARB DB 3,4 VARD DD 12345678H BUFF DB 10 DUP(?) MESS DB ‘HELLO’ 设:变量VARW的逻辑地址为2000H:0100H 1)SEG VARW=2000H 2)OFFSET VARW=0100H,OFFSET VARB=0104H 3)TYPE VARW=2,TYPE VARB=1 TYPE VARD=4 4)LENGTH VARW=1,LENGTH BUFF=10 LENGTH MESS=1 5)SIZE VARW=2,SIZE BUFF=10,SIZE MESS=1
2012-8-12 13
DATAB 例: DATAB DB 18H,-1,30 DATAW DATAW DW 18H,2A45H DATAD DD 18H,2F3A124BH DATAD 在内存中的存储情况如图所示。
18 FF 1E 18 00 45 2A 18 00 00 00 4B 12 3A 2F
2012-8-12
8
4.2 伪指令
二、程序结束伪操作 格式:END [标号] 1)告诉汇编程序源程序到此为止,不再对其后的 任何语句进行汇编; 2)标号是一个已在程序中定义过的标号,表示程 序要从标号所对应的指令开始执行; 3)源程序必须有一个END语句.
2012-8-12
9
4.2 伪指令
三.数据定义及存储器分配伪操作 1.数据定义语句 1)格式:[变量名] 数据定义符 表达式[,表达式…] ; 注释 变量名代表该语句所定义若干数据项中的第一个数据 项. 变量名和注释都可缺省。 2)定义字节数据项DB 每一字节数据项占用一个字节存储单元 例:COUNT DB 100 DB 0DH,0AH,’$’ TABLE DB 0,2,3
2012-8-12 20
该程序的功能是完成两个字节数据相加。 DATA SEGMENT ;段定义开始(DATA段) BUF1 DB 34H ;第1个加数 BUF2 DB 2AH ;第2个加数 SUM DB ? ;准备用来存放和数的单元 伪指令语句 DATA ENDS ;段定义结束(DATA段) CODE SEGMENT ;段定义开始(CODE段) ASSUME CS:CODE,DS:DATA ;规定DATA、CODE分别为数据段和代码段 START: MOV AX,DATA MOV DS,AX ;给数据段寄存器DS赋值 MOV AL,BUF1 ;取第1个加数 ADD AL,BUF2 ;和第2个加数相加 指令语句 MOV SUM,AL ;存放结果 MOV AH,4CH ; INT 21H ;返回DOS状态 CODE ENDS ;段定义结束(CODE段) END START ;整个源程序结束
2012-8-12
26
4.3 汇编语言程序格式
5.HIGH和LOW运算符 1)HIGH 表达式:数值表达式的高8位 2)LOW 表达式:数值表达式的低8位 例: MOV AX,HIGH 1234H MOV AX,LOW (1234H+5) 相当于 MOV AX,12H MOV AX,39H
2012-8-12
2012-8-12
25
4.3 汇编语言程序格式
4.逻辑运算符 1)运算符包括AND(与)、OR(或)、XOR(异或)、 NOT(非)、SHL(左移位)、SHR(右移位) 2)运算结果是数值。 例:MOV AX,1 SHL 3 MOV CX,3 AND 47H 相当于 MOV AX,8 MOV CX,3
2012-8-12 6
例1: DSEG1 DSEG1 DSEG2 DSEG2 CSEG
START:
CSEG
SEGMENT …….. ENDS SEGMENT …… ENDS SEGMENT ASSUME CS:CSEG,DS:DSEG1,SS:SSEG2 MOV AX,DSEG1 MOV DS,AX MOV AX,DSEG2 MOV SS,AX ……. ENDS END START
2012-8-12 22
4.3 汇编语言程序格式
二、变量和标号 1、变量和标号代表存储单元的符号地址。 2、变量表示的存储单元中存放数值,在除代码段以外的其 他段中定义,后面不跟冒号,经常出现在操作数字段。 3、标号表示的存储单元中存放指令代码,在代码段中定义, 后面跟冒号,经常在转移指令或CALL指令使用。 4、属性 1)段值:变量或标号对应存储单元所在段的段值; 2)偏移:变量或标号对应存储单元的起始地址的段内偏移; 2)类型:变量类型有BYTE,WORD,DWORD;标号类型有NEAR,FAR
27
4.3 汇编语言程序格式
6.析值操作符:数值回送操作符 1) SEG:返回变量所在段的段值 格式:SEG 变量名或符号 2)OFFSET:返回变量或标号的偏移 格式:OFFSET 变量名或标号
2012-8-12
28
4.3 汇编语言程序格式
6.析值操作符:数值回送操作符 3)TYPE:返回变量或标号的类型 格式:TYPE 变量名或标号 其中:BYTE WORD DWORD NEAR FAR 1 2 4 -1 -2 4)LENGTH:返回利用DUP定义的数组中元素的个数, 亦即count值. 格式: LENGTH 变量名 5)SIZE:返回用DUP定义的数组占用的字节数. 即:SIZE 变量=(LENGTH 变量)*(TYPE 变量) 格式:SIZE 变量名
第四章 汇编语言程序格式
本章重点:1、汇编语言语句格式 2、伪指令 3、源程序结构形式 本章作业: P155 4.1 4.5 4.11 4.13 4.14 4.16
2012-8-12 1
4.1汇编程序功能
汇编源程序 .ASM 编辑程序 如:全屏幕编辑工具 EDIT 汇编程序 如:宏汇编程序 MASM 连接程序 如:连接程序LINK
2012-8-12
19
相关文档
最新文档