第5章 汇编语言程序设计

合集下载

汇编语言程序设计_第5章 分支循环程序设计(参考答案)

汇编语言程序设计_第5章 分支循环程序设计(参考答案)

第5章分支、循环程序设计本章要点: 转移指令的寻址方式及其执行过程,控制转移类指令的使用,分支和循环程序的设计和应用。

程序调试的方法,常见问题的程序设计方法。

一、单项选择题5.1.1条件转移是根据标志寄存器中的标志位来判断的,条件判断的标志位共有( B )位。

A. 4B. 5C. 6D. 95.1.2用一条条件转移指令一次可以实现( A )个分支。

A. 2B. 3C. 4D. N5.1.3 条件转移指令的转移范围是(A)。

A. -128~127B. 0~255C. 0~65535D. -32768~327675.1.4 设A为字变量,B为标号,下列指令中不正确的是(D)。

A. MOV AX,AB. JNZ BC. JMP [SI]D. JMP B[BX]5.1.5 下述指令中影响CF标志位的是(A)。

A. SHL AL,1B. MOV AL,1C. JC LD. JNC L5.1.6 下述指令中不影响CF标志位的是(A)。

A. INC SIB. SUB SI,0C. NEG ALD. TEST AL,15.1.7 在多重循环程序设计中,每次通过外层循环进入内层循环时,其内层循环的初始条件(B)。

A. 不必考虑B. 必须重新设置C. 必须清0D. 必须置15.1.8 当设计一个程序时,最重要的是(B)。

A. 程序的结构化B. 能使程序正常运行并实现功能C. 程序的执行速度快D. 程序占用的存储空间小*5.1.9 如果“JNC L”指令的操作码放在0040H,转移后在0020H处取下一指令的操作码,那么这条指令的位移量是(C)。

A. 1EHB. 20HC. 0DEHD. 0E0H*5.1.10 如果“JGE P”指令的操作码放在0050H,该指令的位移量是34H,执行完这条指令转移取下一条指令的偏移地址是(C)。

A. 82HB. 84HC. 86HD. 88H二、填空题5.2.1 当下面循环程序中的划线处填上一个什么数字时,执行的循环次数最多?MOV CX,____0______MOV AX,0L:INC AXLOOP L5.2.2 当两个数进行比较后,执行__JE L(JZ L)表示两数相等则转移到L。

第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),完成显示、

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

大学计算机基础第五章

大学计算机基础第五章

大学计算机基础第五章第五章软件技术基础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除外)还要由数据传送令在 执行程序时赋值。

汇编语言程序设计

汇编语言程序设计
●标号通常由字母数字串组成,但第一个字母必须为字母。
标号有三种属性:
1. 段属性(SEGMENT): ●表示标号所在段的段基址。
2. 偏移属性(OFFSET): ●表示标号的偏移地址,即标号地址在逻辑段中距段的起始点的字节数。
3. 距离属性(或类型属性 TYPE): ●表示标号作为段内或段间的转移属性。
变量名、标号和一些专用符号等。
●注释字段 这是一个任选字段,它必须以分号开始,和指令语句的注释功能一样。
精选课件
5.2.2 常用伪指令
1. 符号定义伪指令(赋值语句)
(1)等值伪指令 格式:符号名 EQU 表达式 功能:将表达式的值赋给符号名。
[例5-11]
ALFA COUNT
EQU EQU
100 ALFA
精选课件
; CONT =60 ; CONT =7 ; CONT =1 ; AL = 84H
逻辑运算符
●包括按位操作的与(AND)、或(OR)、异或(XOR)、和 非(NOT)四种运算符。它们只适用于对常数进行逻辑运算。
注意: ● AND、OR、XOR和NOT也是指令助记符。
[例5-2] AND DX, PORT AND OFEH
精选课件
分析操作符(数值返回运算符)
(1)取地址的偏移量
(2)取段基址
格式: OFFSET 变量名或标号
功能:取变量名或标号所在段的 段内偏移量。
格式: SEG 变量名或标号
功能:取变量名或标号所在段 的段地址。
(3) 求变量名或标号的类型值
格式:TYPE 变量名或标号 功能: 返回一个数字值。若TYPE运算符加在变量名前,返回的数值是该变量 的类型属性;若TYPE运算符加在标号前,返回的数值则是该变量距离 属性;返回的数值与性的关系表4-1。

