第5章 汇编语言程序设计

合集下载

汇编语言第5章王爽版(子程序调用指令)

汇编语言第5章王爽版(子程序调用指令)

Call
add64 mov ah,4ch int 21h main endp ;主程序结束
;子过程ADD64开始 add64 proc push bp ; mov bp,sp push bx push si push di push cx pushf ;保存现场 mov si,[bp+4] ; mov bx,[bp+6] mov di,[bp+8] mov cx,[bp+10] ;读取参数 cld
结构化程序设计51子程序的概念52子程序的定义调用和返回53子程序的现场保护与参数传递54子程序设计55子程序的嵌套与递归调用56宏汇编程序设计教学基本内容51子程序的概念1子程序
第5章
结构化程序设计
教学基本内容
5.1 子程序的概念 5.2 子程序的定义、调用和返回 ** 5.3 子程序的现场保护与参数传递** 5.4 子程序设计 *
主程序和子程序间的关系:调用子程序的程序称为主调程序或 主程序,被调用的程序称为子程序。 2、程序中使用子程序的好处 子程序作为一个功能性模块,供一个程序甚至多个程序使用: 可以简化源程序结构; 提高程序的可读性与可维护性; 有利于代码复用; 提高程序的设计效率。
5.2 子程序的定义、调用和返回
1、子程序的定义:由子程序定义伪指令PROC和ENDP来完成。其 格式如下:
code SEGMENT begin: CALL sub1 CALL sub2 CALL sub3 MOV AH, 4CH INT 21H sub1 PROC 、、 RET ENDP PROC 、、 RET ENDP PROC 、、 RET ENDP
sub1 sub2
sub2
sub3
sub3

第5章 指令与指令系统和汇编语言程序设计(2)

第5章 指令与指令系统和汇编语言程序设计(2)

运行过程中,可以直接看到屏幕上显示的内容,运行过后,再用D 20F0命令看内存的20F0区域中保存的运行结果,6个大写的英文字母 已经被修改为小写字母: 0061 0062 0063 0064 0065 0066
汇编语言程序设计
1 将寄存器R2和R3的内容相加,结果存入R0。 2 将寄存器R2和R3的内容相加,如果有进位,寄存器R0的内 容置1,否则置0 3 若R1的内容是负数则置R0为-1,否则置0(提示:用TEST) 4 检测R3的是奇数,R0的内容置为1,否则置为0。(提示: 用移位检测C的方法来测量一位) 5 将内存中1000H起始的10个单元的内容取出加2送入原地址。 6 已知内存中1000H起始的10个单元中的数是ASC码,将其取 出送显示。 7 将键盘录入的数存到内存1000H单元中。 8 将键盘录入的10个数存到内存1000H-1009H。
有寄存器寻址,寄存器间接寻址等7种。
从表5.1中可以看出, (A组) INC DR 单操作数(DR的内容加1) (B组) LDRR DR,[SR] 双操作数 (DR [SR])
(4)从指令的功能区分
有运算、读写内存类指令,输入输出指令,转移 指令,子程序调用指令,置进位标志指令等。
从表5.1中可以看出, (A组) ADD DR ,SR 加运算 (B组) LDRR DR,[SR] 读写内存
41 42 43 44 45 46
A 2080
MVRD R3, 0006 ;指定被读数据的个数
MVRD R2, 20F0 ;指定被读、写数据内存区首地址
(2084) LDRR R0, [R2]
;读内存中的一个字符到R0寄存器
CALA 2100 ;调用子程序(入口地址为2100),完成显示、

单片机PPT汇编语言

单片机PPT汇编语言

