循环结构程序设计方案(汇编语言)

合集下载

汇编语言程序设计方法

汇编语言程序设计方法

第四章汇编语言程序设计方法第一节汇编语言程序设计1、程序设计语言1)、机器语言直接用二进制数表示指令和数据的最原始的程序设计语言。

2)、汇编语言用助计符来表示的面向机器的程序设计语言。

用汇编语言编制的程序须要用“人工汇编”或“机器汇编”将其翻译成机器语言,才能被机器认识。

3)、高级语言高级语言是一种面向过程而独立于计算机硬件结构的通用计算机语言。

如FORTRAN、PASCAL、C语言等。

注意:①机器语言直接面对机器,实时性好,但难以编出较复杂的程序,现基本上被汇编语言代替;②汇编语言是目前单片机初学者采用的一种编程方法,它具有实时性强,对较复杂的程序也能编制。

③高级语言它面向过程易于编制复杂程序,具有通用性好,程序简单,但它要求占用较大的内存空间,实时性差,目前从事单片机的开发和研究工作须掌握这种方法。

2、汇编语言的规范1)、汇编语言源程序的格式标号:操作码目的操作数,源操作数;注释2)、汇编语言伪指令①ORG----起始地址伪指令;功能:用来规定目标程序或数据的起始地址。

格式:[标号:] ORG 16位地址说明:在一个程序中允许有多个ORG指令,以规定不同程序段的起始位置。

②END-----汇编结束伪指令;功能:用来告诉汇编程序,此源程序到此结束。

格式:[标号:] END说明:在一个程序中有且只有一个END指令。

例如:ORG 1000HSTART:MOV A,BJNB ACC.7,DONECPL ADONE:MOV B,AEND③EQU----赋值伪指令;格式:字符名称EQU 数或汇编符号功能:将右边值赋给左边用户定义的字符说明:a、由EQU赋的字符可以作数值、数据地址、代码地址。

b、由EQU伪指令所定义的符号必须先定义后使用。

例如:SDGFG EQU 58H ;表示SDGFG=58H④DB----定义字节伪指令;格式:[标号:] DB 8位(二进制)数据表。

功能:用于告诉汇编程序从指定的地址单元开始,定义若干个字节存储单元的内容。

山东大学汇编语言上机实验——实验二

山东大学汇编语言上机实验——实验二

程序的基本结构练习一:循环程序设计一、实验目的(1) 加深对循环结构的理解;(2) 掌握循环程序的设计方法;(3) 熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。

二、实验内容1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。

同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。

2.设STR字符串是以0结尾。

试编写一个把字符串中的所有大写字母改为小写字母的程序并将转换后的字符串显示输出。

3.试编程从自然数1开始累加,直到累加和大于5050为止,统计被累加的自然数的个数,并把统计的个数送入COUNT单元,累加和送入TOTAL单元。

三、算法描述流程图实验内容1、2、3的流程图分别为图1、图2、图3。

四、实验步骤1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。

同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。

1)输入源程序:DA TA SEGMENTBUF DW 23,123,-12,-210,45,0,90,-453BUF1 DW 8 DUP(0)BUF2 DW 8 DUP(0)A DWB DW DA TA ENDSCODE SEGMENTASSUME CS: CODE, DS: DA TASTART: MOV AX, DATAMOV DS, AXLEA BX, BUFLEA SI, BUF1LEA DI, BUF2MOV A,0MOV B,0MOV CX,8L0: MOV AX,[BX]CMP AX,0JGE L1MOV [DI],AXADD DI,2INC BJMP NEXTL1: MOV [SI],AXADD SI,2INC ANEXT: ADD BX,2LOOP L0MOV AH, 4CHINT 21HCODE ENDSEND START2)运行程序。

汇编语言程序设计实验报告二(分支循环程序实验)

汇编语言程序设计实验报告二(分支循环程序实验)

汇编语言程序设计实验报告二(分支循环程序实验)一、实验目的1、掌握分支程序、循环程序的设计方法。

2、熟悉DEBUG程序的使用方法。

3、掌握汇编语言程序的编辑、汇编、连接以及调试过程。

二、实验内容1、编写一程序,将内存中某一区域的数据传送到另一个区域中(要求用循结构,不考虑数据块重叠问题)。

2、编写一程序,将内存中某一区域的数据传送到另一区域(要求考虑数据块重叠问题)。

三、实验准备1、预习数据传送指令,熟悉分支和循环程序设计方法。

2、预习DEBUG调试程序的使用方法。

3、根据实验内容要求,编写好实验源程序。

四、实验步骤1、用QE或其它编辑软件,在计算机上编辑源程序,使其正确无误。

2、汇编、连接源程序,产生.EXE可执行文件。

3、运行程序。

(1) 进入DEBUG。

打入DEBUGT MYPROG.EXE。

MYPROG为所编程序的文件名。

