汇编语言循环结构程序设计

合集下载

第四章 汇编语言程序设计

第四章  汇编语言程序设计

例2:将一个十六进制数输出 算法分析: ①将十六进制数转换 成对应的字符。如果是数 字,加48H,如果是A~F, 加55。 ②利用功能调用输出。 ; 数据段
DATA
SEGMENT X DB 05H DATA ENDS
第四章
汇编语言程序格式
编写程序,将从键盘上输入一个小写英文字母, 例 3 : 编写程序 , 将从键盘上输入一个小写英文字母 , 输出 其对应的大写字母。 其对应的大写字母。
②算法分析: 使用XLAT指令查表 ③调试方法: 使用DEBUG的G命令
第四章
汇编语言程序格式
实验三: 实验三:顺序结构程序设计
1、实验目的: ① 熟练掌握汇编语言源程序的结构 ② 掌握顺序结构程序设计方法 2、实验内容: ① 使用算术运算类指令编写程序 ② 使用调整指令编写程序 ③ 使用逻辑运算指令编写程序
2
第四章
汇编语言程序格式
三、顺序结构程序设计示例
例1:编写程序完成将两个字节数据相加,并且将结果存入 编写程序完成将两个字节数据相加, 另一个单元中。 另一个单元中。 1、分析: 程序共分三个部分: ② 代码段 ① 数据段 2、设计: ① 设计数据段 DATA SEGMENT X DB 4CH Y DB 52H Z DB ? DATA ENDS
第四章
汇编语言程序格式
实验四: 实验四:分支结构程序设计
1、实验目的: 掌握分支结构程序设计方法 2、实验内容: ① 使用无符号转移指令编写程序 ② 使用有符号转移指令编写程序 ③ 使用特殊标志条件指令编写程序
12
第四章
汇编语段中有三个无符号数,分别存放在DAT,DAT+1, DAT+2字节单元中,编写一完整的源程序,找出三个数中数 值大小居中的一个,并将其存入BUF字节单元中。 DAT DB XX,XX,XX BUF DB ?

汇编语言程序设计方法

汇编语言程序设计方法

C 名字前加 下划线
从右到左 调用程序

SYSCALL
从右到左 被调用程序

STDCALL 名字前加
下划线 (注)
被调用程序

PASCAL 名字变大写
BASIC 名字大写
FORTRAN 名字大写
从左到右 被调用程序

从左到右 被调用程序

从左到右 被调用程序