ORG 2000H 90 21 00 MOV DPTR, #TAB E5 20 MOV A , 20H 93 MOVC A , @A+DPTR F5 21 MOV 21H , A 22 RET ORG 2100H 00 01 04 TAB:DB 00H,01H,04H,09H,10H,19H 微机原理与接口技术 第五章 汇编语言程序设计 09,10,19
第五章 汇编语言程序设计
5.1 5.2 5.3 5.4 5.5 概述 顺序与循环程序设计 分支程序及查表设计 子程序设计 综合编程举例
微机原理与接口技术 第五章 汇编语言程序设计
5.1
5.1.1 程序设计语言
1、机器语言 、 2、汇编语言 、 3、高级语言 、
概 述
5.1.2 汇编语言的规范
1. 汇编语言源程序的格式
概 述
例1、AA EQU R1; R1 与 AA 等值 、 等值。 则“ MOV A , AA ”与“ MOV A , Rl ”等值。 与 等值 例2、K1 EQU 40 、 DL EQU 0FA4CH MOV A, K1 ; (40)=(28H)→ A LJMP DL ; FA4CH → PC
微机原理与接口技术 第五章 汇编语言程序设计
5.1
2. 汇编语言伪指令
(4)、DB ( Define Byte ) 、 定义字节伪指令,它的功能是从指定单元开始定义( 定义字节伪指令,它的功能是从指定单元开始定义(存 码字符。 储)若干个字节的数值或 ASCll 码字符。常用于定义数据 常数表。它的格式如下: 常数表。它的格式如下: 操作码 操作数 DB 字节常数或 ASCII字符 字符
微机原理与接口技术 第五章 汇编语言程序设计
LP :

第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个机器周期。

微机原理与汇编语言实用教程_第5章_运算程序设计及应用举例

微机原理与汇编语言实用教程_第5章_运算程序设计及应用举例

/webnew/
第5章 运算程序设计及应用举例 章
5.1.4 除法指令 1.无符号数除法指令DIV (Unsigned Divide Instruction) 指令格式:DIV SRC (AX) (SRC) (AX)/(SRC)商、AH AH (AX) (AX)/ 功能:如果SRC是字节操作数,则把AX中的无符号数除以SRC,得到8位 的商送AL中,8位的余数送AH中,即:AL AL 8 AH AL (SRC)余数。 如果SRC是字操作数,则把DX和AX中的无符号数除以SRC,得到16位的 商送AX中,16位的余数送DX中,即:AX (DX,AX)/(SRC)余数。 指令对标志位的影响无定义。 (DX,AX)/(SRC)商、DX
IMUL指令除了运算对象是有符号数之外,其它都与MUL指令一样,但计算结果 不同。如果乘积的高半部分有符号扩展,则CF=OF=0,否则CF=OF=1。 例5.8 有符号数0B4H与11H相乘。 MOV AL,0B4H MOV BL,11H IMUL BL ;(AL)=0B4H=-76D ;(BL)=11H=17D ;AX)=(AL)×(BL)=(-76)×17=-1292D=0FAF4H ;CF=OF=1
/webnew/
第5章 运算程序设计及应用举例 章
例5.4 DATA SUB1 SUB2 SUB3 DATA 双精度数带借位减法运算。 SEGMENT DW 7788H,5566H DW 3344H,1122H DW 0,0 ENDS … MOV AX,SUB1 SUB AX,SUB2 MOV SUB3,AX MOV AX,SUB1+2 SBB AX,SUB2+2 MOV SUB3+2,AX …
/webnew/
第5章 运算程序设计及应用举例 章

大学计算机基础第五章

大学计算机基础第五章

大学计算机基础第五章第五章软件技术基础1.程序设计语言(1)机器语言和汇编语言由计算机硬件系统可以识别的指令组成的语言称为机器语言。

汇编语言是将机器指令映射为一些可以被人读懂的助记符。

由于计算机只能识别机器语言,所以汇编语言通常需要通过汇编程序翻译为机器语言。

汇编语言的翻译软件称为汇编程序,它可以将程序员写的助记符直接转换为机器指令,然后由计算机去识别和执行。

用机器语言编写的程序是计算机可以直接执行的程序。

用机器语言编写的程序,代码长度短,执行效率高。

但是,这种语言的缺点也很明显。

最主要的是编写机器语言程序必须要熟知CPU 的指令代码,编写程序既不方便,又容易出错,调试查错也非常困难。

而且编写的程序只能在特定的机器上运行,没有通用性。

(2)高级语言高级语言源程序翻译为指令代码有两种做法:编译或者解释。

编译通过编译程序来完成。

解释则是通过解释程序完成。

解释的结果产生可以直接执行的指令。

编译的结果是得到目标程序。

目标程序也是要经过连接才会得到可执行程序目前应用比较广泛的几种高级语言由FORTRAN/BASIC/PASCAL/C等。

(3)面向对象的语言(4)未来的语言2、语言处理程序语言处理程序是把源程序翻译成机器语言的程序,可分为三种:汇编程序、编译程序和解释程序。

(1)汇编程序把汇编语言源程序翻译成机器语言程序的程序称为汇编程序,翻译的过程称为汇编。