(2) 先用G命令连续剧连续执行程序,程序执行完毕后,观察运行结果。

如果执行后是对的,说明程序编写是正确的,如果结果不对,说明程序有错误,则执行下一步。

(3) 检查程序。

在程序中设置若干断点,以便杳出错误所在。

(4) 采用单步命令T或执行程序,观察各寄存器和存储单元内容,以便找到错误之处。

五、实验报告要求1、列出程序清单,并给出程序流程图。

2、总结实现数据传送的几种方法,指出它们的区别。

开始3、分析实验中所遇到的一些问题,分析错误原因。

4、说明本实验中是如何使用DEBUG进行调试的。

CX、SI、DI置初值六、流程图勤开始设置增量方式CX、SI、DI置初值保存SI内容AL [SI] SI SI+源块长度[DI] AL N SI>DIYSI SI+1 恢复SI内容恢复SI内容DI DI+1CX CX-1 设置减量方式N CX=0, SI指向源块末尾DI指向目的块末尾Y结束 [DI] [SI]题一流程图 N 传完了吗, 书馆 Y结束题二流程图七、程序清单题一程序清单:STACK SEGMENT STACK ‘STACK’DB 100 DUP(0)STACK ENDSDATA SEGMENT PARA ‘DATA’SOUR DB 0、1、2、3、4、5、6、7、8、9 DEST DB 10 DUP(,)DB ‘$’DATA ENDSSEGMENT PARA‘CODE’ASSUME CS:CODEMAIN PROC FARSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV CX,10MOV SI,offset SOURMOV DI, offset DESTAGAIN: MOV AL,[SI]MOV [DI],ALINC SIIN DILOOP AGAINMOV DX,offset DESTMOV AH,09HINT 21HRETMAIN ENDPCODE ENDSEND START题二程序清单:DATA SEGMENT PARA ‘DATA’STRG DB ‘ABCDEFGHIJKLMNOP’STG1 EQU STRG+4STG2 EQU STHG+8STRSE EQU 6DATA ENDSSTACK SEGMENT PARA ‘CODE’DB 100 DUP(0) STACK ENDSCODE SEGMENT PARA ‘CODE’ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK PROC FARSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXMOV CX,STRSEMOV SI,OFFSET STG1MOV DI,OFFSET STG2CLDPUSH SIADD SI,STRSE-1CMP SI,DIPOP SIJL MOVESTDADD SI,STRSE-1ADD DI,STRSE-1 MOVE: REP MOVSB RETMAIN ENDPCODE ENDSEND START。

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

【汇编语言第3版】第7章 循环指令及循环结构程序设计

【汇编语言第3版】第7章  循环指令及循环结构程序设计

初始化部分
工作部分 修改部分 控制部分 结尾部分
6.2.2循环程序的结构
第6章 循环指令与循环结构程序设计
汇 编 语 言 程 序 设 计
(1)先执行后判断(非0次循环结构) (2)先判断后执行(0次循环结构)
初始化部分 工作部分 控制部分 修改部分 工作部分 控制部分 修改部分 结尾部分 结尾部分
取数 Y
结束
=0?
N 移位 CF=0? Y N 计数加1
第6章 循环指令与循环结构程序设计
3.用逻辑变量控制循环
含义:用转移指令来判断循环条件 应用场合:控制转入不同的循环支路 方法:把逻辑变量送入寄存器中,以逻辑变量各位的状态作为执行某段
汇 编 语 言 程 序 设 计
程序的标志
按逻辑变量控制循环程序设计举例
第6章 循环指令与循环结构程序设计
汇 编 语 言 程 序 设 计
【例6-9】在以BUF为起始地址的内存中放有若干单字节无符号数,假定逻辑变量 的长度为一个字节,它的D0 ~ D7 位对应着BUF ~ BUF+7单元内容的运算。某位为 0,则将相应单元内容的D7位复制到D6位,其他位不变;某位为1,则将相应单元 内容之高低四位互换。假定逻辑变量的值是10010101
汇 编 语 言 程 序 设 计
第6章 循环指令与循环结构程序设计
6.3 多重循环程序设计
含义:指循环体内还有循环,也就是循环嵌套 注意:(1) 不允许循环结构交叉 (2)转移指令只能从循环结构内转出或可在同层循环内转移
汇 编 语 言 程 序 设 计
多重循环程序设计应用举例
第6章 循环指令与循环结构程序设计
第6章 循环指令与循环结构程序设计
本章主要教学内容

《汇编语言程序设计》实验指导书

《汇编语言程序设计》实验指导书

实验一简单程序编制和上机过程一.实验目的1.掌握计算机常用代码的软件转换技术。

2.熟悉DEBUG软件的使用。

3.掌握简单程序的编程方法。

二.实验内容代码转换是计算机和I/O设备进行信息交换的重要技术之一。

