汇编语言程序设计流程图的组成
第三章 80C51单片机汇编语言程序设计(本科)

ORG START: CLR MOV MOVX MOV INC MOVX SUBB JNC XCH SJMP BIG1: MOVX BIGO: INC MOVX END
8000H C;进位清0 DPTR, #ST1; 设数据指针 A, @DPTR; A←((ST1)),取N1 R2, A; 暂存N1 DPTR; DPTR← ST2(指向N2单元) A, @DPTR; 取N2存于A中 A, R2;N1,N2比较(N2-N1,差在A中) BIG1;N2≥N1,转BIG1,N2<N1,顺序执行 A, R2;N1,N2互换,A ←N1 BIG0 A, @DPTR;A ←N2 DPTR; DPTR← ST3(指向N3单元) @DPTR, A;ST3 ←大数 返回
等、不相等等各种条件判断。
例:两个8位无符号二进制数比较大小。假设在外部RAM中有 ST1、ST2和ST3共3个连续单元(单元地址从小到大),其中ST1
、ST2单元中存放着两个8位无符号二进制数N1,N2,要求找出其
中的大数并存入ST3单元中。
解:(1)分析任务:比较两个数的大小
(2)算法:算术运算、控制转移 (3)程序结构:单分支 (4)数据类型:单字节、二进制、无符号数 (5)数据结构:单元地址升序排列
思考题
3) ORG MOV MOV MOVX ADD MOVX DEC DEC MOVX ADDC 1000H RO, R1, A, A, @R1, R0; R1; A, A, #52H;加数N1的低字节地址送地址指针R0 #55H;加数N2的低字节地址送地址指针R1 @R1; 取N2的低字节 @R0; N1、N2低字节相加 A; 保存N1、N2低字节和 修改加数N1的地址指针内容 修改加数N2的地址指针内容 @R1; 取N2的中间字节 @R0; N1、N2中间字节带低字节和进位相加
汇编语言指令及伪指令练习的实验报告总结(范文)

汇编语言指令及伪指令练习的实验报告总结汇编语言指令及伪指令练习的实验报告总结篇一:汇编语言实验报告福建农林大学金山学院课程名称:姓名:系:专业:年级:学号:指导教师:职称: (程序设计类课程) 实验报告汇编语言 201X~201X学年第二学期实验项目列表福建农林大学金山学院实验报告系:专业:年级:姓名:学号:实验课程:汇编语言实验室号:_ _1#605 实验设备号: I3 实验时间:201X.4.25指导教师签字:成绩:实验一汇编程序的汇编及运行1.实验目的和要求 (1)熟悉汇编程序的汇编、连接、执行过程;(2)生成LST文件,查看L ST文件;(3)生成BJ文件,修改语法错误;(4)生成EXE文件;(5)执行程序。
2.实验环境 IBM—PC机及其兼容机;实验的软件环境是:操作系统: DS2.0以上;调试程序: DEBUG.CM;文本编程程序: EDIT.EXE、PS.EXE;宏汇编程序:MA SM.EXE(或AS M .EXE);连接装配程序:L INK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录(1)将数据段输入,取名 1.txt,保存在MASM文件夹下。
生成LST文件,(不必连接、运行)用EDI T查看1.LS T文件。
试回答: DA1,DA2的偏移量分别是多少?C UNT的值为多少?DATA SEGME NT RG 20HNUM1=8 NUM2=NUM1+10H DA1 DB ‘I BM PC’ CUN T EQU $-DA1 DATA END S DA2 DB 0AH, 0DH EN D(2)输入有错误的文件,修改错误语句。
(MASM没有出现错误即可。
不必连接、运行。
)D ATA SEGMEN T VAR1 DB0, 25, DH,300 VAR2DB 12H, A4H, 6BH VAR3 DB ’ABCD EF’ VAR4 D 1H, 5678H VAR5 D 10H DUP(?) D ATA ENDS C DE SEGMENT ASSUME CS: CDE, DE: DATA MV D S, AX LEASI, VAR5 M V BX, FFSE T VAR2 MV[SI], 0ABH MV AX, VA R1+2 MV [B X], [SI] M V VAR5+4,VAR4 MV AH, 4CH INT21H ENDS E ND START B EING MV AX, DATA CDE(3)输入正确的程序,汇编、连接、运行 STACKS SEGMENT S TACK D 128DUP(?) EN DS SEGMENT ENDS SEGM ENT ASSUME CS: CDES,DS: DATAS STACKS DA TAS DATASCDES STRIN G DB ‘ELCM E!’, 13, 10, ‘$’ STA RT: MV AX, DATAS MV DS, AX LEA DX, S TRING MV A H, 9 INT 21H MV AH,4CH INT 21H CDES END S END STAR T4.算法描述及实验步骤 1)首先,用记事本输入各段程序,并储存成源程序,保存在MASM目录下。
汇编语言程序设计的基本方法

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)
第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个机器周期。
汇编语言程序设计第七章 循环结构程序

