汇编语言程序设计基本方法

合集下载

汇编语言程序设计

汇编语言程序设计

6)组合运算符(属性修改运算符) ① PTR运算符:运算符PTR可以指定或修改存储器操作数的 类型。注意,这种修改是临时性的,仅在该语句内有效。 下面是使用PTR运算符的例子: 例10 INC BYTE PTR[BX] 该语句的目的操作数是内存单元,用寄存器作为地址指 针。如果仅仅使用[BX]来表示该操作数,则汇编该语句时 ,不能确定该存储单元是字节单元还是字单元。因此,必 须使用BYTE PTR说明它为字节操作数(若为字操作数, 则使用WORD PTR说明)。
4)分析运算符:分析运算符有:SEG、OFFSET、TYPE、 LENGTH和SIZE。 ① SEG运算符:利用SEG运算符可以得到一个标号或变量的段 基值。下面的指令将ARRAY的段基值送给DS寄存器。 例4 MOV AX,SEG ARRAY MOV DS,AX ② OFFSET运算符:利用OFFSET运算符可以得到一个标号或 变量的偏移量。下面的指令将STRING的偏移地址送给DX。 例5 MOV DX,OFFSET STRING ③ TYPE运算符:运算符TYPE的运算结果是一个数值,这个数 值与操作数类型的对应关系见表4-1。
4.1.3
汇编语言的表达式
(3)表达式。表达式是操作数常见的形式,它由常数、变量 、标号通过操作运算符连接而成。 汇编语言中有:算术运算符、逻辑运算符和关系运算符等 。 1)算术运算符:常用的有:+(加)、–(减)、*(乘)、/ (除)和MOD(模运算)等,算术运算的结果是一个数值 。 例1 MOV AX,VARX+2 表示VARX的地址加2后对应的存储字单元内容送给AX。 2)逻辑运算符:AND(逻辑“与”)、OR(逻辑“或”) 、NOT(逻辑“非”)和XOR(逻辑“异或”)。逻辑运算 用于数值表达式中对数值进行按位逻辑运算,并得到一个数 值结果。 例2 MOV AL,0FH AND 35H 表示将0FH与35H按位相与后得到05H送给AL, 这条指令 与MOV AL, 05H 等效。

汇编语言分支结构程序设计技巧

汇编语言分支结构程序设计技巧

《 编语 言程 序 设 计 》 高 等 院 校计 算 机 专 业 教 学 体 系 中的 汇 是 门重 要 的专 业 基 础 课 程 r1 汇编 语 言是 能 够 充 分 发 挥计 算 机 1。 所 有硬 件 特 性 并 能 直 接 控 制 硬 件 的 最 快 、 有 效 的语 言 。 和 计 最 它 算 机 的 硬 件 系 统 紧 密 联 系 .本 文 主 要 讨 论 8 8/0 8的 汇 编 语 0 68 8 言 。汇 编 语 言 是 结 构 化 的 『1结 构 化 编程 技 术 简 化 了程 序 实 现 , 2,

指 令 的通 用格 式是 : 件 标 号 , 件 转 移 指 令 的 功 能 是 : 果 J条 条 如 条 件 成 立 , 转 到 标 号 所 标 明 的指 令 去 执 行 ; 果 条 件 不 成 立 , 则 如 则顺序执行。 由此 可 以得 到 , 号 处 是 ” ” 标 Y 分支 , 紧跟 条件 转 移 指
这 里我 们 以这 样 的一 个 例 子 为 例 进 行 介 绍 : 已定 义 了 两个 整 数 变 量 A和 B. 编 写程 序完 成 以下 功 能 : 试 1 若 两 个 数 中 有 一 个 是 奇 数 , 将 奇 数 存 入 A 中 , 数 存 ) 则 偶
入 B中。
2 若 两个 数 均 为 奇 数 . 将 两 数 均 加 l 存 回原 变量 。 ) 则 后 3 若 两个 数 均为 偶 数 . 两 个 变 量 均 不 变 。 ) 则 首先 , 我们 对 题 意 进 行 分 析 。变 量 A 和 B的 奇偶 情 况 有 四
要 是 用条 件 转 移 指 令 来 实现 的 , 文 结 合 汇 编 语 言 中条 件 转 移 指 令 的特 点及 作 者 多年 的 教 学 经验 提 出 了设 计 分 支结 构程 序 本