各种I/O设备所提供和接收的数据编码不尽相同。

为了处理这些信息,计算机必须将各种不同编码形式的信息转换成别种适当的数据形式。

例如,键盘输入的数据均为ASC Ⅱ码形式存储在内存中,通常要求将其转换成相应的数据形式。

一般实现代码转换有两种方法:1.软件法利用CPU的算术逻辑运算功能,通过运算或查表实现各种数据代码间的转换。

该方法经济但速度慢。

2.硬件法利用专用代码转换集成电路进行转换。

如74LS74可把BCD码转换为七段代码。

这种方法需要硬件费用,但速度快。

本实验要求掌握软件编码转换技术。

计算机常用的代码有二进制、八进制、十六进制、BCD码、ASCⅡ码、七段码等,它们之间的相互关系如下表所示。

本次试验的内容是ASCⅡ码转换为未组合BCD码设从键盘输入十进制数的ASCⅡ码已存放在起始地址CS :150H的单元中,把它转换成未组合BCD码后,再分别存入起始地址为CS:15AH的单元中。

若输入的不是十进制数的ASCⅡ码,则相应存放结果单元的内容为“FF”。

提示:1.组合BCD码是一位十进制数字占一个字节,高半字节为0,低半字节为该十进制数字的BCD码。

ASCⅡ码转换为未组合BCD码只需减30H。

2.程序框图如下图所示。

3.程序执行前,需要在CS:150H内存缓冲区写入待转换的ASCⅡ码。

方法如下:方法一:用A命令-ACS:150 DB 35,39,30,41,32CS:155 ∧C方法二:用E 命令-ECS:150,35,39,30,41,32方法三:用F命令-FCS:150 L5 35,39,30,41,321.执行程序后检查执行结果可用D命令:-DCS:15ACS:15A 05,09,00,FF,02ASCⅡ码转换为未组合BCD码的程序流程图参考程序如下:ORG 100HMOV CX,0005HMOV DI,150HBB:MOV BL,0FFHMOV A,[DI]CMP AL,3AHJNB DONESUB AL,30HJB DONEMOV BL,ALDONE:MOV AL,BLMOV [DI+0AH],ALINC DILOOP BBINT 20HORG 150HDB 35H,39H,30H,41H,32H实验二顺序结构的程序设计一.实验目的1.掌握计算机常用代码的软件转换技术。

汇编语言程序设计

汇编语言程序设计

…… 跳转到出口处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
主 程 序

第4章 汇编 语言程序设计

第4章  汇编 语言程序设计

DJNZ R1,LOOP ;R1减1不为零,则跳LOOP处 NOP
HERE:SJMP
HERE
上述4个字段应该遵守的基本语法规则如下。
10
1.标号字段
语句所在地址的标志符号,才能被访问。如标号 “START”和“LOOP”等。有关标号规定如下: (1)标号后必须跟冒号“:”。 (2)标号由1~8个ASCII码字符组成,第一个字符必须是
8
汇编语言语句是符合典型的汇编语言的四分段格式:
标号字段 (LABLE) 操作码字段 (OPCODE) 操作数字段 (OPRAND) 注释字段 (COMMENT)
标号字段和操作码字段之间要有冒号“:”分隔; 操作码字段和操作数字段间的分界符是空格; 双操作数之间用逗号相隔;
操作数字段和注释字段之间的分界符用分号“;”。
表示的机器语言程序,才能识别和执行。
完成“翻译”的程序称为汇编程序。经汇编程序“汇编”得 到的以“0”、“1”代码形式表示的机器语言程序称为目标 程序。
5
优点:用汇编语言编写程序效率高,占用存储空间小,运行 速度快,能编写出最优化的程序, 缺点:可读性差,离不开具体的硬件,是面向“硬件”的语 言通用性差。 2.高级语言
功能是把P1.6的位地址赋给变量QA。
4.2
汇编语言源程序的汇编
“汇编”?汇编可分为手工汇编和机器汇编两类。
22
4.2.1
手工汇编
通过查指令的机器代码表(表3-2),逐个把助记符指令 “翻译”成机器代码,再进行调试和运行。 手工汇编遇到相对转移偏移量的计算时,较麻烦,易出 错,只有小程序或受条件限制时才使用。实际中,多采用“ 汇 编程序”来自动完成汇编。
16
重叠。例如:
ORG …… ORG …… ORG …… 2000H 2500H 3000H

微机实验二

微机实验二

实验二:汇编语言(三种基本结构程序)设计与调试一、实验目的1.学习汇编语言(三种基本结构程序)设计与调试。

2.掌握多分支结构程序设计的方法。

3.掌握循环结构程序设计的方法。

4.熟悉在PC机上建立、汇编、连接和调试程序的方法。

二、实验内容(顺序结构的程序设计)程序一:设W、X、Y、Z均为16位带符号数。