汇编程序在翻译源程序时,总是对源程序从头到尾一个符号一个符号地进行阅读分析,一般用两遍扫描完成对源程序的加工转换工作。

汇编语言在翻译的同时,还对各种形式的错误进行检查和分析,并反馈给用户,以便修改。

反汇编程序也是一种语言处理程序,它的功能与汇编程序相反,它能把机器语言程序转换成汇编语言程序。

(2)编译程序编译程序是把高级语言源程序(如Fortran、Pascal、C 等)翻译成目标程序(机器语言程序)的一种程序,翻译的过程称为编译。

(3)解释程序解释程序也是一种对高级语言源程序进行翻译处理及的程序。

第五章_汇编语言程序设计基础

第五章_汇编语言程序设计基础
3
§5-1 汇编语言的基本概念
汇编 语言 源程 序 汇编 程序 A ss em bl er 机器 语言 目标 程序
汇编语言指令与机器指令之间有一一对应的关系,所以汇 编语言与具体的机器密切相关,是一种面向机器的语言。 不同机器(CPU)的汇编语言不同。 为方便编程,实际的汇编程序常还提供一些除机器指令以 外的命令,被称为伪指令。伪指令(Pseudo Instruction) 仅在汇编过程中指导汇编程序如何生成目的代码,自己本 身并没有对应的机器代码。 汇编语言的指令(语句)包含两类:硬指令或真指令(指 令语句)和伪指令(指示性语句) 。
12
§5-2 汇编语言的基本语言成分
6. 综合运算符(改变属性运算符):由已存在的存储器操作数 (变量/标号)生成一个段地址和位移量相同、类型不同的新 的存储器操作数(变量/标号)。 (1) 改变变量/标号的类型: 格式: 新类型 PTR 变量/标号 功能:把PTR左边的属性赋给右边的变量/标号 [例] 设变量XVAR是字节属性,现把它的两个字节内容送 到AX中起去。 MOV AX , WORD PTR XVAR (2) 定义当前存储单元的类型: 格式: THIS 类型 功能:可用于建立新类型的存储器变量,但不分配新的存 储空间,它的段地址和位移量是汇编时的当前值。 [例] WBUFFER EQU THIS WORD BUFFER DB 100 DUP(?)
17
§5-3 汇编语言源程序的结构
(3) 段的类别属性:通常使用的类别名是‘CODE’、 ‘DATA’、‘STACK’,分别指明是代码段、数据段、 堆栈段;但也允许用户自定义类别名。类别名必须用单引 号括起来。 连接程序在组织段时,将所有同类别的段集中在一起, 进行相邻分配。 2. 段寄存器说明伪指令(ASSUME): 格式: ASSUME 段寄存器:段名 [,段寄存器:段名] 功能:告诉汇编程序,段名所指的段由那一个段寄存器寻 址,即建立段与段寄存器的关系。 说明:段寄存器的实际值(CS除外)还要由数据传送令在 执行程序时赋值。

第5章(6)微机原理与接口技术(第三版)(王忠民)

第5章(6)微机原理与接口技术(第三版)(王忠民)
E SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV DX, 9 LEA BX, ARRAY LOOP0: MOV AL, [BX] MOV SI, BX INC SI MOV CX, DX LOOP1: CMP AL, [SI] JAE NEXT XCHG AL, [SI] NEXT: INC SI LOOP LOOP1
MAIN PROC FAR ASSUME CX:CODES, DS:DATAS, SS:STACS START: PUSH DS MOV AX, 0 PUSH AX MOV AX, DATAS MOV DS, AX
第5章 汇编语言程序设计
MOV MOV LOOPT:INC ADD CMP JBE MOV MOV RET MAIN ENDP CODES ENDS END START
第5章 汇编语言程序设计
循环控制方法举例
⑴ 用计数控制循环
[例] 在xx单元开始的连续单元中存放有 10个无符号字节数,从中找出最大者送yy单元。
由题意可直接写出数据段如下:
DATA SEGMENT xx DB
49,38,65,12,97,13,55,27,28,85 yy DB ?
DATA ENDS
第5章 汇编语言程序设计
开始
BX←xx的有效地址, AL←[BX],CX←9
BX←BX+1
AL≥ [BX]?
Y
N AL,[BX]中的数交换
CX←CX-1
N CX=0? Y yy←AL
结束
从一批数中求最大者流程图
第5章 汇编语言程序设计
DATA SEGMENT xx DB 49,38,65,12,97,13,55,27,28,85 yy DB ?
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5.2.2 分支程序的结构