12
PROTO是过程声明伪指令,用于事先声明过程的结构。它的格 式如下:
结束处理部分
AGAIN: ADD AX,CX
;从20,19,……2,1倒序累加到AX
LOOP AGAIN ;每循环一遍,CX自动减1
MOV SUM,AX ;将累加和送入SUM单元
.EXIT 0
END
初始化部分
循环结束? 是 否
工作部分 修改部分 结束处理部分
7
二、用MASM 6.x循环控制伪指令实现循环结构
.CODE
.STARTUP
MOV AL, B
IMUL AL
MOV BX,AX MOV AL,A
;BX中为B的平方
IMUL C
MOV CX,4
IMUL CX
;AX中为4AC
.IF SWORD PTR BX>=AX ;比较B的平方和4AC的大小
MOV SIGN,1
;条件成立,SIGN得到1
.ELSE
MOV SIGN,0
.IF 条件表达式 ;条件为真(非0),执行分支体
分支体
[.ELSEIF 条件表达式
分支体
;前面IF条件为假,并且当前ELSEIF条件为真执行分支体
[.ELSE
;前面IF条件为假执行分支体

汇编语言程序设计的基本方法

汇编语言程序设计的基本方法

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)

汇编-循环与分支程序设计精简版范文

汇编-循环与分支程序设计精简版范文

汇编-循环与分支程序设计汇编-循环与分支程序设计循环程序设计在汇编语言中,循环可以通过使用跳转指令来实现。

常见的循环结构有while循环、do-while循环和for循环。

while循环while循环是最基本的循环结构,它的语法形式如下:while(condition)statement其中,condition是一个条件表达式,通常使用比较指令(如CMP)来判断。

如果条件满足,则执行循环体中的语句,然后判断条件,如果仍然满足,则执行循环体,直到条件不满足为止。

do-while循环do-while循环与while循环的区别在于,执行循环体中的语句,然后再判断条件是否满足。

它的语法形式如下:dostatementwhile(condition)for循环for循环是一种特殊的循环结构,它的语法形式如下:for(initialization; condition; update)statement其中,initialization用于初始化循环控制变量,condition 用于判断循环是否继续,update用于更新循环控制变量的值。

for 循环的执行顺序是:先执行initialization,然后判断condition 是否满足,如果满足则执行循环体中的语句,然后执行update,判断condition,以此类推,直到condition不满足为止。

分支程序设计分支是程序中常用的一种控制结构,它可以根据条件的不同执行不同的代码块。

if语句if语句是一种最基本的分支结构,它的语法形式如下:if(condition)statement1elsestatement2其中,condition是一个条件表达式,如果满足则执行statement1,否则执行statement2。

switch语句switch语句是一种多分支结构,它的语法形式如下:switch(expression){case value1:statement1;break;case value2:statement2;break;default:statementN;}switch语句对expression进行求值,然后根据求值结果的值与各个case后面的value进行比较,如果匹配成功,则执行对应的statement,否则执行default后的statement。

5B 汇编语言程序设计

5B 汇编语言程序设计
13
5.6.3 分支程序设计
二、条件转移: JXX 目标;
条件满足,转到目标处执行程序; 条件不满足,顺序执行程序。
(1)段内相对转移,相对偏移量8位(-128~+127)
(2)对标志位无影响
根据PSW中的条件码测试: ZF、SF、OF、CF、PF
14
5.6.3 分支程序设计
名称 格式 等效助记符 测试条件
27
5.6.4 循环程序设计
为0/相等时循环 1. (CX)-1→(CX)
LOOPE 标号 LOOPZ
非0/不等时循环
2. (CX)≠0且ZF=1 ,转至标号处继续 循环 若(CX)=0 或ZF=0, 顺序执行 1. (CX)-1→(CX)
LOOPNE 标号 LOOPNZ
按CX循环
2. (CX)≠0且ZF=0 ,转至标号处继续 循环 若(CX)=0 或ZF=1, 顺序执行
(IP)+由OPR决定的8位 位移量→(IP) (IP)+由OPR决定的16 位位移量→(IP) 由OPR寻址方式决定 的有效地址→(IP) OPR在段内的偏移量 →(IP) OPR所在的段 地址→(CS) (EA)→(IP)(EA+2) →(CS) EA由OPR决定
12
5.6.3 分支程序设计
1、对直接寻址:JMP后直接给出目标地址, OPR是标号/标号+常数 如:JMP START+4 2、对间接寻址:目标地址在一个通用寄存器 /存储器字单元(段内转移)/存储器双字单元(段 间转移)中 如: JMP CX JMP [BX] JMP DWORD PTR [BX]
一、无条件转移:
JMP 目标;转到目标处执行程序, 对标志位无影响
标号/ 标号+常数 / 寄存器 直接寻址 间接寻址

汇编语言程序设计第七章 循环结构程序

汇编语言程序设计第七章  循环结构程序

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

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

实验五循环结构程序设计
一、实验目的
熟悉程序框架;理解单重循环与多重循环程序的结构及执行过程;掌握循环控制指令的用法,会使用数据串操作指令编程;熟练掌握循环结构程序的设计方法和利用设置断点调试程序的方法。

二、示例
阅读下面程序框架,并加以注释
DATA_SEG SEGMENT AT 0E000H
ARRAY_B LABEL BYTE
ARRAY_W DW50 DUP (?)
DATA_SEG ENDS
;以上为定义数据段
STACK_SEG SEGMENT PARA STACK ‘STACK’
DW100H DUP (?)
TOS LABEL WORD
STACK_SEG ENDS
;以上为定义堆栈段
CODE_SEG SEGMENT
MAIN PROC FAR
ASSUME CS: CODE_SEG, DS: DATA_SEG, SS: STACK_SEG
ORG1000H
START: MOV AX, STACK_SEG
MOV SS, AX
;给SS赋值
MOV SP, OFFSET TOS
;给SP赋值
PUSH DS
临时保存DS的值
SUB AX, AX
PUSH AX
MOV AX, DATA_SEG
MOV DS, AX
;给DS赋值

;程序段
RET
MAIN ENDP
CODE_SEG ENDS
;以上定义代码段
END START
三、实验题
1 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。

2试编制一个程序把AX中的16进制数转换为ASCII码,并将对应的ASCII码依次存放到MEM数组中的四个字节中。

例如,当(AX)=2A49H时,程序执行完后,MEM中的4个字节内容为39H,34H,41H,32H。

四、实验报告
写出程序清单、加注释;记录执行结果。

1 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。

程序代码:
DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV AH,07H
INT 21H
SUB AL,1 ;将AL数-1,得到该字母的前导字符
MOV DL,AL
MOV AH,02H ;将输入的字符放入AH
INT 21H
ADD AL,1 ;将AL数+1,得到原字符
MOV DL,AL
MOV AH,02H
INT 21H
ADD AL,1 ;将AL数再+1,得到该字母的后续字符MOV DL,AL
MOV AH,02H
INT 21H
;此处输入代码段代码
MOV AH,4CH
INT 21H
CODES ENDS
END START
运行结果:
从键盘上输入小写字母r,返回qrs三个字符,验证正确
从键盘上输入小写字母b,得到abc三个字符
2试编制一个程序把AX中的16进制数转换为ASCII码,并将对应的ASCII码依次存放到MEM数组中的四个字节中。

例如,当(AX)=2A49H时,程序执行完后,MEM中的4个字节内容为39H,34H,41H,32H。

程序代码:
DATAS SEGMENT
MEM DB 4 DUP(?)
DATAS ENDS
;以上定义数据段
CODES SEGMENT;代码段
ASSUME CS:CODES,DS:DATAS
MAIN PROC FAR
MOV AX,DATAS ;初始化
MOV DS,AX ;将ax值赋数据段
MOV AX,2A49H ;给AX赋值
MOV CX,4
MOV DI,3
L1:
PUSH CX ;将cx的值压入栈底保存
MOV CL,4 ;设置循环次数=4
ROL AX,CL ;不含cf循环左移4次
MOV BX,AX
AND BX,0FH ; 取低四位
ADD BX,30H ;将其转换为相对的ASCII码
CMP BX,3AH ;比较判断是否为0~9
JB L2 ;跳转
ADD BX,7
L2:
MOV MEM[DI],BL ;转换的ASCII码送入MEM中DEC DI ;di减1
POP CX ;从堆栈弹出cx
LOOP L1 ;循环
MOV AH,4CH
INT 21H
MAIN ENDP
CODES ENDS
;以上定义代码段
END MAIN
运行结果:
用d命令查看MEM中的4个字节内容为39H, 34H, 41H, 32H。

验证正确。

相关文档
最新文档