要求完成计算表达式(W-(X*Y+Z-220))/X。

将表达式的商和余数存入数据区RESULT单元开始的区域中。

编程思路:该题目要求掌握乘除法运算中带符号数和无符号数运算的区别。

为了实现指定功能,应从以下几个方面考虑:(1)带符号数的乘除法运算应选用的指令。

(2)乘、除法运算中操作数的长度问题。

(3)带符号数的扩展问题。

参考程序清单DATA SEGMENTW DW -304X DW 1000Y DW -12Z DW 20RESULT DW 2 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AX,XIMUL YMOV CX,AxMOV BX,DXMOV AX,ZCWDADD CX,AXADC BX,DXSUB CX,220SBB BX,0MOV AX,WCWDSUB AX,CXSBB DX,BXIDIV XMOV RESULT,AXMOV RESULT+2,DXMOV AH,4CHINT 21HCODE ENDSEND START三、实验内容(分支结构的程序设计)程序二:在数据区中定义三个带符号字节变量,编写程序将其中的最大数找出送到MAX单元中。

该题目要求掌握多分支程序设计方法。

编程思路:为了实现指定功能,应从以下几个方面考虑:(1) 确定编程的算法思想。

(2) 确定带符号数比较大小转移应选择哪一组条件转移指令。

参考程序清单:DATA SEGMENTX DB 115Y DB 23Z DB -20MAX DB ?DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV AL,XCMP AL,YJG NEXTMOV AL, YCMP AL,ZJG EXITMOV AL,ZJMP EXITNEXT:CMP AL,ZJG EXITMOV AL,ZEXIT:MOV MAX,ALMOV AH,4CHINT 21HCODE ENDSEND START ;返回DOS四、实验内容(循环结构的程序设计)程序三:编写程序实现将数据段STR1单元开始的20个字符移到STR2开始的存储区。

汇编语言程序设计(5)

汇编语言程序设计(5)
15
例:
第 4 章 汇编语言程序设计简介
ORG 1000H
BUF1: DB 38H, 7FH, 80H
BUF2: DB 45H, 66H
ORG伪指令指定了标号BUF1的地址为1000H, 而DB伪 指令是将其后的二进制数表38H, 7FH, 80H依次存放在1000H, 1001H, 1002H 3 个连续单元之中, BUF2也是一个标号, 其地 址与前一条伪指令连续, 即1003H, 1004H地址单元中依次存 放 45H, 66H。
如果在程序中要多次使用到某一地址,由EQU指令将其赋值 给一个字符名称,一旦需要对其进行变动,只要改变EQU命 令后面的数字即可,而不需要对程序中涉及到该地址的所有 指令逐句进行修改。
13
第 4 章 汇编语言程序设计简介
注意, 由EQU等值的字符名称必须先赋值后使用,且 在同一个源程序中,同一个标号只能赋值一次。 例:
H)=10H。
18
第 4 章 汇编语言程序设计简介
六、BIT——位地址符号指令
指令功能为:将位地址赋值给指定的符号名称,通常用于位符 号地址的定义。
指令如下:
字符名称 BIT 位地址
例如,X1 BIT P1.0
汇编结果为将位地址P1.0赋给变量X1,即在程序中便可 使用X1代替位地址P1.0。
19
(c)多分支
30
第 4 章 汇编语言程序设计简介
2. 一般分支程序结构实例
【例5】 x, y均为8位二进制数, 设 x存入R0, y存入R1, 求解:
1 y 1
0
x0 x0 x0
31
第 4 章 汇编语言程序设计简介
程序如下:
START:
CJNE R0,#00H,SUL1

用汇编语言编写的程序

用汇编语言编写的程序

用汇编语言编写的程序汇编语言是一种低级的编程语言,直接操作计算机硬件。

通过使用汇编语言,程序员可以更加精确地控制计算机的功能和执行过程。

下面将介绍一个用汇编语言编写的程序的例子,以帮助读者更好地理解汇编语言的特点和用途。

一、程序概述这个用汇编语言编写的程序的功能是计算从1到100的所有整数的和。

通过使用汇编语言的特性,我们可以实现高效的计算过程,以最小的资源消耗完成任务。

二、程序设计程序的设计思路是使用循环结构,从1开始累加到100,并将结果保存在寄存器中。

具体的程序设计如下:1. 初始化寄存器:将累加结果的寄存器置零,准备开始累加过程;2. 设定循环起始值:将循环计数器设为1,作为累加的起始值;3. 累加过程:将当前的累加结果与循环计数器相加,将结果保存在累加结果的寄存器中;4. 判断循环结束条件:如果循环计数器小于等于100,则继续循环,否则跳转到结束;5. 循环迭代:将循环计数器加1,准备下一次循环;6. 结束:输出最终的累加结果。