汇编语言程序设计方法

汇编语言程序设计方法

C 名字前加 下划线
从右到左 调用程序

SYSCALL
从右到左 被调用程序

STDCALL 名字前加
下划线 (注)
被调用程序

PASCAL 名字变大写
BASIC 名字大写
FORTRAN 名字大写
从左到右 被调用程序

从左到右 被调用程序

从左到右 被调用程序

12
PROTO是过程声明伪指令,用于事先声明过程的结构。它的格 式如下:
结束处理部分
AGAIN: ADD AX,CX
;从20,19,……2,1倒序累加到AX
LOOP AGAIN ;每循环一遍,CX自动减1
MOV SUM,AX ;将累加和送入SUM单元
.EXIT 0
END
初始化部分
循环结束? 是 否
工作部分 修改部分 结束处理部分
7
二、用MASM 6.x循环控制伪指令实现循环结构
.CODE
.STARTUP
MOV AL, B
IMUL AL
MOV BX,AX MOV AL,A
;BX中为B的平方
IMUL C
MOV CX,4
IMUL CX
;AX中为4AC
.IF SWORD PTR BX>=AX ;比较B的平方和4AC的大小
MOV SIGN,1
;条件成立,SIGN得到1
.ELSE
MOV SIGN,0
.IF 条件表达式 ;条件为真(非0),执行分支体
分支体
[.ELSEIF 条件表达式
分支体
;前面IF条件为假,并且当前ELSEIF条件为真执行分支体
[.ELSE
;前面IF条件为假执行分支体

汇编语言程序设计的基本方法

汇编语言程序设计的基本方法

01
例2 编写程序,计算(W-(X*Y+Z-100))/W,其中W、X、Y、Z均为16位带符号数,计算结果的商存入AX,余数存入DX。
02
例3 把非压缩十进制数DAT1转换为压缩十进制数
例2编写程序,计算(W-(X*Y+Z-100))/W,其中W、X、Y、Z均为16位带符号数,计算结果的商存入AX,余数存入DX。
通常,编制一个汇编语言源程序应按如下步骤进行:
1
明确任务,确定算法。
2
绘制流程图(包括确定内存单元和分配寄存器)。
3
根据流程图编写汇编语言程序。
4
上机调试程序。
5
程序的基本结构有四种:顺序结构、分支结构、循环结构和子程序结构。
6
5.6 汇编语言程序设计的基本方法
5.6.1 顺序程序设计
顺序结构也称线性结构,其特点是其中的语句或结构被连续执行。 顺序程序是最简单的,也是最基本的一种程序结构。这种结构的程序从开始到结尾一直是顺序执行的,中途没有任何分支。从这种结构的流程图来看,除了有一个起始框,一个终止框外,就是若干执行框,没有判断框。指令指针IP值线形增加,IP=IP+1
条件
N

例4用比较指令和条件转移指令实现两路分支的程序段。
两路分支程序设计
例4用比较指令和条件转移指令实现两路分支的程序段。 … MOV AX,M ;假定M和N为有符号数 MOV BX,N CMP AX,BX ;比较 M和N的大小,影响标志位,准备条件 JG NEXT ;M>N时转移,注意若M、N为无符号数时用JA指令 …… ;分支程序2 JMP DONE NEXT: …… ;分支程序1 …… DONE:RET
X+20 (X≥0)

汇编语言程序设计基本命令

汇编语言程序设计基本命令

汇编语言程序设计基本命令汇编语言是一种底层的编程语言,直接操作计算机硬件,其指令由一系列的机器码组成。

在汇编语言程序设计中,我们需要了解一些基本的命令,包括数据传送指令、算术运算指令、控制转移指令等,下面就对这些命令做一详细的介绍。

1.数据传送指令在汇编语言中,数据传送指令用来将数据从一个位置复制到另一个位置,常用的数据传送指令有MOV、LEA和XCHG。

-MOV指令:将源操作数的值复制给目标操作数,格式为MOV目标操作数,源操作数。

-LEA指令:用来将有效地址(即内存中的地址)传送给寄存器,格式为LEA目标操作数,源操作数。

-XCHG指令:交换两个操作数的值,格式为XCHG目标操作数,源操作数。

2.算术运算指令在汇编语言中,我们可以使用一系列算术运算指令来对数据进行运算和处理,常见的算术运算指令有ADD、SUB、MUL和DIV等。

-ADD指令:用于进行加法运算,格式为ADD目标操作数,源操作数。

-SUB指令:用于进行减法运算,格式为SUB目标操作数,源操作数。

-MUL指令:用于进行乘法运算,格式为MUL目标操作数,源操作数。

-DIV指令:用于进行除法运算,格式为DIV目标操作数,源操作数。

控制转移指令用于改变程序的执行流程,常见的控制转移指令有JMP、JZ、JE、JNE等。

-JMP指令:用于无条件地跳转到目标地址继续执行,格式为JMP目标地址。

-JZ指令:用于当结果为零时跳转到目标地址继续执行,格式为JZ目标地址。

-JE指令:用于当结果相等时跳转到目标地址继续执行,格式为JE目标地址。

-JNE指令:用于当结果不相等时跳转到目标地址继续执行,格式为JNE目标地址。

4.逻辑运算指令逻辑运算指令用于对数据进行逻辑运算,常见的逻辑运算指令有AND、OR、XOR和NOT等。

-AND指令:对两个操作数的对应位进行与运算,格式为AND目标操作数,源操作数。

-OR指令:对两个操作数的对应位进行或运算,格式为OR目标操作数,源操作数。

第5章 汇编语言程序

第5章 汇编语言程序

Y
条件满足?
N
处理段
例5-5 设内部RAM30H,31H单元存放两个无符号数, 将大数存在31H,小数存于30H。 ORG 1000H START:CLR C MOV A,30H SUBB A,31H JC NEXT ;次序符合,返回 MOV A,30H ;交换 XCH A,31H MOV 30H,A NEXT: NOP SJMP $ END
$
5-3 分支程序
由条件转移指令构成程序判断框,形成程序分支结构。 5-3-1 单重分支程序 一个判断决策框,程序有两条出路。 两种分支结构: 例1 求R2中补码绝对值,正数不变, 影响条件 负数变补。
MOV A,R2 JNB ACC.7,NEXT;为正数? CPL A ;负数变补 INC A MOV R2,A NEXT:SJMP NEXT ;结束
五、对源程序进行交叉汇编得到机器代码; 反汇编 —— 分析现成产品的程序,要将二进制 的机器代码语言程序翻译成汇编语言源程序。
六、程序调试。
通过微计算机的串行口(或并行口)把机器代 码传送到用户样机(或在线仿真器)进行程序 的调试和运行。
5.1.3评价程序质量的标准
(1)程序的执行时间。 (2)程序所占用的内存字节数。 (3)程序的逻辑性、可读性。 (4)程序的兼容性、可扩展性。 (5)程序的可靠性。
方法二:采用除10H取余数将BCD拆开 ORG 1000H MOV A,20H; 2B 1T MOV B,#10H ; 3B 2T DIV AB ; 1B 4T ORL B,#30H ; 3B 2T MOV 22H,B ; 3B 2T ORL A,#30H; 2B 1T MOV 21H,A ; 2B 1T SJMP $ END;7条指令、16个内存字节、13个机器周期。

第4章8086,8088微机汇编语言程序设计

第4章8086,8088微机汇编语言程序设计

2)段内偏移量(Offset) 它是标号与段起始地址之间相距的字节数,为一16位 无符号数。 3)类型(Type) 类型表示该标号所代表的指令的转移范围,分NEA R(近)与FAR(远)两种。NEAR类型的标号仅在 同一段内使用,用2字节指针给出转移的偏移量属性(即 只改变IP值,不改变CS值);而FAR类型的标号无此限 制,必须用4字节指针指出转移的段地址与段内偏移量。 当标号用作JMP或CALL等指令的目标操作数时,若 为段内转移或调用则采用NEAR类型;若为段间转移或 调用则应当采用FAR类型。 JMP FAR PTR LINE
第4章 8086/8088汇编语言程序设计
汇编语言程序设计是开发微机系统软件的基本 功,在程序设计中占有十分重要的地位。
由于汇编语言具有执行速度快和易于实现对硬件的控 制等独特的优点,所以至今它仍然是用户使用得较多的程 序设计语言。特别是在对于程序的空间和时间要求很高的 场合,以及需要直接控制设备的应用场合,汇编语言更是必 不可少了。 由于汇编语言本身的特点,本章将选择目前国内广泛 使用的IBM PC机作为基础机型,着重讨论8086/8088汇编 语言的基本语法规则和程序设计的基本方法,以掌握一般 汇编语言程序设计的初步技术。
(1)立即操作数 立即操作数在指令中直接给出,不需要使用 寄存器,也不涉及访问数据区的操作,只能作为 源操作数。立即操作数是整数,可以是1字节或 2字节。在汇编语言中,立即操作数用常量(包 括数值常量和符号常量)以及由常量与有关运算 符组成的数值表达式表示。 如:MOV BX,1000+5*3 (2)寄存器操作数 通用寄存器AX、BX、CX、DX、BP、 SP、DI、SI以及段寄存器CS、SS、D S、ES都可以作为操作数。如:MOV BX,AX