分支程序结构有两种形式:双分支结构和多分支结构。


判定条件
判定条件

分支程序设计要点



(1)首先根据处理的问题用比较、测试、算术运算、 逻辑运算等方式,使标志寄存器产生相应的标志位。 例如,比较两个单元地址的高低、两个数的大小,测 试某个数据是正还是负,测试数据的某位是“0”还是 “1”等,将处理的结果反映在标志寄存器的CF、ZF、 SF、DF和OF位上。 (2)根据转移条件选择适当的转移指令。通常一条 条件转移指令只能产生两路分支,因此要产生n路分 支需n-1条条件转移指令。 (3)各分支之间不能产生干扰,如果产生干扰,可 用无条件转移语句进行隔离。
循环程序的结构
常见的循环程序结构有两种形式:“先处理后判 断”和“先判断后处理”
开始
开始
初始化部分
N
初始化部分
循环体
控制部分
Y
修改部分
循环体 修改部分
Y
控制部分
N
结束
结束
把BX中的二进制数以十六进制的形式显示在屏幕上。

(BX)
D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
重复循环控制指令
指令名称
LOOP指令
指令功能
将CX内容减1,若CX不等于0,则循环至目标地址处 (即IP+DISP),否则顺序执行后续指令
LOOPZ/LOOPE 将CX内容减1,若CX不等于0,且标志位ZF=1时,才循 指令 环至目标地址处,否则顺序执行后续指令 LOOPNZ/LOOP 将CX内容减1,若CX不等于0,且标志位ZF=0时,才循 NE指令 环至目标地址处,否则顺序执行后续指令 JCXZ指令 这条指令是条件转移指令,经常用于重复循环控制

Sn
结束
【例】 设置光标到屏幕左上角
SET_CUR PROC MOV AH,2 ;设置光标位置功能 MOV BH,0 ;页号 MOV DX,0 ;行DH,列DL INT 10H ;BIOS输出字符中断 RET SET_CUR ENDP 这个程序段是顺序执行的,一条指令执行后 顺序执行紧接其后的另一条指令。
第5章 汇编语言程序设计
主要内容

顺序、分支、循环结构程序设计 子程序设计 转移指令、循环指令和子程序伪指令
教学要求

掌握:
(1)分支程序的概念、结构和设计 (2)循环程序的概念、结构和设计 (3)子程序的概念、结构和设计

了解: 转移表法和地址表法多分支程序的设计原理;多 重循环程序的结构形式,内层循环与外层循环遵守的 层次结构规则,参数修改对各层的相互影响;汇编递 归程序方法。
指令格式 JMP 地址表达式
指令功能 4种方式
无条件地转移到由地址表达式所确定的目标单元,本指令对标志位无影响 段内直接转移 这是一种相对寻址方 式。它转移的目 标地址是当前IP 内容加上一个8 位相对位移量 (DISP), DISP是 汇编程序在汇编 源程序时,根据 目标地址和当前 IP之间的距离自 动生成的 IP=IP+DISP 段内间接转移 它转移的目标地址可 通过寄存器或存 储单元来寻址 段间直接转移 当一条无条件转移指 令中的地址表达 式是一个段间 (FAR)标号或段 间标号加减一常 量(必须在该标 号所在段内)时, 则该指令被汇编 成一个段间直接 转移指令代码 段间间接转移 它转移的目标地址由存 储器寻址方式指定 的内存中的连续两 个字来决定,低地 址的字取代IP,高 地址的字取代CS
用于无符号数的条件转移指令 用于带符号数的条件转移指令
(1)有进位转移(JC)或无 进位转移(JNC) (2)等于/为零转移(JE/JZ )或不等于/非零转移( JNZ) (3)负数转移(JS)或正数 转移(JNS) (4)溢出转移(JO)或不溢 出转移(JNO) (5)偶校验转移(JP/JPE) 或奇校验转移(JNP/JPO ) (6)寄存器CX为零转移( JCXZ)


IP=Reg16 或 P=Mem16
功能
无条件转移指令JMP