三、程序实现下面是具体的汇编代码实现:```assemblysection .datasum db 0 ; 累加结果count db 1 ; 循环计数器section .textglobal _start_start:mov al, 0 ; 初始化累加结果寄存器 mov bl, 1 ; 初始化循环计数器add al, bl ; 累加过程inc bl ; 循环迭代cmp bl, 101 ; 判断循环结束条件 jle _start ; 继续循环; 输出最终累加结果mov ah, 0x0emov al, 'T'int 0x10mov ah, 0x0e mov al, 'h' int 0x10mov ah, 0x0e mov al, 'e'int 0x10mov ah, 0x0e mov al, ' 'int 0x10mov ah, 0x0e mov al, 's'int 0x10mov ah, 0x0e mov al, 'u'int 0x10mov ah, 0x0e mov al, 'm' int 0x10mov ah, 0x0e mov al, ' 'int 0x10mov ah, 0x0e mov al, 'i'int 0x10mov ah, 0x0e mov al, 's'int 0x10mov ah, 0x0e mov al, ':'int 0x10mov ah, 0x0e mov al, ' 'int 0x10mov ah, 0x0e mov al, '5'int 0x10mov ah, 0x0emov al, '0'int 0x10mov ah, 0x0e mov al, '5'int 0x10mov ah, 0x0e mov al, '0'int 0x10mov ah, 0x0e mov al, '0'int 0x10mov ah, 0x0e mov al, '0'int 0x10mov ah, 0x0e mov al, 0x0d int 0x10mov ah, 0x0e mov al, 0x0aint 0x10; 程序结束mov eax, 1xor ebx, ebxint 0x80```四、程序运行结果以上的程序经过编译、链接后可以在计算机上运行。

汇编语言程序设计实验报告二

汇编语言程序设计实验报告二

汇编语言程序设计实验报告(二)一、实验目的1)加深对循环结构的理解。

2)掌握循环程序的设计方法。

3)学习子程序的定义和调用方法。

4)掌握子程序、子程序的嵌套、递归子程序的结构。

5)掌握子程序设计、编制及调试。

6)熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。

二、实验内容1)编制在屏幕上显示九九乘法表的程序。

2)编制在屏幕上显示用*组成的三角形的程序。

三、实验结果(1)(2)四、源代码(1)DA TA SEGMENTM DB 31H,32H,33H,34H,35H,36H,37H,38H,39H DA TA ENDSSTACK1 SEGMENT STACKDW 20H DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACK1 START:MOV AX,DA TAMOV DS,AXMOV CX,9MOV DI,OFFSET MLOP1:PUSH CXMOV CX,[DI]AND CX,0FHMOV SI,OFFSET M LOP2:MOV AL,[SI]MOV DL,ALMOV AH,2INT 21HAND AL,0FHMOV BH,ALMOV DL,'*'MOV AH,2INT 21HMOV BL,[DI]MOV DL,BLMOV AH,2INT 21HMOV DL,'='MOV AH,2INT 21HAND BL,0FHMOV AL,BHMOV AH,0MOV DL,10DIV DLMOV BL,AHCMP AL,0JE NEXTMOV DL,ALADD DL,30HMOV AH,2INT 21H NEXT:MOV DL,BLADD DL,30HMOV AH,2INT 21HMOV DL,' 'MOV AH,2INT 21HINC SILOOP LOP2MOV DL,0AHMOV AH,2MOV DL,0DHINT 21HINC DIPOP CXLOOP LOP1MOV AH,4CHINT 21HCODE ENDSEND START(2)STACK1 SEGMENT STACKDW 20H DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK1 BEGIN:MOV AH,1INT 21HMOV BL,ALSUB BL,30HMOV DL,0AHINT 21HMOV DL,0DHMOV AH,2INT 21HMOV BH,0MOV CX,BXMOV BX,1L1: PUSH CXMOV CX,BX L2: MOV DL,'*'MOV AH,2INT 21HLOOP L2MOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HADD BX,1POP CXMOV AH,4CHINT 21HCODE ENDSEND BEGIN五、实验心得这是第二次做汇编实验,首先,心理上已经没有了第一次做实验的那种茫然,知道了想要编写一个完整的程序,应当先将这一个大问题分解成若干个小的问题,找出每一个小问题所对应的解决方法,然后用代码一步一步实现,再将这一个一个的小问题串联起来,找到它们的契合点,用联系把它们组成一个完整的程序,其中最常用的就是转移指令和循环。

汇编语言流程图

汇编语言流程图

