第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)
运行过程中,可以直接看到屏幕上显示的内容,运行过后,再用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汇编语言
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章 汇编语言程序
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章_运算程序设计及应用举例
/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)解释程序解释程序也是一种对高级语言源程序进行翻译处理及的程序。
第五章_汇编语言程序设计基础
§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)微机原理与接口技术(第三版)(王忠民)
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 ?
第5章 习题及答案
第五章 汇编语言程序设计1、画图说明下列语句所分配的存储器空间及初始化的数据值。
难度:2(1) BYTE_VAR DB ‘BYTE’,12,-12H ,3 DUP(0,2 DUP(1,2),7) (2) WORD_VAR DW 3 DUP(0,1,2),7,-5,’BY’,’TE’,256H 答:(1) (2)07H BYTE_V AR 42H WORD_V AR 00H 00H 59H 00H FBH 54H 01H FFH 45H 00H 59H 0CH 02H 42H EEH 00H 45H 00H 00H 54H 01H 00H 56H 02H 01H 02H 01H 00H 02H 02H 07H 00H 00H 00H 01H 00H 02H 01H 01H 00H 02H 02H 07H 00H 00H 00H 01H 00H 02H 01H 01H 00H 02H 02H07H00H2、假设程序中的数据定义如下: PARTNO DW ?PNAME DB 16 DUP(?) COUNT DD ? PLENTH EQU $- PARTNO 问:PLENTH 的值为多少?他表示什么意义? 答:PLENTH 的值为22,它表示当前已分配单元空间。
《微型计算机原理》第5章习题与解答3、有符号定义语句如下:难度:2BUF DB 1,2,3,’123’EBUF DB 0L EQU EBUF-BUF问:L的值是多少?答:L的值为6;4、假设成序中的数据定义如下:难度:2LNAME DB 30 DUP(?)ADDRESS DB 30 DUP(?)CITY DB 15 DUP(?)CODE_LIST DB 1,7,8,3,2(1)用一条MOV指令将LNAME的偏移地址存入BX。
(2)用一条指令将CODE_LIST的头两个字节的内容放入SI。
(3)写一条伪指令定义符使CODE_LENGTH的值等于 CODE_LIST域的实际长度。
汇编语言课件第05章
11/37
第五章 汇编语言顺序程序设计
乘法指令只影响CF和 , 乘法指令只影响 和OF,其它条件码无定义 。 1)MUL: 若乘积的高一半为 ,则CF=OF=0, ) : 若乘积的高一半为0 , 否则, 否则,CF=OF=1。 。 2)IMUL:若乘积的高一半是低一半的符号位的扩展, 2)IMUL:若乘积的高一半是低一半的符号位的扩展, 则,CF=OF=0,否则,CF=OF=1。 ,否则, 。
13/37
第五章 汇编语言顺序程序设计
一、算术指令(5类) 算术指令( 类 1. 加法指令(ADD,ADC,INC) 加法指令( , , ) 2. 减法指令(SUB,SBB,DEC,NEG ,CMP ) 减法指令( , , , 3.乘法指令 MUL,IMUL) 3.乘法指令(MUL,IMUL) 乘法指令( 4.除法指令(DIV,IDIV) 除法指令( 除法指令 , ) 5.十进制调整指令(DAA,DAS等) 十进制调整指令( 十进制调整指令 , 等
12/37
第五章 汇编语言顺序程序设计
如何区分MUL和IMUL 和 如何区分 (1111,1111B)×(1111,1111B) , ) , ) 看作无数号数,上式为: 看作无数号数,上式为:FFH×FFH=FFE01H × 看作带符号数,上式为:(-1) 看作带符号数,上式为:( )×(-1)=1 :( ) 选用MUL或IMUL应根据实际情况而定。 或 应根据实际情况而定。 选用 应根据实际情况而定
21/37
第五章 汇编语言顺序程序设计
本章内容分三节: 本章内容分三节: 5.1 算术指令 5.2 逻辑指令 5.3 顺序程序举例
22/37
第五章 汇编语言顺序程序设计
二、逻辑指令 逻辑运算指令( 1. 逻辑运算指令(5个) 移位指令( 2. 移位指令(8个)
第5章 MASM汇编语言程序设计
顺序、分支和循环三种结构
汇编语言程序设计一般可以分为以下基本步骤: (1)分析问题 (2)算法设计 (3)画流程图 (4)编写源程序 (5)上机调试运行
la1:lea dx,m2 la2:mov ah,9 int 21h mov ah,4ch int 21h cod1 ends end stt
例2:在数据段的一个字符串中查找字符“$”,如 找到,则将其所在单元的偏移地址存入字单元 变量ADDR中,否则将零存入ADDR中。
dat1 segment str1 db ‘CFDP$RSVQE’ addr dw ?
2) 转移表法 例:根据字节变量 n中给定的序号(0~7),通过转移表实现 向8个处理程序(入口地址为L0~L7)中的一个程序转移。
data segment n db 7 data ends code segment assume cs:code,ds:data stt: mov ax,data mov ds,ax mov ah,0 mov al,n mov dx,ax add ax,ax add ax,dx L4: … mov bx,offset jp1 L5: … add bx,ax L6: … jmp bx L7: … jp1: jmp near ptr L0 mov ah,4cH jmp near ptr L1 int 21h jmp near ptr L2 code ends jmp near ptr L3 end stt jmp near ptr L4 jmp near ptr L5 jmp near ptr L6 jmp near ptr L7 L0: … 表地址=转移表首地址+n*3 L1: … L2: … L3: …
单片机实用教程_5 89C51单片机汇编语言程序设计
5. DS 定义存储空间伪指令 格式: DS n 说明:从指定的地址开始,连续预留n个存储单元, 作为工作单元使用。n为常数, 例如: ORG 2000H DS 06H DB 31H,32H 汇编后,从2000H开始连续预留6个存储单元, 然后从2006H开始按DB命令给存储单元赋值, 即:(2006H)=31H,(2007H)=32H。
3. DW 定义字(双字节)伪指令
格式: DW 16位数据项或项表 说明:从当前ROM地址开始,将16位数据项或项表 的内容依次存放到连续的存储单元中。 存放时,高字节先到低地址,低字节到其后的高地址中. DW常用于定义一个地址表。 例如: 汇编后:(1500H)=12H (1501H)=34H ORG 1500H (1502H)=00H DW 1234H,5FH,20H (1503H)=5FH (1504H)=00H (1505H)=20H
汇编程序: 把汇编语言源程序翻译成机器语言的目 标程序的工具软件。这个翻译过程称为汇编。 指令语句:源程序由指令语句组成。有两种类型:
.1.2 指令语句的组成
指令语句:由CPU指令组成,运行时由CPU执行。 每条指令对应CPU的一种特定操作。 汇编中,都要翻译成机器指令,生成对应的目标代码. 指令语句的格式如下:
⑵. 操作码
操作码是语句的核心,不可缺少。 用指令的助记符表示,说明该语句所执行的操作。
⑶. 操作数
表示该语句的操作中的数据或数据所在的地址。 双操作数指令有目的和源操作数,目的在前,逗号分开. 操作数字段表示的方法有多种:
寄存器名:寄存器A、B、 R0-R7、 SFR等。 存储器地址:片内为00H-7FH, 片外为0000H-FFFFH。 标号名:指令地址标号, 其值为该指令第1字节地址。 常数:常数可以用不同进制数或字符串表示。 表达式:汇编时会自动计算出表达式的值。 符号“$”:用于转移指令,表示该指令地址,即PC的值.
实验五汇编语言程序设计实验(一)
实验五汇编语言程序设计实验(一)一、实验目的1、了解和掌握汇编语言子程序和主程序的设计。
2、掌握循环程序的设计。
3、掌握汇编语言主程序与子程序的调用和参数传递。
4、进一步熟悉在PC机上建立,汇编,链接,调试和运行8086、8088汇编语言程序的过程。
二、实验内容1、复习汇编语言源程序的上机过程:2、编写一个完整程序(包含循环设计和子程序设计)在以strg为首地址的缓冲区中存放着1个字符串,以-1作为结束标志,编程统计字符串长度,并将结果存入lenth单元。
要求统计字符串用子程序完成。
data segmentstrg db ‘abcd’,-1lenth dw ?data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlea dx,strgcall scountmov lenth,bxmov ah,4chint 21hscount proc nearpush sixor bx,bxmov si,dxnext:cmp byte ptr[si],-1jz overinc bxinc sijmp nextover:pop siretscount endpcode endsend start三、实验器材IBM PC 微机一台四、实验要求1、正确理解本次实验的目的,内容和原理。
2、能编写相应的程序五、实验报告要求完成下面任务:从键盘输入1个长度小于100的字符串,存入以buff 为首地址的缓冲区,其中如有大写字母,要求用子程序转换成小写字母,字符串以回车键作为结束。
写出操作步骤,程序清单,程序注释,实验现象。
STM8S系列单片机原理与应用(潘永雄)第1-5章章 (5)
iret ; 中断入口地址表
segment 'vectit' dc.l {$82000000+main} 入口地址表
; reset [注9]中断
第5章 汇编语言程序设计
dc.l {$82000000+NonHandledInterrupt} dc.l {$82000000+NonHandledInterrupt} dc.l {$82000000+NonHandledInterrupt} dc.l {$82000000+NonHandledInterrupt} dc.l {$82000000+NonHandledInterrupt} dc.l {$82000000+NonHandledInterrupt} dc.l {$82000000+NonHandledInterrupt} dc.l {$82000000+NonHandledInterrupt} dc.l {$82000000+NonHandledInterrupt} dc.l {$82000000+NonHandledInterrupt}
ram0_end.b EQU $ram0_segment_end
ldw X,#ram0_start
clear_ram0.l
clr (X)
incw X
cpw X,#ram0_end
第5章 汇编语言程序设计
jrule clear_ram0
#endif
#ifdef RAM1
; [注6] RAM存储区0100H
在STM8S中,复位后将从复位中断逻辑指示的地址单 元(可以是ROM、EEPROM,甚至是RAM)取出并执行第一 条指令。第一条指令在ROM存储区中的存放位置并没有限 制,将第一条指令所在存储单元的地址填入复位中断入口 地址表中。
微型计算机原理-第5章(2)微机原理与接口技术(第三版)(王忠民)
DS、
INT
ES
数2…0据H
PSP(256 字节)
附段加
CSS:SPSIP定义了代 堆段段段堆码栈栈段的用程用序户
户程序装入情况
第5章 汇编语言程序设计
DSEG SEGMENT STRING1 DB 1,2,3,4,5
DSEG ENDS ESEG SEGMENT
STRING2 DB 5 DUP(?) ESEG ENDS SSEG SEGMENT
CPU、存储器(ROM、RAM)、I/O接口、输入、输出设备
上机过程
第5章 汇编语言程序设计
编辑程序 编辑
汇编程序 汇编
连接程序 连接
手写程序
EDIT .ASM文件
MASM .OBJ文件
LINK .EXE文件
有语法错误 无法正常连接 有算法错误
第5章 汇编语言程序设计
用户程序的装入
完成以下操作: 确定内存可用部分 以便存放要执行的 .exe 文
INC
BX
ADD AL,[BX]
MOV SUM,AL
RET
ENDP CODE END
MAIN
ENDS START
第5章 汇编语言程序设计 第二讲结束
每一种知识都需要努力, 都需要付出,感谢支持!
知识就是力量,感谢支持!
一一一一谢谢大家!!
STACK‘STACK’ DW 10 DUP(?) SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG ASSUME ES:ESEG,SS:SSEG
START: MOV AX,DSEG MOV DS,AX MOV AX,ESEG MOV ES,AX
LEA SI, STRING1
第5章80C51单片机汇编语言程序设计
08.08.2021
最新课件
23
第5章 汇编语言程序设计简介 5.2 汇编语言基本结构
08.08.2021
最新课件
24
5.2.1 顺序程序设计
例 1 两个无符号双字节数相加。 设被加数存放于内部RAM的40H(高位字节), 41H(低位字节), 加数存放于50H(高位字节), 51H(低位字节), 和数存入 40H和41H单元中。
14
(2)等值指令EQU
指令格式: 字符名称 EQU
例: PA8155 EQU 8001H ;即给标号PA8155赋值为8001H
使指令中的字符名称等价于给定的数字或汇编符号。
如果在程序中要多次使用到某一地址,由EQU指令将 其赋值给一个字符名称, 一旦需要对其进行变动, 只要改 变EQU命令后面的数字即可。 注意:由 EQU等值的字符名称必须先赋值后使用, 且在 同一个源程序中, 同一个标号只能赋值一次。
是一个标号, 其地址与前一条伪指令连续 , 即1003H,
1004H地址单元中依次存放 45H, 66H。
08.08.2021
最新课件
17
(4)定义字指令DW
指令格式:
[标号:] DW 16
该指令的功能与DB相似, 区别仅在于从指定地址开 始存放的是指令中的 16 位数据, 而不是字节串。每个 16 位数据要占两个存储单元, 高8 位先存, 低 8 位后存, 这和 MCS -51指令中的16位数据存放顺序是一致的。
单片机推出时,都有相配套的C编译器加以支持。 高级语言编写程序的缺点是实时性不高,结构不 紧凑,编译后占用存储空间比较大,这一点在存 储器有限的单片机应用系统中没有优势。
08.08.2021
最新课件
计算机组成原理与汇编语言程序设计
五、汇编语言程序设计
3.操作数:操作数表示指令助记符的操作对象。
4.注释:注释均以分号开始,它可占一行或多行,一般放在一条语句 的后面。 例:一项是含有4个字段的一条指令语句: LOP: MOV AX,0000H ;将AX清零
标号 指令助记符 操作数 注释
例:以下是含有4个字段的一条指令语句 INC CX
数据定义语句按照伪指令DB,DW和DD所确定的数据大小来给变量(或
存储单元)分配相应数量的存储单元,同时给这些存储单元预置由表达式 确定的初值。它们通常有以下几种形式: 1、数值表达式 例如:DATA数据段定义了字节、字、双字变量
五、汇编语言程序设计
DATA SEGMENT
VARB1
5.3汇编语言数据
5.3.1符号定义语句
1、等值伪指令 指令格式:符号 EQU 表达式/符号 EQU伪指令的左移是将表达式的值或表达式赋给EQU左边的符号 例:用符号标识常数、数值表达式 NUM EQU 10H COUN EQU 1234+34-67 VAR DB N令语句格式
标号:指令助记符
操作数的有无、有几个, 取决于指令助记符 翻译后,没有对 应的目标代码
指令语句的一般格式如下: 操作数 ;注释
1.标号:标号是机器指令语句存放地址的符号表示,代表该指令目标 代码的第一个字节地址,后面必须紧跟冒号“:” ,在指令语句中, 是任选字段。 2.指令助记符:指令助记符为语句的核心成分,表示了该语句的操作 类型。
五、汇编语言程序设计
例如: BUF DB 100 DUP(0)
以上语句定义了以BUF为首址,大小为100个字节,初值为0的数据存 储单元。
5.3.3数据
一、常数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.1顺序结构 5.2分支结构 5.3循环结构 5.4子程序
2012-12-28 第1页
5.1顺序结构
• 顺序程序设计也称为简单程序设计,这种 结构的程序不使用分支、循环结构,程序 本身的逻辑非常简单,所以只能完成一些 简单操作。其特点是程序顺序执行,由前 向后逐条执行指令。 • 在较为复杂的程序中,顺序程序是逐段出 现,它主要完成一些简单操作或过程的准 备、任务的过渡、结果的存储等工作,但 它是复杂程序设计的基础。
2012-12-28 第2页
• 例5.1 编写在屏幕上显示小写字母’a’的汇编程序。 • 源程序如下:
code segment assume cs:code begin: mov dl,'a' mov ah,2 int 21h mov ah,4ch int 21h code ends end begin
2012-12-28 第4页
• 例5.3 将X,Y单元存放的两个双字97563B07H和 4568470AH相加后结果放在Z单元中。 • 源程序如下:
DATE SEGMENT X DD 97563B07H Y DD 4568470AH Z DW 2 DUP(?) DB ? DATE ENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATE START: PUSH DS MOV AX,0 PUSH AX MOV AX,DATE MOV DS,AX
2012-12-28
第5页
lea si,x lea di,y MOV AX,[si] MOV BX,[di] ADD AX,BX MOV Z,AX MOV AX,[si+2] MOV BX,[di+2] ADC AX,BX MOV Z+2,AX ADC AX,0 MOV Z+4,AX RET MAIN ENDP CODE ENDS END START
2012-12-28
第15页
5.3.2多重循环程序设计
例5.14 有一个首地址为A的N字数组, 编制程序使数组中的数按降序排列 分析算法:采用起泡法排序.
交换次数
Count1N-1
Count2count1
i0 Ai>=Ai+1? N Ai Ai+1 i= i+1 Count2count2-1 N Count2=0?
(5)高半部分查找(higher),low 继续查找。
mid+1,返回步骤(2),
2012-12-28
第11页
5.2.2 用伪指令实现的分支结构
• 为了改善汇编语言源程序的结构,减少显式转移语句所带 来混乱,在宏汇编MASM 6.11系统中,增加了表达分支结 构的伪指令。该伪指令的书写格式与高级语言的书写方式 相类似,汇编程序在汇编时会自动增加转移指令和相应的 标号。理解并掌握该知识,对将来学习《编译原理》课程 也有一定的帮助。
0
Count1N-1
81 29 23 16 9 5 3 1 6
81 29 23 16 9 5 3 2
Count2count1 i0 Ai>Ai+1? N Ai Ai+1
Y
5 4
3
2
i= i+1
Count2count2-1
Count1=6 5 4 3
1
N
Count2=0?
Y
Count1count1-1
2012-12-28
第12页
5.3循环结构
循环程序有两种结构形式:
循环初始状态 Y 循环初始状态 循环体
循环控制条件 N
循环体
循环控制条件
N
Y
WHILE结构
DO_ WHILE结构
2012-12-28
第1Hale Waihona Puke 页循环程序可由三部分组成:
(1)设置循环的初始状态 即初始化:设置循环的初值状态,如设置循环次数。 (2) 循环体 循环工作的主体,由循环的工作部分及修改部分组成. 循环工作部分是为完成程序功能而设计的主要程序段
2012-12-28 第23页
为了满足子程序调用和返回操作的特殊性,在指令 系统中设置了相应的特定指令。 1) 调用指令(CALL) 调用子程序指令的格式如下: CALL 子程序名/Reg/Mem 子程序的调用指令分为近(near)调用和远(far)调用。 如果被调用子程序的属性是近的,那么,CALL指 令将产生一个近调用,它把该指令之后地址的偏移 量(用一个字来表示的)压栈,把被调用子程序入口 地址的偏移量送给指令指针寄存器IP即可实现执行 程序的转移。
2012-12-28 第22页
5.4.2子程序的调用和返回指令
• 子程序的调用和返回是一对互逆操作,也是一种 特殊的转移操作。 • 一方面,之所以说是转移,是因为当调用一个子 程序时,程序的执行顺序被改变,CPU将转而执 行子程序中的指令序列,在这方面,调用子程序 的操作含有转移指令的功能,子程序的返回指令 的转移特性与此类似;另一方面,转移指令是一 种“一去不复返”的操作,而当子程序完后,还 要求CPU能转而执行调用指令之下的指令,它是 一种“有去有回”的操作。
例5.9 分类统计字数组data中正数、负数和零的个数,并分别存入 内存字变量Positive、Negative和Zero中,数组元素个数保存在其第 一个字中。 例5.10 计算数组score的平均整数,并存入内存字变量Average中, 数组以-1为结束标志。 例5.11 试编制一程序把BX寄存器内的二进制用十六进制的形式在屏 幕上显示出来。 例5.12 在ADDR单元中存放着数Y的地址(假定地址为1234H), 试编制一程序把Y中1的个数存入count单元中。
2012-12-28
第10页
*折半查找算法
在一个长度为n的有序数组r中,查找元素k。
(1)初始化被查找数组的首尾下标,low 1,high n;
(2)若low>high,则查找失败,置CF=1,退出程序。否则, 计算中点:mid (low+high)/2;
(3)k与中点元素r[mid]比较。若k=r[mid],则查找成功,程序结 束;若k<r[mid],则转步骤(4);若k>r[mid],则转步骤(5); (4)低半部分查找(lower),high 继续查找; mid-1,返回步骤(2),
循环修改部分则是为保证每一次重复(循环)时,参加执行 的信息发生有规律的变化而建立的程序段。 (3) 循环控制部分 循环控制部分是循环程序设计的关键. 每个循环必须选择一个循环控制条件来控制循环的运 行次数及结束.而合理地选择循环控制条件成为循环程 序设计的关键问题.
2012-12-28 第14页
5.3.1 循环程序设计方法
2012-12-28 第20页
例5.15 调用程序和子程序在同一代码段中 MAIN PROC FAR …… CALL SUB1 …… RET MAIN ENDP
SUB1 PROC NEAR ……. RET SUB1 ENDP
2012-12-28 第21页
例5.16 调用程序和子程序不在同一代码段中。 CODE1 SEGMENT …… SUB1 PROC FAR …… RET SUB1 ENDP …… CODE1 ENDS CODE2 SEGMENT …… CALL SUB1 …… CODE2 ENDS
Y
Y
6 5 4 3 2 序号 数 5 9 16 23 0 A0= 3 9 16 23 29 1 A1= 5 2 A2= 9 16 23 29 81 3 A3= 16 23 29 81 16 4 A4= 23 29 81 9 9 5 A5= 29 81 5 5 5 3 3 3 3 6 A6= 81 N=7
2012-12-28
第9页
• 例5.5编写计算下面函数值的程序: • 设输入数据为X、输出数据Y,且皆为字节变量。 • 源程序如下:
DATA SEGMENT X DB -10 Y DB ? DATA ENDS STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX CMP X,0 ;与0进行比较 JGE A1 ;X≥0转A1 MOV Y,-1 ;X <0时,-1→Y JMP EXIT A1: JG A2 ;X>0转A2 MOV Y,0 ;X=0时,0→Y JMP EXIT A2: MOV Y,1 ;X>0,1→Y EXIT: MOV AH, 4CH INT 21H CODE ENDS END START
1
29 81 23 16 9 5 3 2
81 29 23 16 9 5 3 1
Count2= 6
5 4
3
2
Count1count1-1
6
N
Count1=6 5 4 3
2012-12-28
1
Count1=0? end Y
第16页
6 5 0 0 0 序号 数 5 81 81 81 0 A0= 3 81 29 29 29 1 A1= 5 2 A2= 81 29 23 23 23 3 A3= 29 23 16 16 16 4 A4= 23 16 9 9 9 9 5 5 5 5 A5= 16 3 3 3 3 6 A6= 9 N=7 Count2= 6
;使用了dos中断2号功能,显示一个字符。
2012-12-28
第3页
• 例5.2 试编写一汇编语言程序,把从键盘输入的小写字母 变成大写字母输出(要求考虑边界问题)。 • 源程序如下:
code segment assume cs:code begin: mov ah,1 int 21h ;从键盘接受一个字符 cmp al,'a' jb stop cmp al,'z' ja stop sub al,20h mov dl,al mov ah,2 int 21h jmp begin stop: mov ah,4ch int 21h code ends end begin