第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 ?

第5章 习题及答案

第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章

汇编语言课件第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汇编语言程序设计

第5章 MASM汇编语言程序设计
一个好的程序具有如下特点: (1)满足用户提出的要求,实现其功能 (2)具有结构化设计,易调试修改。 (3)通用性强 (4)执行速度快 (5)占用内存空间少 程序的基本结构有:
顺序、分支和循环三种结构
汇编语言程序设计一般可以分为以下基本步骤: (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 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 为首地址的缓冲区,其中如有大写字母,要求用子程序转换成小写字母,字符串以回车键作为结束。

写出操作步骤,程序清单,程序注释,实验现象。

第五六章 汇编语言程序

第五六章 汇编语言程序
《微机接口技术》 13
数的表示
整数
默认为十进制,非默认基数的用字母后缀标明
B:二进制 Binary H:十六进制 Hexadecimal D:十进制 Decimal O或Q:八进制 Octal
• 示例:1011B,35D,6AH,17Q
以字母开头的十六进制数必须加0
• 示例:FEH→0FEH
《微机接口技术》
23
4. 指定段内的偏移地址
ORG说明符
格式:ORG 常数表达式 作用:指定当前可用的存储单元的偏移地址为 常数表达式的值
EVEN说明符
格式:EVEN
作用:将当前可用的存储单元的偏移地址调整 为最近的偶数值
《微机接口技术》
24
示例
ORG 1000H A DB 47H, 12H, 45H EVEN B DB 47H 说明: ① ORG指令将A的偏移地址部分指定为1000H ② 从A开始存放3个字节变量,占用地址1000H、 1001H和1002H ③ EVEN指令会将B的偏移地址部分从1003H调整为 偶数地址1004H
; 返回DOS
; 代码段结束 ; 模块结束
《微机接口技术》 11
汇编语言程序的组成
分段结构
DATA SEGMENT 按段进行组织,最多由4个 … ; 数据段语句 段组成(代码、数据、附加、 DATA ENDS
堆栈) STACK SEGMENT 每个段以“段名 SEGMENT” … ; 堆栈段语句 开始,以“段名 END”结束 STACK ENDS
《微机接口技术》 25
5. 过程定义
PROC说明符
格式:过程名 PROC 类型属性名 说明:从“过程名”代表的地址开始定义一个 过程;“类型属性名”可选择NEAR(近过程) 或FAR(远过程),默认为NEAR

STM8S系列单片机原理与应用(潘永雄)第1-5章章 (5)

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)微机原理与接口技术(第三版)(王忠民)

微型计算机原理-第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

计算机组成原理与汇编语言程序设计

计算机组成原理与汇编语言程序设计

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

