第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)。


12. SECTION指令 指令 SECTION [SHORT] [<number>]
格式为 <name>:
SECTION指令用来声明可以重定位的段信息,指定某一段是代 码还是数据等,放于什么位置。相同的名字的段代表相同的 段,后面出现的同名段中的内容将被排放在前一个同名段的 最后一条语句或指令之后。[SHORT]指明本段可以使用直接 寻址模式(DIR)。[<number>]是为了与MASM兼容的可选参 数。 代码段(code SECTION)至少要包含一条汇编指令,只包含DC、 DCB的段则是常量段(constant SECTION),包含DS或空的 段是数据段(data SECTION)。如果一个段中包含DC和DS 或汇编语句,这样的段不是数据段,默认会被定位在ROM中。
ORG $1000 sub1: FCB sub2: FCB rst: FCB ORG $4000 LDS LDX LDY LDAB #8 CLC
$01,$02,$03,$04,$05,$06,$07,$08 ;被减数 $11,$12,$13,$14,$15,$16,$17,$18 ;减数 ; $00,$00,$00,$00,$00,$00,$00,$00,$00;差 #rst+8 ;SP指向差的最低位 #sub1+7 ;X指向被减数的最低位 #sub2+7 ;Y指向减数的最低位 ;设置循环计数器,共8个字节 ;清进位位C
16
第五章 汇编语言程序设计
LOOP1: LDAA SBCA 1,YSTAA 1,SP-
1,X-
;取被减数一个字节 ;减去减数对应的字节和进位位 ;差存到结果单元 ;未完继续
DBNE B,LOOP1 BCC MOVB 结果为负 …… OVER: BRA *
OVER ;最后没有借位,则结束 #$01,SP;有借位,则将结果最高位单元置1表示 #$01,SP; 1 ;进一步处理 ;结束
4
第五章 汇编语言程序设计

3. SET指令 指令
SET指令与EQU指令类似同样用来定义标号和常量的关系,但是 SET指令定义的常量后面还可以使用SET指令重新赋值。 例如,Count:SET One:DC.B Count Count:SET Two:DC.B Count 经过以上定义后,常量One的值为1,常量Two的值为2。 2 1
2
第五章 汇编语言程序设计
常量的表示
• 十进制整数(decimal),由0 ~ 9的数字序列组成。例如,100, 256,1024。 • 十六进制整数(hexadecimal),由“$”符号后面加0 ~ 9、A ~ F组成。例如,$05,$EF,$FFA5。 • 八进制整数(octal),由“@”后面跟0 ~ 7的数字组成。例如, @55,@1000,@2000。 • 二进制整数(binary),由“%”后面跟0或1的数字序列组成。 例如,%101,%00101101。 • 字符串常量(String),是由单引号(‘’)或双引号(“”) 引起来的可打印字符组成。若字符串的内容包含单引号,则该 字符串只能用双引号表示。若字符串内容包含双引号,则该字 符串只能用单引号表示。例如,‘ABCD’, “ABCD”, ‘A’, “‘B”, ‘A“B’, “A‘B”。
DC.B DC.B DC.W DC.L
%0101,@12,10,$10 $A,$B,$C,$D $A,$B,$C,$D $A,$B,$C,$D
6
第五章 汇编语言程序设计
• 5. FCC指令 指令 定义字符串可以使用FCC指令,其效果和DC.B相同。 例如,String: FCC ‘ABCD’ 从String开始的数据单元的内容依次为ABCD的ASCII码,即$41 $42 $43 $44。 • 6. DCB指令 指令 DCB(Define Constant Block)用于定义常量块。使用该指令可以 方便的将某段内存空间初始化为某个固定的数值。语法如下: [<label>:] DCB [.<size>] <count>,<value> 其中size可以是B(默认)、D、L,分别表示1个字节、2个字节、 4个字节。下面举例说明。 Label1: DCB.B 10,$00 Label2: DCB.L 10,$FFFFFFFF 将Label1开始的10个字节全部清零,将Label2开始的10个4字节空 间全部初始化为$FFFFFFFF。
11
第五章 汇编语言程序设计
例如: aaa:
SECTION NOP STOP
bbb:
SECTION PSHA PULA RTS
aaa:
SECTION INCA
汇编程序会将后面一个aaa段的INCA指令放在前一个aaa段的 STOP指令之后,它们是同一个段。
12
第五章 汇编语言程序设计
§5-3 宏定义
当被减数比减数小的时候,得出的结果同样是不正确的。需根据符 号位,重新用减数减去被减数得到两者差的绝对值,再配合符 号位,即可得正确结果。
18
第五章 汇编语言程序设计
minuend: FDB subtrahend: FDB difference: FDB sign: FCB cnt: FCB ORG $4000 LDS LDX LDY LDAB CLC LOOP1: LDAA SBCA ADDA DAA
17
第五章 汇编语言程序设计