判定条件
判定条件
语句1
语句2 语句1 … 语句2 … 语句n
IF-THEN-ELSE结构
CASE结构
§5.3.1 用比较/测试的方法实现IF-THENELSE结构
实现方法:在产生分支之前,通常用比较、测试的办
法在标志寄存器中设置相应的标志位,然后再选用适当 的条件转移指令,以实现不同情况的分支转移。
DB 0DH,0AH,"OK,Please answer in German!$"
DATA ENDS
CODE SEGMENT
ASSUME
CS:CODE,DS:DATA
START: MOV AX,DATA
MOV
DS,AX
LEA
DX,MENU
;显示菜单
MOV
AH,9
INT
21H
MOV INT CMP JB CMP JA LEA SUB SHL XOR ADD
(1)进行比较,使用比较指令:
CMP
DEST,SRC
该指令进行减法操作,而不保存结果,只设置标志位。
(2)进行测试,使用测试指令
TEST DEST,SRC
该指令进行逻辑与操作,而不保存结果,只设置标志位。
§5.3.2 用地址表法实现CASE结构(即多路分支)
用地址表法实现CASE结构的基本思路是:将各 分支程序的入口地址依次罗列形成一个地址表,让 BX指向地址表的首地址,从键盘接收或其他方式获 取要转到的分支号,再让BX与分支号进行运算,使 BX指向对应分支入口地址,最后即可使用JMP WORD PTR [BX] 或JMP DWORD PTR [BX] 指 令实现所要转到的分支;程序设计流程图如图5.6所 示:

第五章 循环与分支程序设计

第五章 循环与分支程序设计
12
continue: add loop mov loop ……
2. 分支程序设计
? ? … case 1 case 2 case n case 1 case 2 case n
CASE 结构
(1) 逻辑尺控制 (2) 条件控制
IF-THEN-ELSE 结构
(3) 地址跳跃表(值与地址有对应关系的表) 地址跳跃表(值与地址有对应关系的表)
13
x(x1,x2,…… x2,……,x10) 例:有数组 x(x1,x2,……,x10) 和 y(y1,y2,……,y10), (z1,z2,…… z2,……,z10) 编程计算 z(z1,z2,……,z10) z1 = x1 z2 = x2 z3 = x3 z4 = x4 z5 = x5 z6 = x6 z7 = x7 z8 = x8 z9 = x9 + y1 + y2 - y3 - y4 - y5 + y6 - y7 - y8 + y9
3
1. 循环程序设计
初始化
初始化
N N
控制条件
Y
循环体 控制条件
Y
循环体
DO-WHILE 结构
DO-UNTIL 结构
4
初始化:设置循环的初始状态 循环体:循环的工作部分及修改部分 控制条件:计数控制
特征值控制 地址边界控制
5
例:把 BX 中的二进制数以十六进制的形式显示在屏幕上
BX
1
2 3
4je lea L: shr jnb jmp add1: add jmp continue: …… routine1: …… routine2: …… al, 0
(寄存器间接寻址) 寄存器间接寻址)
continue bx, branch_table ;逻辑右移 al, 1 逻辑右移 ;jnb=jnc add1 ;段内间接转移 word ptr[bx] bx, type branch_table L

汇编语言程序设计步骤

汇编语言程序设计步骤

汇编语言程序设计步骤一、引言汇编语言是一种底层的计算机语言,用于编写机器指令,控制计算机硬件。

它是一种直接操作计算机硬件的语言,因此在编写汇编语言程序时需要遵循一系列步骤,以确保程序的正确性和高效性。

二、程序设计步骤1. 确定程序的目标和需求:在编写汇编语言程序之前,我们首先需要明确程序的目标和需求。

这包括程序要实现的功能、输入和输出的格式等。

2. 设计程序的算法:根据程序的目标和需求,我们需要设计程序的算法。

算法是程序的核心,它描述了解决问题的步骤和方法。

在设计算法时,我们需要考虑程序的效率和可读性。

3. 编写程序的伪代码:在正式编写汇编语言程序之前,我们可以先编写程序的伪代码。

伪代码是一种类似自然语言的描述,用于描述程序的逻辑结构和算法。

编写伪代码可以帮助我们更清晰地理解程序的逻辑。

4. 编写汇编语言程序:在编写汇编语言程序时,我们需要根据程序的伪代码,使用汇编语言的指令和语法,逐步实现程序的功能。

编写程序时,需要注意变量的定义、指令的顺序和循环结构的使用等。

5. 进行程序的测试和调试:编写完汇编语言程序后,我们需要进行测试和调试。

通过输入不同的数据,检查程序的输出是否符合预期。

如果程序出现错误或bug,我们需要通过调试,找出错误的原因并进行修复。

6. 优化程序的性能:为了提高程序的执行效率,我们可以对程序进行优化。

优化的方法包括改进算法、减少指令的使用和优化内存的访问等。

通过优化程序,可以使程序更快速地运行。

7. 文档化和维护程序:编写完汇编语言程序后,我们需要撰写程序的文档,包括程序的功能、输入和输出的格式、程序的使用方法等。

同时,还需要对程序进行维护,及时修复bug和添加新的功能。

三、总结汇编语言程序设计是一项复杂而重要的任务。

通过遵循上述步骤,我们可以编写出高质量、高效率的汇编语言程序。