2. LOOPE/LOOPZ 条件重复控制指令
指令汇编格式: LOOPE/LOOPZ AGAIN
操作: (1) CX CX-1
(2) 若CX≠ 0且ZF=1,则使控制转到AGAIN 标识的循环入口处,继续下一次循环,否则退出循 环体,执行后续指令。
例 比较两个字符串是否相等。
STR1 DB
‘12345’
DSEG SEGMENT
DATA DB
10,20,30,80,100,90,120
CNT DW 7
ADR DW 0FFFFH
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,ES:DSEG
START: MOV AX,DSEG MOV DS,AX
DATA1 00H
01H 00H 02H
: :
SI DATA2 00H
10H
50
00H
个
20H
字
单
:
元
:
DI SUM 00H
BX
00H
50
00H 50
个
00H
个
字 单
:
字 单
元
:
元
00H
00H
例7.1 设内存DATA1和DATA2开始分别存放50个无符 号字数据,编制程序将两个存储区对应字数据求和并存 入SUM开始的单元。
存储器中仅由字节或字组成的一组数据称为数据串。由字节组 成的数据串称为字节数据串,简称字节串;由字组成的数据串称为 字数据串,简称字串。一个数据串的长度最长不能超过64KB。
数据串操作指令的寻址方式为数据串寻址:
(1)指令中要处理的两个数据串应分别在数据段和附加段中定义。 (2)数据段中定义的数据串要用SI作指针;
汇编语言程序设计

…… 跳转到出口处end
……
casen:
跳转到出口处end ……
(执行条件n成立的语句)
end 分支结束出口
图9.13 汇编语言多重分支方第式14页
2021/12/8
下面我们用相应的例子来详细的说明这两种分支结构。
例 阶跃函数
说明:这是一个典型的双分支结构,输入值大于等于0时则返回1,输入值小于0时返 回0。r1>=0?r1=0r1=1退出图9.14 阶跃函数流程图NY
//与0比较 //大于等于0则跳转到非负数处理 //小于0则返回0 //跳转到程序结束处
//大于0,则返回1
第16页
2021/12/8
3、循环程序设计
(1) 循环程序的结构形式
循环程序可以有两种结构形式,一种是WHILE_DO结构 形式;另一种是DO_UNTIL结构形式。如图9.16所示.
初始化
初始化
入口参数:R1;(有符号数) 出口参数:R1
流程图如图9.14所示。
N
Y
R1>=0 ?
r1=0
r1=1
退出
图9.14 阶跃函数流程图
第15页
2021/12/8
程序的代码如下: .PUBLIC F_Step; .CODE F_Step: .proc CMP R1,0; JGE ?negtive; R1 = 0; JMP ?Step_end; ?negtive: R1 = 1; ?Step_end: RETF; .ENDP
1.4 嵌套与递归
1、 子程序的嵌套
子程序嵌套就是指子程序调用子程序。其中嵌套的层数称为嵌套深度。图9.27表
示了三重嵌套的过程。
SUB1
主 程 序
微机原理第五章 程序设计-dsh