第四章-汇编语言程序的设计

第四章-汇编语言程序的设计

第四章汇编语言程序设计本章的汇编语言程序设计的主要容有:汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。

(一个单片机应用系统和其它计算机系统一样,在完成一项具体工作的时候,它要按照一定的次序,去执行操作,这些操作实际上就是由设计人员,以单片机能够接受的指令编制的程序,那么无论计算机也好,单片机也好,实际上编制程序的过程,就是用计算机来反映设计者的编程思想,那么这一章中,我们将向大家介绍怎样使用单片机指令系统来编制一些应用程序。

在介绍之前,我们还是来学习汇编语言的一些基础知识)4.1 汇编语言程序设计概述1、计算机的汇编语言以助记符表示的指令,每一条指令就是汇编语言的一条语句。

(汇编语言程序设计实际上就是使用汇编指令来编写计算机程序。

汇编语言的语句有严格的格式要求)2、汇编语言的语句格式MCS-51汇编语言的语句格式表示如下:[<标号>]: <操作码> [<操作数>]; [<注释>]标号:指令的符号地址,有了标号,程序中的其它语句才能访问该语句。

①标号是由1~8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。

②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。

(同一个标号在程序中只能定义一次,不能重复定义;一条语句可以有标号,也可以没有标号,所以是否有标号,取决于程序中是否需要访问该语句。

)操作码:规定语句执行的操作容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。