同时,编写汇编语言程序也需要耐心和细心,不断学习和积累经验,以提升自己的编程能力。

通过不断的实践和学习,我们可以成为一名优秀的汇编语言程序员。

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

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

4.2.2 分支程序的设计方法 ★条件控制 ★逻辑尺控制 ★地址跳转表控制
1. 条件控制——利用比较和条件转移指令实现分支,是最常用的 程序设计方法。
பைடு நூலகம்
例如,求解函数:
练习题2. 编写程序,比较两个字符串STRING1和STRING2所 含字符是否完全相同,若相同则显示“MATCH”,若不同则显示 “NO MATCH”。 答案: datarea segment string1 db ‘asfioa’ ;定义字符串STRING1 string2 db ‘xcviyoaf’ ;定义字符串STRING2 mess1 db ‘MATCH’,’$’ ;定义显示字串“MATCH” mess2 db ‘NO MATCH’,’$’ ;定义显示字串“NO MATCH” datarea ends prognam segment main proc far assume cs:prognam,ds:datarea start: push ds ;将ds:00入栈 sub ax,ax push ax mov ax,datarea ;装填数据段及附加段 mov ds,ax mov es,ax
程序流程图
mov ch,4 rotate: mov cl, 4 rol bx,cl mov al,bl and al,0fh add al,30h ;’0’-’9’ ASCII 30H-39H cmp al,3ah jl printit add al,7h ;’A’-’F’ ASCII 41H-46H printit: mov dl,al mov ah,2 int 21h dec ch jnz rotate
例4.3 将首地址为A的N字数组按照从小到大的次序整序(气 泡算法,多重循环) A dw 32,85,16,15, 8

汇编语言程序汇总

汇编语言程序汇总

例:延时程序,多重循环实现软件延时。 DELAY:MOV DX,3FFH TIME:MOV AX,0FFFFH TIME1:DEC AX NOP JNE TIME1 DEC DX JNE TIME RET
内循环控制变量AX,初值=FFFFH 外循环控制变量DX,初值=3FFH
五、字符串处理程序
字符:ASCII码 说明:
MOV PRODUCT[BX+2], AX
MOV PRODUCT[BX+4], DX
PUSHF
; 保存后一次相加的进位标志
MOV AX, MULNUM[BX+2] ; A→AX
MUL DI
; A×C
POPF;标志出栈
ADC DX,0 ADC AX, PRODUCT[BX+4] ; 与部分积4的相应部分相加 ADC DX, 0 MOV PRODUCT[BX+4], AX MOV PRODUCT[BX+6], DX RET START ENDP CODE ENDS END BEGIN
START PROC FAR
; 定义子程序
ASSUME CS:CODE,DS:DATA,SS:STACK
BEGIN: PUSH DS
;(4)置子程序返回地址
MOV AX,0
PUSH AX
MOV AX,DATA
;置DS
MOV DS,AX
MOV AX,STACK
;置SS
MOV SS,AX
MOV AX,TOP
mov dl,0 ;串长度初始DL=0
mov al,cr ;结束符→AL
again:scasb
;搜索串
je done;找到转DONE,停止搜索
inc dl
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编语言实验报告
实验名称:循环结构程序设计
姓名:________________________
学号:_________________
班级:_________________
一、实验内容
1. 用多种循环方法实现1+2+3+…+20的程序(至少二种方法);
2. 编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z
或a-z字符,均显示“c”;若是回车字符<CR>其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入;(选做)
3、编写一个汇编语言程序,要求将BX寄存器内的小写字母用大写字母显示出来。

4、A DDRI元是存放数据的内存单元,要求将该内存单元中的字依次用十六进制数显示出来。

二、实验目的
1. 掌握循环程序的结构。

2. 掌握循环程序的设计、编写及调试方法。

3. 掌握循环程序设计的基本方法。

主要掌握几种基本的循环程序设计技巧,如
计数法程序设计、当循环、直到循环等程序设计技术。

三、实验结果
1、将内存中的数据块中(BUFF为起始地址)奇数和偶数分别存入以ADDR和ADDR开始的存储块中,并分别统计其中的奇、偶数,将统计结果存放在RESULT 开始的两个字存储单元中。