INT
COSEG
21H
ENDS END START
第三节 分支程序
计算机可根据不同条件进行逻辑判断,从而选择不同 的程序流向。程序的流向是由 CS和 IP决定的,当程序 的转移仅在同一段内进行时,只需修改偏移地址 IP的 值;如果程序的转移是在不同的段之间进行,则段基 址 CS和偏移地址 IP均需要修改。 转移指令分为无条件转移指令和条件转移指令。 在进行分支程序设计时,首先要根据处理的问题用比 较、测试的方式,或者用算术运算、逻辑运算使标志 寄存器产生相应的标志位,根据转移条件选择转移指 令。
INC INC DEC JNZ
BX BX CX LOP ; ;控制部分
修改部分
MOV YY,AX MOV AH,4CH INT CODE ENDS 21H
END
START
一.循环的基本结构
1.先执行,后判断结构
流程图如右:
入口
初始化部分
循环体
修改部分
N
循环 结束? Y 出口
例2. 编程统计数据块中正数的个数,
Y
RS END (DX)
DATA
SEGMENT
D1
COUNT RS DATA CODE
DB,-1,-3,5,7,-9,·,-6 · ·
EQU DW ENDS SEGMENT ASSUME CS:CODE,DS:DATA $-D1 ?
START:
MOV
AX,DATA
MOV
MOV MOV MOV
DS,AX
JMP JUS2
BIGD: JG JUS1 ;x>0转移 ;x=0
MOV AL, 0
JMP
JUS1: JUS2:
JUS2
第4章 单片机汇编语言程序设计