例3. 多字节压缩BCD码减法,BCD码的减法,需先对减数求以 10为模的补码,即用$9A减去减数,然后用被减数和减数的补码 相加,再做二-十进制调整,即可得到差。
但是对于多字节的减法,还要注意正确的借位,由于用DAA指令进 行了调整,实际上当C=0时是有进位的,C=1时无进位,所以 在进行下一个字节的运算之前要先对进位位做一下处理。
9
第五章 汇编语言程序设计

10. XREF指令 指令 如:
声明外部模块,表示此处声明的模块是在其它模块中定义的。例
XREF SCI_GET_CHAR • 11. END指令 指令 将不会被编译,也不会生成相应的机器码。
END指令通知编译器后面的内容忽略。因此写在END后面的指令
10
第五章 汇编语言程序设计
7
第五章 汇编语言程序设计

7. DS指令 指令
DS(Define Space)指令用于为变量预留内存空间。该指令语法 如下: [<label>:] DS[.<size>] <count> 其中size可以是B(默认)、D、L,分别表示1个字节、2个字节、 4个字节。另有几条指令与该指令等价: RMB等价于DS.B,RMD等价于DS.W,RMQ等价于DS.L 下面举例说明该指令的用法。 A: B: C: RMB 1 RMD 1 RMD 2
以上伪指令相当于分别定义了3个变量他们的数据宽度分别是1个 字节,2个字节和4个字节。
8
第五章 汇编语言程序设计 • 8. ABSENTRY指令 指令 该指令用于定义程序的入口点。语法为ABSENTRY <Label>。举例如下, ABSENTRY entry ORG $FFFE Reset: DC.W entry ORG $70 entry: NOP NOP main: LDS #$1FFF NOP BRA main • 9. XDEF指令 指令 定义外部变量,相当于C语言中的GLOBAL、PUBLIC,表示定义的变量可以 在其它模块或文件中引用。例如: XDEF SCI_GET_CHAR 表示SCI_GET_CHAR这个子程序是可以被其它的C程序或外部模块调用的。 此处编译器是对大小写敏感的。
第五章 汇编语言程序设计
LOOP1: LDAA ADCA STAA DBNE BCC LDAA STAA OVER: BRA *
1,X-;取第一加数一个字节 1,Y10,Y ;加上第二加数的对应字节,加进位位C ;存到结果单元
B,LOOP1;未完继续 OVER ;最高位相加后无进位,转到OVER #1 9,Y ;结束 ;否则最高位加1
编译程序会将引用宏的地方用宏定义的内容去取代。宏必须在它 被引用之前定义,定义的时候也可以包含已经定义的宏,但 不可以嵌套定义。<label:> MACRO [<汇编语句>][<占位符>][,<占位符>]… ENDM 其中MACRO、ENDM是关键字,占位符用反斜杠‘\’后面跟数 字0 ~ 9或大写字母A ~ Z表示。‘\0’占位符是表示数据宽度的, 通常前面加点‘.’。 下面举个例子:MyMacro: MACRO DC.\0 \1,\2 ENDM 在程序中引用的格式如下: MyMacro.B $40,$20 编译后的结果如下: DC.B $40,$20
第五章 汇编语言程序设计
第五章 汇编语言程序设计
内容提要: 内容提要:
§5-1 汇编语言程序设计基础 §5-2 常用汇编伪指令 §5-3 宏定义 §5-4 汇编程序设计举例
1
第五章 汇编语言程序设计
§5-1 汇编语言程序设计基础
汇编语言格式
标 号 ( LABEL ) 操 作 码 ( OPCODE ) 操 作 数 ( OPERAND ) 注 释 (COMMENTS) ) • 语句标号应以英文字母开头,可以包含字母、数字和下划线。标号后面加 冒号“:”表示的是当前语句的地址。以“*”开头表示该行为注解行,不 参与编译。 • 操作码表示指令代码,为指令助记符。 • 操作数描述指令的寻址方式和相关的参数。第一个操作数和操作码之间用 空格分开,后面的操作数与前面的操作数用逗号“,”分开。 • 注释有助于编程人员或读者看懂程序,因此要养成写注释的好习惯。通常 的汇编器都要求以分号“;”开头。正确的注释方法不是对每行的翻译, 而是对几行或一段程序的功能和使用方法进行说明。
相关文档
最新文档