实验代码:(1.ASM 1.OBJ 1.EXE)
data segme nt
buff dw 6,35,99,17,80,69,50,33
addr1 dw 8 dup⑺
addr2 dw 8 dup(?)
result dw 0,0
data ends
code segme nt
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov cx,8d
mov si,0
mov di,0
mov bx,0
mov dx,0
L1:
test buff[si],0001h
je L2
mov ax,buff[si]
mov addr2[bx],ax
add si,2
add bx,2
inc dl
dec cx
jmp L1
L2:
mov ax,buff[si]
mov addr1[di],ax
add di,2
add si,2
inc dh
dec cx
jmp L1
mov si,0
mov byte ptr result[si],dh
add si,2
mov byte ptr result[si],dl code ends
end start
运行结果如下:
代码如下:(2. ASM 2.0BJ 2.EXE) data segme nt x dw 30d
y dw 10d
data ends
code segme nt
assume cs:code,ds:data
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
mov cx,x
mov bx,y
mov ax,0
L1:
add ax,bx
loop L1
mov dx,ax
mov ah,2
int 21h
3、用多种循环方法实现1+2+3+…+20的程序(至少二种方法)
代码 1:( 31.ASM 31.0BJ 31.EXE)
DATA SEGMENT
X DW 0D Y DW 20D DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:
PUSH DS SUB AX,AX PUSH AX
MOV AX,DATA MOV DS,AX MOV BX,X MOV CX,Y MOV AX,0 L1:
INC BX ADD AX,BX LOOP L1 MOV DX,AX MOV AH,2 INT 21H CODE ENDS
END START
运行结果1如下:(结果存于DX 寄存器中)
code ends end start
运行结果如下:
实验代码 2 如下:(32.ASM 32.OBJ 32.EXE)
DATA SEGMENT
Y DW 20D DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:
PUSH DS SUB AX,AX PUSH AX
MOV AX,DATA MOV DS,AX MOV CX,Y MOV AX,0 MOV BX,0 L1:
INC BX ADD AX,BX CMP BX,20 JNZ L1
MOV DX,AX MOV AH,2 INT 21H CODE ENDS
END START
运行结果2如下:(实验结果存于DX 寄存器中)
4、编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z
或a-z字符,均显示“c”;若是回车字符<CR>其ASCII码为ODH),则结束程序, 若为其它字符则不显示,继续等待新的字符输入
实验代码如下:(4.ASM 4.0BJ 4.EXE)
code segme nt
assume cs:code
start:
mov ah,1
int 21h
cmp al,Odh
je exit
cmp al,'0'
jb start
cmp al,'9'
jbe output1
cmp al,'A'
jb start
cmp al,'Z'
jbe output
cmp al,'a'
jb start
cmp al,'z'
jbe output
output1: mov dl,al
mov ah,2
int 21h
jmp start
output:mov ah,02h
mov dl,'c'
int 21h
exit: mov ah,4ch
int 21h
code ends
end start
运行结果如下:
5、编写一个汇编语言程序,要求将BX寄存器内的小写字母用大写字母显示出来。

实验代码如下:(5.ASM 5.OBJ 5.EXE)BX 寄存器中的测试数据位3132H CODE SEGMENT
ASSUME CS:CODE
START:
MOV BX,6162H
SUB BX,2020H
MOV DL,BL
MOV AH,02
INT 21H
MOV BL,BH
MOV DL,BL
MOV AL,02
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
运行结果如下图:
& ADDRI元是存放数据的内存单元,要求将该内存单元中的字依次用十六进制数显示出来。

实验代码如下:(6.ASM 6.OBJ 6.EXE) 测试数据为1EH,3DH,34H,98H DATA SEGMENT
ADDR DB 1EH,3DH,34H,98H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
四、实验心得体会
本次实验主要是循环结构的程序。

通过本次实验,学习汇编语言中循环结构 类型的程序的编辑、编译与连接,更好的掌握分支程序的结构。

通过本次实验,我对循环结构有了一定的理解,尤其是 LOOP ®环指令,对
于cmp 指令和JZN JZ 等指令也有了一定的了解
MOV DS,AX MOV SI,0
MOV DI,OFFSET ADDR STEP:
MOV AL,[DI] ADD DI,1 MOV BL,AL MOV DL,AL MOV CL,4 SHR DL,CL CMP DL,9 JBE NEXT1 ADD DL,7
NEXT1: ADD DL,30H
MOV AH,2 INT 21H ; MOV DL,BL AND DL,0FH CMP DL,9 JBE NEXT2 ADD DL,7
NEXT2: ADD DL,30H
MOV AH,2 INT 21H ; INC SI CMP SI,4 JNZ STEP MOV AH,4CH ; INT 21H CODE ENDS
END START
运行结果如下:
显示高位ASCII 码
显示低位ASCII 码
返回DOS
实验过程是一个不断探索和实践,发现错误和改正错误的一个过程。

而在实验四这个试验中,首先,要解决的问题是熟悉和了解汇编语言中分支结构的内容。

在完成实验内容的过程中,由于还是处于摸索过程中,所以刚开始的进度很慢,是对着实验过程,一步一步的执行,还要不时的进行截图。

但,熟能生巧,到后来的实验就进行的比较快。

通过本次实验,掌握了汇编语言中循环结构这一部分的内容,通过上级实验,更好的理解我们在课本上看到的循环结构的内容,让我们在实验中更深一步的理解和应用。

相关文档
最新文档