1. 分支转移程序 无条件分支转移:无条件执行分支转移; 无条件分支转移:无条件执行分支转移; 条件分支转移: 条件分支转移:要在满足用户一个或多个条件时 才执行分支转移; 才执行分支转移; 远程分支转移:允许分支转移到扩展存储器。 远程分支转移:允许分支转移到扩展存储器。
【例5.3.1】 分支转移举例。 5.3.1】 分支转移举例。 #88H, STM #88H,AR0 #1000H, LD #1000H,A zhong: zhong: SUB AR0,A AR0, BC
14:39:48
14
第5章 TMS320C54x汇编语言程序设计 TMS320C54x汇编语言程序设计
2. 子程序调用程序
子程序调用指令
分 类 无条件调用 无条件调用 指 令 CALL[D] CALA[D] 条件调用 条件调用 CC[D] 说 明 将返回的地址压入堆栈,并用该指令指定的地址加载PC 将返回的地址压入堆栈,并用该指令指定的地址加载PC 将返回的地址压入堆栈,用累加器A 指定的地址加载PC 将返回的地址压入堆栈,用累加器A或B指定的地址加载PC 如果满足指令给定条件,将返回的地址压入堆栈,并用该 指令指定的地址加载PC 指令指定的地址加载PC 将XPC和PC压入堆栈,并用该指令指定的地址加载PC和XPC XPC和PC压入堆栈,并用该指令指定的地址加载PC和 将XPC和PC压入堆栈,用累加器的低23位指定的地址加载 XPC和PC压入堆栈,用累加器的低23位指定的地址加载 PC和 PC和XPC
若当前选择辅助寄存器不等于0,用该指令指定的地址加载PC 若当前选择辅助寄存器不等于0,用该指令指定的地址加载PC 用该指令指定的地址加载PC和 用该指令指定的地址加载PC和XPC
用累加器的低23位指定的地址加载PC和 用累加器的低23位指定的地址加载PC和XPC
12
第5章 TMS320C54x汇编语言程序设计 TMS320C54x汇编语言程序设计
14:39:48
9
第5章 TMS320C54x汇编语言程序设计 TMS320C54x汇编语言程序设计
5.2 堆栈的使用方法
1. 堆栈的设置 若程序中要使用堆栈,必须先进行设置,如: 若程序中要使用堆栈,必须先进行设置,
size stack .set .usect STM 120 “STACK”,size STACK”
14:39:48
10
第5章 TMS320C54x汇编语言程序设计 TMS320C54x汇编语言程序设计
5.3 控制程序
’C54x具有丰富的程序控制指令,利用这些指令 C54x具有丰富的程序控制指令, C54x具有丰富的程序控制指令 可以执行分支转移、子程序调用、子程序返回,条 可以执行分支转移、子程序调用、子程序返回, 件执行以及循环等控制操作。 件执行以及循环等控制操作。
无效定义的表sym1 .set Y badsym2 50h badsym2 .set 50h+Y badsym3 50h badsym3 .set 50h+Z 60h Z .set 60h
14:39:48
8
第5章 TMS320C54x汇编语言程序设计 TMS320C54x汇编语言程序设计
提高可读性) .set, .struct/.tag/.endstruct (提高可读性) $, 寄存器符号, 其他… 寄存器符号, 其他… 符号替代变量, AR2(可重新定义) 符号替代变量, .asg “high”, AR2(可重新定义)
替代符号
例如:将常数值18赋给符号bei_hua。 例如:将常数值18赋给符号bei_hua。 18赋给符号 bei_hua LD AuxRl
运算操作 取正、取负、按位求补、 取正、取负、按位求补、逻辑负 乘法、除法、 乘法、除法、求模 加法、 加法、减法 指数 左移、 左移、右移 小于、 小于、小于等于 大于、 大于、大于等于 不等于、 不等于、等于 按位与运算 按位异或运算 按位或运算
求值顺序 从右至左 从左至右 从左至右 从左到右 从左至右 从左至右 从左至右 从左至右 从左至右 从左至右 从左至右
FCALL [D] 远程调用 远程调用 FCALA [D]
14:39:48
15
第5章 TMS320C54x汇编语言程序设计 TMS320C54x汇编语言程序设计
2. 子程序调用程序 无条件调用是指无条件执行调用。 无条件调用是指无条件执行调用。 调用 条件调用和无条件调用操作相同, 条件调用和无条件调用操作相同,但是条件调 用要在满足一个或多个条件时才执行调用 用要在满足一个或多个条件时才执行调用。 调用。 远程调用允许对扩展存储器的子程序或函数进 行调用。 行调用。
zhong,AGT, zhong,AGT,AOV
13
第5章 TMS320C54x汇编语言程序设计 TMS320C54x汇编语言程序设计
5.3.1 分支操作程序
2. 子程序调用程序 与分支转移一样, 与分支转移一样,通过传送控制到程序存储器的 其他位置,子程序调用会中断连续的指令流。 其他位置,子程序调用会中断连续的指令流。但是与 分支转移不同的是,这种传送是临时的。 分支转移不同的是,这种传送是临时的。 当函数的子程序被调用时, 当函数的子程序被调用时,紧跟在调用后的下一 条指令的地址保存在堆栈中。 条指令的地址保存在堆栈中。这个地址用于返回到调 用程序并继续执行调用前的程序。 用程序并继续执行调用前的程序。 子程序调用操作分成两种形式: 子程序调用操作分成两种形式:无条件调用和条 件调用,两者都可以带延时操作和不带延时操作。 件调用,两者都可以带延时操作和不带延时操作。
3
14:39:48
标号
类型 标号 局部标号 符号常数
预定义符号常数
4
含义
符号地址(可作为.global,.ref,.def的操作数) 符号地址(可作为.global,.ref,.def的操作数) ,.ref,.def的操作数
$n, name? (临时性的标 ,.newblock,.sect,.text,.data,.include,.copy取消 取消) 号,.newblock,.sect,.text,.data,.include,.copy取消)
在RAM中定义一个STACK RAM中定义一个 中定义一个STACK 的保留空间, 120个单元 的保留空间,共120个单元
SP, # stack + size,SP 保留区的高地址赋给SP, size, 保留区的高地址赋给SP 作为堆栈的栈底
在数据RAM空间开辟一个堆栈区。 RAM空间开辟一个堆栈区 在数据RAM空间开辟一个堆栈区 设置好堆栈后,就可以使用堆栈了, 。 设置好堆栈后,就可以使用堆栈了,如: (SP)CALL pmad ;(SP) →SP,(PC)+2→TOS, 设置堆栈指针, -1→SP,(PC)+2→TOS, size→SP。 设置堆栈指针,# stack + size→SP。 pmad→PC (TOS)→PC,(SP)+1 RET ;(TOS)→PC,(SP)+1→SP
5.3.1 分支操作程序
分支转移程序 子程序调用 子程序返回 条件操作程序
14:39:48
11
第5章 TMS320C54x汇编语言程序设计 TMS320C54x汇编语言程序设计
5.3.1 分支操作程序
1. 分支转移程序 通过传送控制到程序存储器的其他位置, 通过传送控制到程序存储器的其他位置,分支转 分 类 指 令 说 明 移会中断连续的指令流。 移会中断连续的指令流。 其指令分为无条件分支转移和条件分支转移两类。 其指令分为无条件分支转移和条件分支转移两类。两 BC[D] 若满足指令给定条件,用该指令指定的地址加载PC 若满足指令给定条件,用该指令指定的地址加载PC 条 件 者都可以带延时操作和不带延时操作。 者都可以带延时操作和不带延时操作。 分支转移
BANG[D] FB[D] FBACC[D] 远 程 分支转移
14:39:48
B[D] 用该指令指定的地址加载PC 用该指令指定的地址加载PC 无条件 分支转移指令可以改写PC PC值 使程序改变流向。 分支转移指令可以改写PC值,使程序改变流向。 分支转移 BACC[D] 用累加器的低16位指定的地址加载PC 用累加器的低16位指定的地址加载PC
5.2 堆栈的使用方法
当程序调用中断服务程序或子程序时, 当程序调用中断服务程序或子程序时,需要将 程序计数器PC PC的值和一些重要的寄存器值进行压栈 程序计数器PC的值和一些重要的寄存器值进行压栈 保护,以便程序返回时能从间断处继续执行。 保护,以便程序返回时能从间断处继续执行。 C54x提供一个用16位堆栈指针SP寻址的软件 提供一个用16位堆栈指针SP ’C54x提供一个用16位堆栈指针SP寻址的软件 堆栈。 堆栈。 当向堆栈中压入数据时,堆栈是从高地址向低 当向堆栈中压入数据时, 地址方向填入,堆栈指针SP先减1 SP先减 地址方向填入,堆栈指针SP先减1,然后将数据压入 堆栈。 堆栈。 当从堆栈中弹出数据时。数据先从堆栈中弹出, 当从堆栈中弹出数据时。数据先从堆栈中弹出, 然后堆栈指针SP SP加 然后堆栈指针SP加1。
14:39:48
有效定义表达式:
7
有效定义的表达式举例: 有效定义的表达式举例: .data label1 label1 .word 0 .word 1 .word 2 label2 label2 .word 3 50h X .set 50h goodsym1 100h goodsym1 .set 100h+X goodsym2 goodsym2 .set $ goodsym3 label1 goodsym3 .set label1 goodsym4 label2 label1 goodsym4 .set label2-label1
第五章 汇编语言程序设计
概述
相关文档
最新文档