JMP指令转移可以是短(short)转移(偏移量在[128B,127B]之内)、近(near)转移(偏移量在[32KB,32KB]之内)、远(far)转移(在不同的代码 段之间转移)。 短转移和近转移都是段内转移,JMP指令只将目标指 令位置处的偏移量赋值给指令指针寄存器IP,从而实 现转移功能 远转移属于段间转移,JMP指令不仅会把目标指令位 置处的偏移量赋值给指令指针寄存器,同时还会把目 标指令所处的代码段的段地址赋值给当前代码段寄存 器CS。
【例】 设在X单元中存放一个0~7之间的整数,用查表法求出其平 方值,并将结果存入Y单元。


分析:根据题意,首先将0~7所对应的平方值 存入连续的8个单元中,构成一张平方值表,其 首地址为SQTAB。 由表的存放规律可知:表首址SQTAB与X单元 中的数i之和,正是i2所在单元的地址。
DATA
SEGMENT ;数据段定义
;平
SQRTSUB PROC FAR
PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AL,X ;取数i MOV AH,0 MOV BX,OFFSET SQTAB ;BX←表首 址 ADD BX,AX MOV AL,[BX] ;取i2并保存 MOV Y,AL RET
1
2
3 4
功能指令
Rotate :
Printit :
mov ch, 4 mov cl, 4 rol bx, cl mov al, bl and al, 0fh add al, 30h ;’0’-’9’ ASCII cmp al, 3ah jl printit add al, 7h ;’A’-’F’ ASCII mov dl, al mov ah, 2 int 21h dec ch jnz rotate
有条件转移指令

有条件转移指令是一组及其重要的转移指令, 它根据标志寄存器中的一个(或多个)标志位 来决定是否需要转移,这就为实现多功能程序 提供了必要的手段
有条件转移指令的格式和类型
指令格式 指令说明 根据单个标志位的条件转移 指令 <指令助记符> <短标号>
当满足条件而发生转移的指令,称为条件转移指令。它们以某些 标志位或这些标志位的逻辑运算作为依据,若满足指令所规 定条件,则程序转移,否则顺序执行
开始
x<0
x>0
x=?
x=0
y← 1
y← 0
y←-1
结束



DATA SEGMENT RS1 DB X ; 存放自变量X RS2 DB ? ; 函数Y值的存储单元 DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV AL, RS1 ; AL←X CMP AL, 0 ; 将X与0比较 JGE BIG ; 若X≥0→BIG MOV RS2, 0FFH ; 若X<0, (RS2)←[-1]补=0FFH JMP DONE BIG: JE EQUL ; 若X=0→EQUL MOV RS2, 1 ; 若X>0, (RS2)←1 JMP DONE EQUL: MOV RS2, 0 ; 若X=0, (RS2)←0 DONE: MOV AH, 4CH INT 21H CODE ENDS END START
SQTAB DB 0,1,4,9,16,25,36,49 方值表 X DB 5 Y DB ?
DATA ENDS STACK SEGMENT PARA STACK 'STACK'
TAPN TOP DB 100 DUP (?) EQU LENGTH TAPN
STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK
例6.设数组X、Y中分别存有10个字型数 据。试实现以下计算并把结果存入Z单元。
5.2.1 转移指令


转移指令是汇编程序员经常要用到的一组指令。 在高级语言中,时常有“尽量不要使用转移指 令语句”的劝告。但是,在汇编语言程序中, 不但要使用转移指令,而且还要灵活运用,因 为指令系统中有大量的转移指令。 转移指令分为无条件转移指令和有条件转移指 令。
无条件转移指令JMP

无条件转移指令JMP指令是从程序当前执行的地方无条 件地转移到另一个地方执行。
【例】 设有单字节无符号数X、Y、Z,若X+Y>255,求X+Z;否则 求X-Z,运算结果放在F1中(X、Y、Z、F1均为字节变量名)。

分析:这是一个双分 支结构。因为X、Y均 为无符号数,当 X+Y>255时会产生进 位即CF=1,所以可以 用进位标志来判断
开始
AL, BL←X
N
AL+Y>255
Y
BL←BL+Z
BL←BL-Z
F1←BL
结束
MOV AL,X MOV BL,AL ADD AL,Y JNC LET ;若无进位 则转LET ADD BL,Z DONE: MOV F1,BL HLT LET: SUB BL,Z JMP DONE

【例】 已知符号函数,假设任意给定x值,存 放在内存RS1单元中,求出函数y的值,存放 在内存RS2单元中。
SQRTSUB ENDP CODE ENDS END SQRTSUB
5.2 分支程序设计

相关文档
最新文档