RO 20HBCMDH BCDL
SWAP A ORL A, #30H MOV 21H, A SJMP $
;BCDH数送A的低4位 21 0011
;完成转换 @R0 ;存数
H22HB0C001D0HBCD 01000L
END
回目录 上页 下页
方法1小结:
以上程序用了8条指令,15个内存字节,执行时间为9个 机器周期。
21 0011BCDH H22H0011BCDL
回目录 上页 下页
程序:
ORG 1000H
MOV R0, #22H ;R0 22H MOV @R0,#0 ; 22H 0 MOV A, 20H ;两个BCD数送A
A
B00C01D01H0BB0CC0D0DHL
XCHD A, @R0 ;BCDL数送22H ORL 22H, #30H ;完成转换
例4-7:设30H单元存放的是一元二次方程ax2+bx+c = 0
根的判别式△= b2 – 4ac的值。
试根据30H单元的值,编写程序,
判断方程根的三种情况。
在31H中存放“0”代表无实根,
存放“1”代表有相同的实根,
存放“2”代表两个不同的实根。
解:△为有符号数,有三种情况,这是一多重分支程序
即小于零,等于零、大于零。
R3
R2
回目录 上页 下页
程序:
ORG 1000H CLR C CLR A SUBB A, R0 MOV R2, A CLR A
SUBB A, R1 MOV R3 , A SJMP $ END
;CY 0
;A 0
;低字节求补
;送R2
;A清零 R3 0000
;高字节求补 0000
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2) 名字的定义规则 名字的定义要满足如下规则: (1) 数字不能作为名字的第一个符号; (2) 单独的问号(?)不能作为名字; (3) 一个名字的最大有效长度为31位,超过31位的部分计 算机不再识别; (4) 汇编语言中有特定含义的保留字(如操作码、寄存器名 等),不能作为名字使用。 为了便于记忆,名字的定义应该做到见名知义,如用 BUFFER表示缓冲区、SUM表示累加和等。
第4章 汇编语言程序设计
类型属性:变量的类型属性定义该变量所保留的字节数。 如BYTE(DB,1个字节长)、WORD(DW,2个字节长)、DWORD(DD,4 个字节长)、FWORD(DF,6个字节长)、QWORD(DQ,8个字节长)、 TBYTE(DT,10个字节长)。
在同一个程序中,同样的标号或变量的定义只允许出现一 次,否则汇编程序会指示出错。
实际上,汇编语言源程序中还可出现宏指令语句。宏指令 语句就是由若干条指令语句形成的语句体。一条宏指令语句的 功能相当于若干条指令语句的功能。
第4章 汇编语言程序设计
4.1.2 语句格式 指令语句和伪指令语句的格式是类似的,其格式如下: [名字] 操作码 操作数 [;注释]
其中,带方括号的项可以省略,注释内容以分号(;)引导。 1. 名字 1) 名字的标识符 名字也就是由用户按一定规则定义的标识符,可由下列符
第4章 汇编语言程序设计
(2) 变量在数据段、附加数据段或堆栈段中定义,后面不 跟冒号。它也可以用LABEL或EQU伪操作来定义。变量经常在操 作数字段出现,它也有段、偏移及类型三种属性。
段属性:用于定义变量的段起始地址。此值必须在一个段 寄存器中。
偏移属性:变量的偏移地址是从段的起始地址到定义变量 的位置之间的字节数。对于16位段,是16位无符号数;对于32 位段,则是32位无符号数。在当前段内给出变量的偏移值等于 当前地址计数器的值,当前地址计数器的值可以用$来表示。
第4章 汇编语言程序设计
2. 操作码 操作码用来指明操作的性质或功能,指令中的助记符都是 操作码。操作码与操作数之间用空格分开,如MOV、ADD等都是 操作码。
第4章 汇编语言程序设计
3. 操作数 指令中的操作数是用来指定参与操作的数据。对于一般 指令,可以有一个或两个操作数,也可以没有操作数;对于伪 指令和宏指令,可以有多个操作数。当操作数多于一个时,操 作数之间用逗号分开。操作数可以是常数和表达式。
第4章 汇编语言程序设计
3) 名字的两种主要形式
名字有标号和变量两种主要形式。
(1) 标号在代码段中定义,后面跟着冒号“:”,它也可 以用LABEL或EQU伪操作来定义。此外,它还可以作为子程序名 定义,由于子程序由伪指令定义,故子程序名不需冒号说明。 标号经常在转移指令或CALL指令的操作数字段出现,用以表示 转向地址。标号有三种属性:段、偏移及类型。
;给数据段寄存器DS赋值 ;取第1个加数 ;和第2个加数相加 ;存放结果
;返回DOS状态 ;段定义结束(CODE段) ;整个源程序结束
第4章 汇编语言程序设计
从上面这个例子可以看出,汇编语言源程序由若干条语句 组成,语句分为如下两类。
1) 指令语句 指令语句是由8086/8088CPU提供的指令形成的语句,能完 成一定的操作功能,能够翻译成机器代码的语句。
第4章 汇编语言程序设计
4.1 汇编语言程序格式
4.1.1 程序结构
【例4-1】 给出一个完整的汇编语言源程序,该程序的功能 是完成两个字节数据相加。
DATA BUF1 BUF2 SUM DB DATA CODE ASSUME 代码段
SEGMENT
DB
34H
DB
2AH
?
ENDS
SEGMENT
CS:CODE,DS:DATA
第4章 汇编语言程序设计
2) 伪指令语句
伪指令语句也叫指示性语句,它只是为汇编程序在翻译汇 编语言源程序时提供有关信息,并不翻译成机器代码。例如, 程序中的语句:
BUF1 DB 34H
BUF2 DB 2AH
SUM DB ?
就是伪指令语句,其功能是在内存中开辟3个名字分别为BUF1、 BUF2、SUM的字节单元,前两个单元的初值分别为34H和2AH, SUM仅指定一个字节单元,不定义确定的初值。
第4章 汇编语言程序设计
1) 常数
(1) 数值常数。汇编语言中的数值常数可以是二进制、八 进制、十进制或十六进制数,书写时用加后缀(二进制用B、八 进制用O或Q、十进制用D、十六进制用H)的方式标明即可。对 于十进制数可以省掉后缀,对于十六进制数,当以A~F开头时, 前面加数字0,以避免和名字混淆,如十六进制数A6H应该写成 0A6H,否则容易和名字A6H相混。
第4章 汇编语言程序设计
(2) 字符串常数。包含在单引号中的若干个字符形成字符 串常数,字符串在计算机中存储的是相应字符的ASCII码。如 ‘A’的值是41H,‘AB’的值是4142H等。
;段定义开始(DATA段) ;第1个加数 ;第2个加数 ;准备用来存放和数的单元 ;段定义结束(DATA段) ;段定义开始(CODE段) ;规定DATA、CODE分别为数据段和
第4章 汇编语言程序设计
START: MOV AX,DATA MOV DS, AX MOV AL, BUF1 ADD AL, BUF2 MOV SUM,AL MOV AH,4CH INT 21H CODE ENDS END START
段属性:用于定义标号的段起始地址。此值必须在一个段 寄存器中,而标号的段则总是在CS寄存器中。
第4章 汇编语言程序设计
偏移属性:标号的偏移地址是从段起始地址到定义标号的 位置之间的字节数。对于16位段是16位无符号数;对于32位段 则是32位无符号数。
类型属性:用来指出该标号是在本段内引用还是在其他段 中引用的。如在段内引用,则称为NEAR,对于16位段,指针长 度为2字节;对于32位段,指针长度为4字节。如在段外引用, 则称为FAR,对于16位段,指针长度为4字节(段地址2字节,偏 移地址2字节);对于32位段,指针长度为6字节(段地址2字节, 偏移地址4字节)。