操作数:给指令的操作提供数据或地址。

注释:是对语句或程序段的解释说明。

(在单片机中,这四个部分怎么加以区分呢?使用分界符)分界符(分隔符):用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。

冒号(:)用于标号之后空格()用于操作码和操作数之间逗号(,)用于操作数之间,分割两个以上的操作数分号(;)用于注释之前。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.2.1 数据传送类指令
5. 堆栈操作指令 堆栈
PUSH 源操作数 进栈指令:先调整堆栈指针,再把源操作数压 栈。
PUSH AX PUSH [SI+5]
3.2.1 数据传送类指令
– POP 目标操作数
– 出栈指令:先将栈顶2字节送目标操作数,再
调整
堆栈指针。

POP AX

POP [SI+5]
• 指令类型: • (1) 数据传送指令 • (2) 算术运算指令 • (3) 逻辑运算指令 • (4) 移位指令 • (5) 标志处理指令和CPU控制指令 • (6) 转移和循环控制指令 • (7) 调用和返回指令 • (8) 字符串操作指令 • ( 9 ) 输入、输出指令
缩写与符号
• OPR :操作数 • SRC:源操作数 • DST:目的操作数 • REG:寄存器 • CNT:计数 • DISP:位移量 • ADDR:地址 • EA :有效地址
05H
• DATA2 DB 0FH,10H,0AH
• DATA3 DB 5 DUP(?)
• MOV
AX, BL
• MOV
AL, DATA1
• MOV
BX, DATA3[SI]
• 可以采用如下方式纠正:
• MOV
AL, BYTE PTR DATA1
内容归纳
• (1)两操作数进行数据传送的正常通路
• 寄存器间接寻址、寄存器相对寻址、基
4.2.1 数据传送类指令
• 通用传送指令包括: • 传送指令 • 进栈指令 • 出栈指令 • 交换指令
1. 传送指令(MOV)
• 功能:将源操作数SRC的一个字节或一个字 传送到目的操作数DST所指单元。
• 格式:MOV DST,SRC ; (DST)(SRC) • 其中SRC表示源操作数,DST表示目的操作
入寄存器REG中
比较: MOV AX,10H[DI] LEA AX,10H[DI] (DI)=0500H,(DS)=0200H
3.2.1 数据传送类指令
3. 取地址指针指令 LDS/LES目标寄存器, 源操作数 指针传送指令 ADDR DD 1A2B3C4DH LDS SI, ADDR 4. 数据交换指令 XCHG 操作数1, 操作数2 交换指令,操作数1、2不能同为内存操作数 XCHG AX, [SI+0400H]
• DATA3 DW 10H DUP(?)
• 相应传送指令:
• MOV AX,DATA1
• MOV DATA3,BX
• MOV AL,DATA2[DI] • MOV DATA3[SI],DX • MOV CX,LENGTH DATA3 • MOV BX,SIZE DATA3 • MOV SI,OFFSET DATA2 • 指令中传送的是一个字还是一个字节,
AX,[BX]+DISP
• (4) 段寄存器不是DS,而是ES时,用如下 方式表示:
• MOV AX, ES:[SI]

