循环结构程序设计方案(汇编语言)
汇编语言程序设计方法
;a≥b?
END
XCHG AX,[BX+2] ;交换a,b
MOV [BX],AX
NEXT1: MOV AX,[BX+2]
开始
N a≥b? Y
N b≥c? Y
N a≥b? Y
结束
a、 b 交 换 b、 c 交 换 a、 b 交 换
2
二、用MASM6.X伪指令实现
MASM6.X引入了条件控制伪指令,格式:
.IF 条件表达式 ;条件为真(非0),执行分支体
分支体
[.ELSEIF 条件表达式
分支体
;前面IF条件为假,并且当前ELSEIF条件为真执行分支体
[.ELSE
;前面IF条件为假执行分支体
分支体
.ENDIF
;分支结束
例如:
.IF AX>0 MOV BX,1 ;如果AX>0,则将1存入BX
.ELSEIF AX= =0 MOV BX,0 ;如果AX=0,则将0存入BX
结束处理部分
AGAIN: ADD AX,CX
;从20,19,……2,1倒序累加到AX
LOOP AGAIN ;每循环一遍,CX自动减1
MOV SUM,AX ;将累加和送入SUM单元
.EXIT 0
END
初始化部分
循环结束? 是 否
工作部分 修改部分 结束处理部分
汇编语言程序设计
解:程序如下:
FLASH:MOV A,01H ;置灯亮初值
FSH0: MOV R2,0AH ;置闪烁次数
FLOP: MOV P1,A ;点亮
LCALL DY1s ;延时1s
MOV P1,00H ;熄灭
LCALL DY1s ;延时1s
DJNZ R2,FLOP ;闪烁10次
RL A
;左移一位
SJMP FSH0 ;循环
三. 循环程序
循环程序一般包括以下几个部分: ⑴ 循环初值; ⑵ 循环体; ⑶ 循环修改; ⑷ 循环控制; 以上四部分可以有两种组织形式,其 结构如图4-6所示.
例设Xi均为单字节数,并按顺序存放在以50H为首地址的 内RAM存储单元中,数据长度个数N存在R2中,试编程求 和S=X1+X2+‥‥+XN,并将S双字节存放在R3R4中,设S< 65536.
;商累加寄存器清0 ;余数累加寄存器清0 ;置平均次数 ;读P1口数据 ;置除数平均次数 ;P1口数据除以100 ;商累加 ;回存 ; ;余数累加 ;回存 ; ; ;余数累加<100,余数累加寄存器不变 ;余数累加≥100, 商累加寄存器+1 ;减去100后差→余数累加寄存器 ;延时10ms ;判100次累加完否 未完继续 ;100次累加完毕,余数累加四舍五入 ; ;C=1,<50, 舍 ;C=0,≥50, 入
YELW:SETB P1.4
汇编语言-实验二 循环与子程序程序设计
实验二循环与子程序程序设计
一、实验目的
1) 加深对循环结构的理解。
2)掌握循环程序的设计方法。
3)学习子程序的定义和调用方法。
4)掌握子程序、子程序的嵌套、递归子程序的结构。
5) 掌握子程序设计、编制及调试。
6) 熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
二、实验内容
1) 编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N(N+1)大于200为止,并将结果由屏幕上显示出来。
2)将从3000H内存单元开始的100个字节存储单元全部清0。
3)编制在屏幕上显示九九乘法表的程序。
4)编制在屏幕上显示用*组成的三角形的程序。
5)设有五个字数据存放在以BUF为首地址的内存单元中,要求采用调用多个字数据相加的子程序方法编程,和的低位字放在RESULT单元,和的高位字放在RESULT+2单元,并将结果显示在屏幕上。
6)编写一个递归子程序,计算指数函数X n的值,其中X,n从键盘输入。
三、源程序
EXAM2-1
DA TA SEGMENT
BUF DB’S=1+2×3+3×4+4×5+…+N(N+1)+…=’,’$’
RES DW 4 DUP(0),’$’
DA TA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DA TA
MOV DS,AX
MOV DX, OFFSET BUF
MOV AH,09H
INT 21H
MOV DX, 1
MOV BL, 2
NEXT:MOV AL,BL
INC BL
MUL BL
ADD DX,AX
CMP AX,200
汇编语言程序设计实验报告二(分支循环程序实验)
汇编语言程序设计实验报告二(分支循环程序实验)
一、实验目的
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内容
单片机汇编语言的循环程序设计
MOV R6,#50 ;1us DEL1: DJNZ R6,DEL1 ;2us*50=100us
本段程序延时时间为: 1+100=101us 单循环最长延时时间为: 1+256*2=513us
小结
循环程序的结构 循环程序组织方式
作业: 1.编一段10ms的延时子程序
2.编程序实现统计片内RAM中以data为首地址存 放的一个以‘ $ ’字符为结尾的 字符串的长度并送 NUM单元
谢谢各位!
MOV R0,#data MOV DPTR,#buffer LOOP0:MOV A,@R0 CJNE A,#24H,LOOP1 ;判断是否为‘ $ ’字符 SJMP LOOP2 ;是‘ $ ’字符,转其它程序 LOOP1:MOVX @DPTR,A ;不是‘ $ ’字符,执行传送 INC R0 INC DPTR SJMP LOOP0 ;传送下一数据 LOOP2:… …
数据块传送程序
片内RAM
data a buffer buffer
片外RAM
a b s r …
b
s r …
t $
t
循环程序结构包括四部分: 1、置循环初值 2、循环体(循环工作部分) 3、修改控制变量 4、循环控制部分 其组织方式如图所示。
汇编语言程序设计第七章 循环结构程序
3. REP STOS/STOSB/STOSW
例 CLD REP STOSB
则操作可以解释成: (1)若CX=0,则使控制转到(5),否则继续执行下一步; (2) (ES:DI) AL (3) DI DI+1 (4) CX CX-1,转(1) (5)结束
100H,110H,120H,130H,… 1000H,1100H,1200H,1300H,… 50 DUP(0)
CS:CSEG,DS:DSEG AX,DSEG DS,AX SI,DATA1 DI,DATA2 BX,SUM AX,[SI] AX,[DI] [BX],AX SI,2 DI,2 BX,2 AX,[SI] AX,[DI] [BX],AX SI,2 DI,2 BX,2
STR2 DB
‘12334’
CNT DW
LEA
LEA
MOV AGAIN: INC
5
SI,STR1 -1
DI,STR2 -1
CX,CNT SI,
INC
DI
MOV CMP LOOPZ
AL,[SI] AL,[DI] AGAIN
JZ : : EQUAL: : :
EQUAL ;以下为不等 ;时的处理 ;以下为相等 ;时的处理
AH,4CH 21H
START
DSEG DATA1 DATA2 SUM DSEG CSEG START:
单片机第三章汇编语言程序设计
本章要点
• 本章介绍 汇编语言程序的书写格式、 编写步骤以及程序的基本结构。通过一 些具体范例,了解与掌握编程方法并从 中掌握程序设计的基本技巧。
第三节 汇编语言程序的编写步骤 及基本结构
一、顺序结构:
顺序结构是指程 序按指令顺序逐条 执行的一种结构。 也是程序结构中最 简单的一种结构。
;除100余数作为下一次的被除数 ;余数再除以10
200B C4 200C 45F0 200E FB
SWAP A ORL A,B MOV R3,A
;十位个位合并 ;十位个位合并存R3
200F 22
RET
三、求最大值或最 小值
1.无符号数求最大值 与最小值
例3-7 在以2042H为首 地址的存储单元中,连续 存放一组单字节无符号数, 数据个数存于2041H单元, 从中找出最大数并存于 2040H。
0000H 020100
784F 795F 7F20 E6 04 F7 18 19 DFF9 80FE
LOOP:
LJMP ORG MOV MOV MOV MOV INC MOV DEC DEC DJNZ SJMP END
0100H 0100H R0,#4FH R1,#5FH R7,#20H A,@R0 A @R1,A R0 R1 R7,LOOP $
Baidu Nhomakorabea
实验三 循环程序设计
数据分析并记录
循环程序设计
5、程序设计
1)工作原理 循环程序设计结构是重复执行同一程序段的 结构, 结构,根据设计内容来决定选择其中的一种结构 Do-While结构或While结构)。通过循环控制 结构或While结构)。 (Do-While结构或While结构)。通过循环控制 指令可以使程序达到反复执行的目的。 指令可以使程序达到反复执行的目的。
若找最小数将JG SKIP改为 SKIP。 改为JL 注:若找最小数将JG SKIP改为JL SKIP。
上机操作开发汇编程序
上机操作开发汇编程序 SEGMENT 56,69,84,82,73,88,99,63,100, DW 56,69,84,82,73,88,99,63,100,80 DW 0 DW 0 DW 0 DW 0 DW 0 DW 0 ENDS SEGMENT CS:CODE,DS: ASSUME CS:CODE,DS:DATA START: AX, START: MOV AX,DATA DS, MOV DS,AX CX, MOV CX,10 BX, MOV BX,OFFSET GRADE COMPARE: COMPARE: AX, MOV AX,[BX] AX, CMP AX,60 JL FIVE AX, CMP AX,70 JL SIX AX, CMP AX,80 DATA GRADE S5 S6 S7 S8 S9 S10 DATA CODE
循环程序设计
本例提供了一种延时程序的基本编制方法,若需 要延时更长或更短时间,只要用同样的方法采用更多 重或更少重的循环即可。
值得注意的是,延时程序的目的是白白占用CPU 一段时间,此时不能做任何其它工作,就像机器在不 停地空转一样,这是程序延时的缺点。若在延时过程 中需要CPU做指定的其它工作,就要采用单片机内部 的硬件定时器或片外的定时芯片(如8253等)。
以上是比较精确的计算方法,一般情况下,在外循 环的计算中,经常忽略比较小的时间段,例如将上面的 外循环计算公式简化为
1530 µs×255 = 390 150 µs ≈ 390 ms
了解了延时时间的计算方法,本例我们使用三重循环 结构。程序流程图如图4.15所示。
内循环选择为1 ms,第二层循环达到延时10 ms(循环 次数为10),第三层循环延时到1 s(循环次数为100)。
本例中,第二层循环和外循环都采用了简化计算方法, 编程关键是延时1ms的内循环程序如何编制。首先确定循 环程序段的内容如下:
NOP
;2 µs
NOP
;2 µs
DJNZ R2,DEL0
;4 µs
内循环次数设为count,计算方法如下式:
(一次循环时间)×count = 1 ms
从而得到
count = 1 ms/(2 µs+2 µs+4 µs) = 125 = 7DH
汇编语言程序设计(5)
例: ORG 2000H MOV SP, #60H MOV R0, #2FH MOV R2, # 0FFH
ORG伪指令说明其后面程序的目标代码在存储器中存放的 起始地址是2000H,
存储器地址
2000H
75 81 60
2003H
78 2F
2005H
7A FF
12
第 4 章 汇编语言程序设计简介 二、等值指令EQU 指令格式: 字符名称 EQU 功能: 使指令中的字符名称等价于给定的数字或汇编符号。 使用等值指令可给程序的编制、调试、修改带来方便:
交叉汇编的原理类似于手工汇编,在汇编程序中通常存 入了两张表,即MCS-51单片机的指令代码表和伪指令表。汇 编程序通常通过两次扫描完成汇编,第一次扫描查找源程序中 每条指令的机器代码,第二次扫描完成地址偏移量的计算,汇 编后生成目标文件和列表文件。这是目前应用较广的汇编方法。
9
第 4 章 汇编语言程序设计简介
第 4 章 汇编语言程序设计简介
第4章 汇编语言程序设计简介
4.1 汇编语言概述 4.2 汇编语言程序设计 4.3 汇编程序设计实例
1
第 4 章 汇编语言程序设计简介
4.1 汇编语言概述
4.1.1 程序设计语言的分类及特点 能够完成一定功能的指令序列称为程序,用来设计计算
机程序的语言称为程序设计语言,按照语言的结构及功能程 序设计语言可分为:机器语言、汇编语言和高级语言。
用汇编语言编写的程序
用汇编语言编写的程序
汇编语言是一种低级的编程语言,直接操作计算机硬件。通过使用汇编语言,程序员可以更加精确地控制计算机的功能和执行过程。下面将介绍一个用汇编语言编写的程序的例子,以帮助读者更好地理解汇编语言的特点和用途。
一、程序概述
这个用汇编语言编写的程序的功能是计算从1到100的所有整数的和。通过使用汇编语言的特性,我们可以实现高效的计算过程,以最小的资源消耗完成任务。
二、程序设计
程序的设计思路是使用循环结构,从1开始累加到100,并将结果保存在寄存器中。具体的程序设计如下:
1. 初始化寄存器:将累加结果的寄存器置零,准备开始累加过程;
2. 设定循环起始值:将循环计数器设为1,作为累加的起始值;
3. 累加过程:将当前的累加结果与循环计数器相加,将结果保存在累加结果的寄存器中;
4. 判断循环结束条件:如果循环计数器小于等于100,则继续循环,否则跳转到结束;
5. 循环迭代:将循环计数器加1,准备下一次循环;
6. 结束:输出最终的累加结果。
三、程序实现
下面是具体的汇编代码实现:
```assembly
section .data
sum db 0 ; 累加结果
count db 1 ; 循环计数器
section .text
global _start
_start:
mov al, 0 ; 初始化累加结果寄存器 mov bl, 1 ; 初始化循环计数器
add al, bl ; 累加过程
inc bl ; 循环迭代
cmp bl, 101 ; 判断循环结束条件 jle _start ; 继续循环
; 输出最终累加结果
实验7 循环结构程序设计(2)
河北工业大学城市学院
《汇编语言程序设计》实验报告
实验7 循环结构程序设计(2)
一、实验目的
掌握循环程序设计、编写、调试和运行的方法,掌握条件循环的控制方法。
二、实验内容
1.内存中有一串以“$”结尾的字符串,统计其中“A”出现的次数。
解:程序代码为:
DATAS SEGMENT
TA DB
'ABCHDABYAHAABJA$'
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS START:
MOV AX,DATAS
MOV DS,AX
MOV BX,0
MOV CX,0
L4: CMP [TA+BX],'$'
JZ L1
CMP [TA+BX],'A'
JZ L2
JMP L3
L2: INC CX
L3: INC BX
JMP L4
L1: MOV AH,4CH
INT 21H CODES ENDS
END START
2.从自然数1开始累加,直到累加和大于1000为止,统计被累加的自然数的个数,并把统计的个数送入n单元,将累加和送入sum单元。
解:程序代码为:
DATAS SEGMENT
N DW?
SUM DW?
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS START:
MOV AX,DATAS
MOV DS,AX
MOV AX,0
MOV BX,0 L1: INC BX
ADD AX,BX
CMP AX,1000
JB L1
MOV N,BX
MOV AX,SUM
MOV AH,4CH
INT 21H CODES ENDS
END START
3.设有10个学生的成绩分别为76,69,84,90,73,88,99,63,100,80。试编写程序统计60~69,70~79,80~89,90~99和100分的人数,分别存放到S6,S7,S8,S9,S10单元中。
第6章 循环程序设计
例6-10: 设在以EXST为首地址的存储区中依 次存放着某考区10个考生的5门课成绩,现 要统计每个考生的总成绩,并将其存放在 该考生单科成绩之后的两个单元里。 (注:在内存中,每个考生的成绩是这样存 放:第一个单元存放准考证号,接下来是5 门课的成绩,最后两个单元存放总成绩。) 形如:01,75,83,87,92,78,?,?
数据段 DATA SEGMENT ARR DB 0,0,0,0,0,88,72,0,35,42,99 CNT EQU $-ARR ;CNT为数组长度 RES DW ? DATA ENDS
主要代码段 MOV SI,0 AGAIN:CMP ARR[SI],0 INC SI LOOPZ AGAIN DEC SI MOV RES,SI
小结: (1)LOOP、LOOPZ、LOOPNZ指令默认的循环 变量皆是CX,并具有对CX自动减1的功能; (2)LOOP是单条件循环指令,LOOPZ、 LOOPNZ是双条件循环指令; (3)各指令对应特定的应用场合,使用时根 据需要选择。
6.1.3循环控制指令的应用举例
例(6-1) :已知以BUF为首地址的10个数 (字节型),求其和(设和小于127), 结果存放在RES单元(字节型)。
左边的程序段可改成右边的程序段 MOV DL,0 MOV DL,0 MOV CX,5 MOV CX,5 NEXT: INC DL NEXT: INC DL DEC CX LOOP NEXT JNZ NEXT MOV AL,DL MOV AL,DL
09 分支程序设计 循环程序设计
例:设有两个4位BCD码,分别存放在 设有两个 位 码 分别存放在23H、22H和33H、32H 、 和 、 单元中,求它们的和,并送入43H、42H单元中去。(低位在低 单元中去。 单元中,求它们的和,并送入 、 单元中去 低位在低 字节,高位在高字节) 字节,高位在高字节 MOV A,22H MOV A,22H ADD A,32H ADD A,32H DA A MOV 42H,A MOV 42H,A MOV A,23H MOV A,23H ADD A,33H ADDC A,33H MOV 43H,A DA A MOV 43H,A
4.2
分支程序设计
根据不同条件转向不同的处理程序,这种结构的程序称为分 根据不同条件转向不同的处理程序, 支程序。51指令系统中的条件转移指令、比较转移指令和 指令系统中的条件转移指令 支程序。51ห้องสมุดไป่ตู้令系统中的条件转移指令、比较转移指令和位转移 指令,可以实现分支程序。 指令,可以实现分支程序。
SJMP(Short Jump)短转移; ( )短转移; AJMP(Absolute Jump)绝对转移; ( )绝对转移; LJMP(Long Jump)长转移; ( )长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移; 比较不相等则转移; 比较不相等则转移 DJNZ (Decrement Jump if Not Zero)减1后不为0则转移; 减 后不为0则转移; JZ (Jump if Zero)结果为0则转移; 结果为0 结果为 则转移; JNZ (Jump if Not Zero) 结果不为0则转移; 结果不为0则转移; JC (Jump if the Carry flag is set)有进位则转移; 有进位则转移; 有进位则转移 JNC (Jump if Not Carry)无进位则转移; 无进位则转移; 无进位则转移 JB (Jump if the Bit is set)位为1则转移; 位为1 位为 则转移; JNB (Jump if the Bit is Not set)位为0则转移; 位为0 位为 则转移; JBC(Jump if the Bit is set and Clear the bit)位为1则转移,并清除该 位为1 位为 则转移, 位;
总汇编语言循环分支程序设计
总汇编语言循环分支程序设计
简介
总汇编语言是一种低级语言,用于编写计算机的机器指令。循环和分支结构是编写程序时经常使用的控制结构。
本文将介绍总汇编语言中循环和分支结构的设计和实现,
并给出一些示例代码来帮助读者更好地理解。
循环结构
循环结构允许我们重复执行一段代码,直到满足特定条件
为止。在总汇编语言中,有两种常用的循环结构:计数器控制循环和条件控制循环。
计数器控制循环
计数器控制循环中,我们使用一个计数器来确定循环执行
的次数。下面是一个示例代码片段,展示了如何使用计数器控制循环:
MOV CX, 5 ; 设置循环次数为5
L1:
; 循环体代码
; ...
LOOP L1 ; 循环次数减1,如果不为0,则跳转到标
签L1继续循环
在上面的代码中,我们使用MOV指令将值5赋给CX寄存器,作为循环次数。然后,我们使用LOOP指令在每次循环结束后将CX寄存器的值减1,并检查其是否为0。如果不为0,则跳转到标签L1处,继续执行循环体代码。
条件控制循环
条件控制循环中,我们使用一个条件来确定循环是否继续
执行。总汇编语言提供了多个指令来实现条件判断,例如CMP、JMP、JE等。以下是一个示例代码片段,展示了如何使用条件控制循环:
MOV CX, 10 ; 设置循环次数
L1:
; 循环体代码
; ...
DEC CX ; 循环次数减1
CMP CX, 0 ; 比较循环次数与0
JNE L1 ; 如果循环次数不为0,则跳转到标签L1
继续循环
在上面的代码中,我们使用MOV指令将值10赋给CX寄存器,作为循环次数。然后,在每次循环结束后,我们使用DEC指令将CX寄存器的值减1,并使用CMP指令与0进行比较。如果循环次数不为0,则使用JNE指令跳转到标签L1处,继续执行循环体代码。
汇编实验六循环程序是设计
实 验 报 告
── 学年 第 学期
实 验 课 程 汇编语言 学 生 姓 名 123 实 验 项 目 循环程序是设计 学 院 计算机科学技术
实 验 性 质 专业选修课
班 级 学 号
实 验 地 点
同 组 人 数 1
第 组
实 验 日 期 第 周 星期 第 节
成 绩
4
环 境 参 数
Dosbox-0.74 Masm 5.0
一、实验目的及要求
二、实验原理、实验内容 三、实验仪器设备及材料 四、操作方法与实验步骤 五、实验数据记录及处理 六、实验结果分析及讨论
一、实验目的:
1.灵活运用各类许循环指令,掌握循环程序的设计方法 2. 学会针对不同的问题,选用不同的组织循环的方法。 3.伪指令 EQU 及操作符 '$'的使用。 4. COM 文件的要求和生成过程。
二、实验任务
1.编写程序:将一个包含有20个有符号数据的数组arrayM 分成两个数组,正数数组arrayP 和负数数组arrayN ,并分别把两个数组中的数据个数显示出来
源代码:
;十一个正数 九个负数 DATA SEGMENT
arrayM DB 1,-1,2,-2,3,-3,4,-4,5,-5,6,-6,7,-7,8,-8,9,-9,0,10 arrayP DB 20 DUP(?) arrayN DB 20 DUP(?) countP DB 0
仪器设备损坏、非正常损耗材料(试剂)及处理情况:
无
教师对报告的最终评价及处理意见:
教师签字:
年月日
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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