对BP寄存器
• MOV AL, DATA2[BP];对应DS段
• MOV AL, 10[BP]; 对应SS段
3.2.1 数据传送类指令
2、取有效地址指令(LEA) 将源操作数SRC的有效地址(偏移地址)送
• 例如: • MOV • MOV • MOV • MOV • MOV • MOV • MOV
AX,BX AL,DL AX,02 SI,[BX] AL,4[DI] AX,[BX+2] [BX][DI],DX
• 变量的定义:
• DATA1
DW
20H,30H
• DATA2
DB 50H,60H,70H
通常由操作数的类型确定。
• 下列指令中,没有确定的类型,是错误 的。
• MOV DATA3[SI],02H • MOV 2[SI],AL • MOV 4[DI],02
• 可以采用如下方式纠正: • MOV BYTE PTR 4[DI],02
• 如果两个操作数的类型不一致,也是错 误的:
• DATA1 DW
– PUSHF
– POPF – 16位标志寄存器进栈/出栈指令
数。
• 源操作数:通用寄存器、段寄存器、立即数 和内存单元。
• 目的操作数:通用寄存器、段寄存器和内存 单元。
• 常用的六种格式 • (1)通用寄存器之间 • (2)通用寄存器和存储单元之间 • (3)通用寄存器和段寄存器之间 • (4)段寄存器和存储单元之间 • (5)立即数传送到通用寄存器 • (6)立即数传送到存储单元
址变址寻址和基址变址相对寻址方式只 能使用变址寄存器DI,SI和基址寄存器 BX,BP。
• (3)寄存器相对寻址和寄存器基址变址 MOV
AX,DISP[BX]
• MOV
AX,[BX+DISP]
• MOV
AX,[BX].DISP
• MOV
相关文档
最新文档