实验二8086汇编语言之分支、循环程序设计

合集下载

汇编语言-实验二 循环与子程序程序设计2023简版

汇编语言-实验二 循环与子程序程序设计2023简版

汇编语言-实验二循环与子程序程序设计汇编语言-实验二循环与子程序程序设计引言在汇编语言中,循环与子程序是常用的程序设计技术。

循环结构能够使程序重复执行一段代码,而子程序则能够将一段代码封装成一个可重用的模块。

本文将介绍如何使用汇编语言进行循环和子程序的程序设计。

循环结构在汇编语言中,循环结构可以使用`LOOP`指令或者`JMP`指令来实现。

`LOOP`指令会根据`CX`寄存器的值进行循环,每次循环都会将`CX`寄存器的值减一。

程序员可以通过设置`CX`寄存器的初始值来控制循环次数。

下面是一个简单的示例演示如何使用`LOOP`指令实现循环结构:asmMOV CX, 5 ; 设置循环次数为5L1:; 这里是循环体的代码LOOP L1 ; 循环除了`LOOP`指令,我们还可以使用`JMP`指令来实现循环结构。

`JMP`指令会无条件地跳转到指定的标签处,从而实现循环。

在循环体的末尾,程序员需要通过`JMP`指令将控制流程跳转到循环的开始处。

下面是一个使用`JMP`指令实现循环结构的示例:asmMOV CX, 5 ; 设置循环次数为5L1:; 这里是循环体的代码DEC CX ; 循环次数减一JNZ L1 ; 如果循环次数非零,跳转到L1处子程序子程序是一段独立的代码块,可以在程序中被多次调用。

通过使用子程序,可以将重复的代码封装为一个可重用的模块,提高程序的可维护性和可读性。

在汇编语言中,子程序的定义和调用可以使用`PROC`和`CALL`指令来实现。

`PROC`指令定义一个子程序,而`CALL`指令用于调用一个子程序。

在子程序内部,使用`RET`指令返回到调用它的地方。

下面是一个简单的示例演示如何定义和调用一个子程序:asmPROC MySubroutine; 这里是子程序的代码RET ; 返回ENDPCALL MySubroutine ; 调用子程序在子程序内部,可以使用栈来传递参数和保存返回地质。

例如,可以使用`PUSH`指令将参数压入栈中,然后在子程序内部使用`POP`指令来取出参数值。

汇编实验2-循环程序设计-实验报告

汇编实验2-循环程序设计-实验报告

汇编实验2-循环程序设计-实验报告一、实验目的1、了解循环程序设计的方法2、理解汇编语言中循环指令的使用3、掌握汇编语言中常用的循环结构二、实验原理1、循环指令循环指令是计算机中常用的一种控制结构,其作用是重复执行一定的操作。

在汇编语言中,常用的循环指令有LOOP、LOOPE、LOOPNE等,具体功能如下:(1)LOOP:重复执行指定次数的操作;(2)LOOPE:执行操作直到CX寄存器为0或ZF寄存器为1;(3)LOOPNE:执行操作直到CX寄存器为0或ZF寄存器为0。

LOOP指令的语法格式如下:LOOP label其中,label表示循环的目标地址。

2、循环结构循环结构是计算机程序设计中常用的一种结构,其基本形式包括:while、do...while、for等。

在汇编语言中,常用的循环结构有以下两种:(1)无限循环结构:该结构适用于需要不停顿地进行某项操作的情况,底层逻辑基于测试指令;(2)计数器循环结构:该结构适用于需要循环指定次数的情况,底层逻辑基于循环指令。

三、实验内容1、使用循环指令实现计算1~10的和;2、使用循环结构实现计算1~10的和。

四、实验步骤1、使用循环指令实现计算1~10的和。

(1)将计数器初始化为10,即MOV CX,10;(2)将累加器初始化为0,即MOV AX,0;(3)将当前计数器值加到累加器中,即ADD AX,CX;(4)将计数器减1,即DEC CX;(5)判断计数器是否为0,若不为0,则执行第3步;若为0,则跳转到计算结果的部分。

2、使用循环结构实现计算1~10的和。

(1)将计数器初始化为10,即MOV CX,10;(2)将累加器初始化为0,即MOV AX,0;(3)将当前计数器值加到累加器中,即ADD AX,CX;(4)将计数器减1,即DEC CX;(5)判断计数器是否为0,若不为0,则执行第3步;若为0,则跳转到计算结果的部分。

五、实验结果(1)使用循环指令实现计算1~10的和MOV CX,10MOV AX,0LOOP label1ADD AX,CXDEC CXJNZ label1label1:MOV sum,AX(2)使用循环结构实现计算1~10的和MOV CX,10MOV AX,0label2:ADD AX,CXDEC CXJNZ label2MOV sum,AX六、实验总结本次实验实现了两种不同的循环方式,分别使用了循环指令和循环结构。

8086汇编语言循环程序设计.

8086汇编语言循环程序设计.

⑴ 用子程序方法编程: DATA SEGMENT HEXDATA DW 4D7EH RESULT DB 4 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE;DS:DATA START: MOV AX, DATA MOV DS, AX MOV CX, 4 LEA SI, HEXDATA LEA DI, RESULT MOV BX, [SI] NEXT: MOV AX, BX AND AL, 0FH CALL HEXASC MOV [DI], AL INC DI PUSH CX MOV CX, 4 SHR BX, CL POP CX LOOP NEXT
程序的流程图如下所示。
开始 初始化 AX←0, CX←0, BX←0 BX←BX+1 AX←AX+BX, CX←CX+1
Y
AX≤1000?
N
n←CX, sum←AX
结束
程序编写如下: DATAS SEGMENT n DW ? sum DW ? DATAS ENDS STACK SEGMENT PARA STACK ’stack’ DW DUP(?) STACK ENDS CODES SEGMENT MAIN PROC FAR ASSUME CX:CODES, DS:DATAS, SS:STACK START: PUSH DS MOV AX, 0 PUSH AX MOV AX, DATAS MOV DS, AX
4.子程序的嵌套与递归调用 一个子程序调用另一个子程序叫子程序嵌套,如下 图所示:
CALL
CALL
CALL
RET
RET
RET
主程序
子程序1
子程序2
子程序n
由于调用子程序时,断点地址保存在堆栈中,因此只 要有足够的堆栈空间,嵌套的层次(也称深度)是不 受限制的。 若一个子程序调用该子程序自身,则称为递归调 用。递归调用是子程序嵌套的特例。 5. 子程序调用和伪指令使用的例子 [例7] AX寄存器中存放着4位十六进制数,是编 写程序将这4位十六进制数分别转换为相应的ASCII码, 并依次存放到RESULT数组的4个字节中去,要求分别 用子程序和伪指令的方法实现。

汇编语言设计 教案 第五章 循环与分支程序设计

汇编语言设计 教案 第五章  循环与分支程序设计
➢ DO-UNTIL结构则是先执行后判断的结构,它先 执行循环体然后再判断控制条件,若满足控制 条件则继续执行循环体,否则退出循环。这两 种结构一般可以随习惯使用,但在初始循环次 数可能为0的情况下则必须使用DO-UNTIL结构。
5.1.2 循环程序设计方法
无论使用哪种循环结构,循环程序一般应包括 以下几部分: ➢ 循环初始化。它包括设置循环次数的初始值、地址 指针的初始设置等。 ➢ 循环体。这是循环工作的主体,包括要重复执行的 操作,以及循环的修改部分。修改部分包括地址指 针的修改、循环控制条件的修改等。 ➢ 循环控制部分。它是控制循环的关键,判断循环条 件满足与否。
特别要注意循环入口和循环次数的正确设置、 地址指针及循环控制条件的修改等。否则会得不到 期望的结果。
DATA
ENDS
这是一个初始循环次数不定、根据条件控制循环的例子
算法:先使用字符串指令进行块 查找,若找到则显示“Duplication!
MOV DX,0
例5.1 试编 MOV CL,10
分析:采用折半查找法可以提高对有序表的查表效率。
JMP SHORT EXIT
制一个程序, MOV BX,TAB[SI] ;元素前移为插入的数字腾位置 MOV TAB[SI-2],BX
ADD SI,2
;修改地址指针
把BX寄存 JMP SHORT COMPARE
A: MOV AH,9H
LEA DX,PRT
器中的二进 INT 21H
JMP EXIT
B: MOV TAB[SI-2],AX ;插入元素
CN
DW ($-BUFFER)/2 ;元素个数
MAX
DW ?
;存放最大数单元MINDW ?;存放最小数单元

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

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

汇编语言程序设计实验报告二(分支循环程序实验)一、实验目的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。

80X86汇编语言电子教案(5-循环与分支程序设计)

80X86汇编语言电子教案(5-循环与分支程序设计)

一汇编语言程序设计基本步骤二程序的基本结构形式顺序结构的程序执行时按语句的书写顺序依次执行转移分支和循环因此对于有先后关系的语句程序设计时其先后次序是至关重要的顺序结构一般为简单程序顺序片段会在所有程序中存在1X和位无符号数16X Y值的程序分析1如何定义数据段X Y运算结果用双字空间存储2如何实现无符号数乘法1用加法指令实现无符号数乘法23解12CSEG SEGMENT1设位无符号数写一个求表达式16X Y值的程序实现无符号数乘法1设位无符号数写一个求表达式16X Y值的程序思考是有符号数1数据段的定义是否需要改变2对于这三种指令号数乘法的实现有何不同循环是一种重复循环通常由四部分组成1初始化部分234常有两种1Do-Until由循环指令实现2由转移指令实现说明(1) 由循环指令实现循环时ECX ZF标志这时计数值调整和条件测试在循环指令中完成例如使用LOOP LOOPZ/LOOPNZ 由转移指令实现循环时通常以条件转移指令为循环控制部入口以无条件转移指令为循环体结束件控制法循环可以嵌套明确循环控制部分和调整部分防止死循环特殊循环结构在循环体内条件判断出口能有多个出口循环控制部分控制循环何时结束1循环次数已知例LOOP2循环次数已知但可能提前结束例LOOPZ/LOOPNZ3循环次数不定据具体情况而定合理选择循环控制条件是循环程序设计的关键题意屏幕显示如下2把制的形式显示在屏幕上2把制的形式显示在屏幕上分析位十六进制数码因此BX位之后加上一个数一个十六进制数码对应字母的码值算法的基本思想ASCII A~F2把制的形式显示在屏幕上程序主体rotate: 完成什么功能;0-9ASCII 30H-39H作用 ;A-F ASCII 41H-46H作用3 53将正数数组的正确位置数据段部分3 5353535算法的基本思想ARRAY_HEAD-2-1K NN循环次数已知但可能提前结束代码段部分1数组中元素与插入值的比较指令在何处2控制循环结束的指令在哪里3边界条件如何体现功能3将正数数组的正确位置4试编制一程序从键盘输入一行字符要求第一个键入的字符必须是空格如不是则退出是则开始接收键入的字符并顺序存放在首地址为BUFFER的缓冲区中空格符不存入直到接收到第二个空格符时退出程序题意C空格是第一个字符是空格符是空格符代码段部分LEA BXMOV FLAG0NEXT MOV AH01HINT21HFLAG01HFOLLOWALEXITFLAG1 FOLLOWCMP ALEXIT[BX]EXIT 1判定第一个接收字符的指令语句在哪里2循环结束条件是什么循环结构思路采用冒泡排序算法使用双重循环内层循环每次比较相邻的两个数据次序不对则交换外层循环控制内层循环次数以及负责内层循环的初始化5将首地址为字的数组从大到小实现排序多重循环21循环可以嵌套多重循环的设计方法同单重循环但应分别考虑各重循环控制条件数据段部分代码段部分CX 内层循环计数器也CX 该程序如何解决它们冲突的循环结束条件是否可以更改作业P175。

汇编-循环与分支程序设计

汇编-循环与分支程序设计

方法A
MOV DL,0DH MOV AH,06H INT 21H MOV DL,0AH MOV AH,06H INT 21H
方法B
MOV DL,0AH MOV AH,06H INT 21H MOV DL,0DH MOV AH,06H INT 21H
记住以下ASCII值
退格:08H(即8) 空格:20H(即32) 换行:0AH(即10) 回车:0DH(即13) 0 :30H(即48) a :61H(即97) A :41H(即65)
程序流程图
开始
DX=A
DX=A+B BX=DX DX左移3位 BX左移1位
DX=BX+DX-500
结束
编写程序
DATA BUFA BUFB RESULT
SEGMENT DW ? DW ? DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: CODE
➢ 循环控制部分:判断循环条件满足与否,常用方法:计数控制、特 征值控制、地址边界控制等。
➢ 常用指令
[1].LOOP,LOOPZ/LOOPE,LOOPNZ/LOOPNE;
[2].各种跳转指令;
特别要注意循环入口和循环次数的正确设置、地址指针及循环控
制条件的修改等。否则会得不到期望的结果。
➢ 多重循环程序设计循环嵌套
INT 21H
不回显在屏幕上
2.键盘一次输入一个字符串的方法:
串地➢址例存如入(,DS在:D数X)据、调区用定参义数的为字10送符A缓H冲区如下:
MOV MOV MOV MOV MOV
DABADDAXuHSX,f,,,TfASAO0eEXfArGf,Hsc/eSASBo/tBEuu设TCufnGRf置BftTMfueILeNIr/frENE/fGT/设e/NN/r/置BTB/2uu/1存ffBHDffDuD功入eefBBBrrf能字是的er参符存段的33?数串放地偏22 为的输址移D0最入U存地APH大字入址(长符D存S?度串入)并的DX存缓入冲B区uffer的首字节;

8086 汇编语言分支程序设计

8086 汇编语言分支程序设计

汇编语言程序设计实验报告学院:计算机科学与技术专业:计算机科学与技术班级:计科131MOV AH,2INT 21H ;显示高位ASCII 码MOV DL,BLAND DL,0FHCMP DL,9JBE NEXT2ADD DL,7NEXT2: ADD DL,30HMOV AH,2INT 21H ;显示低位ASCII 码MOV AH,4CHINT 21HCODE ENDS ;返回DOSEND START使用相应的文本编辑器建立文件three.asm,内容如上所示。

2.生成可执行文件:1>.汇编:C:\masm> masm three;2>.连接:C:\masm> link three;3.运行及调试:1>. 运行:C:\masm>debug three.exe-U0 ;通过反汇编查找程序的断点-T=0 2 ;加载数据段-D0 ;查看原始数据是否正确-G=0 XX ;运行程序至断点XX 处-R ;查看程序运行结果以上命令执行的细节可参照实验二中的说明。

4.调试:修改AL 的内容,判断此程序是否能正确显示其中的内容的方法。

例:修改AL 内容为9AH:-L ;重新加载可执行文件-A0 ;重新修改MOV AL,3EH 指令361E:0000 MOV AL,9A361E:0002-G=0 xx;带断点运行-R ;查看程序运行结果实验二:编写一个数据区移动程序,要考虑源数据区与目的数据区有重叠的情况。

1.源程序如下所示,编辑下面的源程序到文件lab.asm 中:使用相应的文本编辑器建立文件lab.asm,内容如上所示。

2.生成可执行文件:1>.汇编:C:\masm> masm lab;2>.连接:C:\masm> link lab;N1:INC NUMBERJMP NUMBERJMP AGAINN2:INC CHARJMP AGAINEXIT:LEA DX,STR1MOV AH,09HINT 21HMOV DL,NUMBERADD DL,30HMOV AH,2INT 21HLEA DX,STR2MOV AH,09HINT 21HMOV DL,CHARADD DL,30HMOV AH,2INT 21HLEA DX,STR3MOV AH,09HINT 21HMOV DL,RESTADD DL,30HMOV AH,2INT 21HMOV AH,4CHINT 21HCODE ENDSEND START使用相应的文本编辑器建立文件lab1.asm,内容如上所示。

汇编语言第六章:循环与分支程序设计

汇编语言第六章:循环与分支程序设计
(CX)(CX)≠ ZF =1 ? ≠ 且 ? ≠ 00 且0ZF=0 ? 是 执行循环体 (CX) (CX) -1
退出循环

在前面的求和例子中,可用一条循环指令代替两条指令: DEC CX LOOP AGAIN JNZ AGAIN
例: 求存放在STRS存储区中的字符串长度。 设: STRS DB MOV string$ CX,80
概述
二、程序的基本结构 1、顺序结构程序 2、分支结构程序 3、循环(重复)结构程序
顺序结构
分支结构
循环(重复)结构
第一节 顺序结构程序设计
• 顺序结构程序完全按指令书写的前后顺 序执行每一条指令,是最基本、最常见 的程序结构 • 特点 顺序性、结构简单,只适应于简单问题 的处理
例1 计算
例2 移位
简化段伪指令
.CODE [段名]
功能
创建一个代码段
注释
段名为可选项,如不给出段名,则采用 默认段名。对于多个代码段的模型,则 应为每个代码段指定段名。
.DATA
.DATA? .FARDATA [段名] .FARDATA? [段 名] .CONST .STACK [大小]
创建一个数据段
创建无初值变量的数据 段 建立有初值的远调用数 据段 建立无初值的远调用数 据段 建立只读的常量数据段 创建一个堆栈段并指定 堆栈段大小
图示
12 34 56 78 87 65 43 21h
移位后
34 56 78 87 65 43 21 00h
程序结束的方法
程序执行完毕,正常结束要返回DOS,有两种方法 (1)使用PSP中的“INT 20H”指令,实现用户程 序结束,返回DOS 方法:①将用户程序设置成一个远过程 ②程序开始时,执行如下指令 PUSH DS

汇编语言程序设计实验篇(emu8086)

汇编语言程序设计实验篇(emu8086)

1.汇编语言程序设计实验篇1.1.汇编系统软件简介Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug 的模拟器。

它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。

该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。

利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容。

1.1.1创建程序 TEMPLATE程序本章与指令相关的实验都是用COM TEMPLATE类型的程序完成的。

打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。

在“choose code template”对话框中,选择“COM template-simple and tiny executable file format, pure machine code.”后,单击按钮。

在如所示的编辑界面中,在“;add your code here”部分输入相应的指令,第一条指令默认的偏移地址为100h。

输入全部指令后,单击按钮,保存相应的程序段。

2.EXE TEMPLATE程序本章与DOS功能调用和汇编源程序相关的实验都是用EXE TEMPLATE程序完成的。

打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。

在“choose code template”对话框中,选择“EXE template-advanced executable file.header: relocation, checksum.”后,单击按钮。

在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码段的定义以及必要的功能调用等,在“add your data here”和“;add your code here”部分可以分别输入相应的变量定义和指令。

8086 汇编语言顺序程序设计

8086 汇编语言顺序程序设计

汇编语言程序设计实验报告学院:计算机科学与技术学院专业:计算机科学与技术班级:计科131MOV AX,WORD PTR N1MOV DX,WORD PTR N1+2MOV CX,WORD PTR N2MOV BX,WORD PTR N2+2ADD AX,CXADC DX,BXMOV WORD PTR N3,AXMOV WORD PTR N3+2,DXMOV AH,4CHINT 21HCODE ENDSEND START使用相应的文本编辑器建立文件two.asm,内容如上所示。

二. 生成可执行文件:1.汇编:C:\masm> masm two;2.连接:C:\masm> link two;三.运行及调试:1. 运行:C:\masm>debug two.exe-U0 ;通过反汇编查找程序的断点-T=0 2 ;加载数据段-D0 ;查看原始数据是否正确-G=0 1F ;运行程序至断点1F 处-D0 ;查看程序运行结果2.调试:若要判断此程序对于其它32 位数相加是否正确,则需要使用DEBUG 进行程序调试。

实验二:编程实现:将从2000H 单元开始的连续128 个单元的内容进行清零一. 编程CODE SEGMENTASSUME CS:CODE,DS:CODESTART:MOV BX,2000HMOV CX,128MOV AL,00HL1:MOV [BX],ALINC BXLOOP L1MOV AH,4CHINT 21HCODE ENDSEND START二.使用编辑器建立源程序文件four.asm。

三.生成可执行文件:1.汇编:C:\masm> masm four;2.连接:C:\masm> link four;四.运行及调试:1. 运行:C:\masm>debug four.exe-D2000;-R;-D CS:2000;-G;-D2000;实验三:编程实现:将3000H 单元的一个字节的内容进行拆分,高半字节放进3001H 单元的低半部分,其低半字节放进3002H 单元的低半部分一、编程源程序:DATA SEGMENTN0 DW 3000HN1 DW 3001HN2 DW 3002HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV BX,N0AND BX,0FHMOV AX,N2MOV AX,[BX]MOV BX,N0MOV CL,4SHR AX,CLMOV AX,N1MOV AX,[BX]MOV AH,4CHINT 21HCODE ENDSEND START二.使用编辑器建立源程序文件five.asm。

实验二 分支及循环程序设计_new

实验二 分支及循环程序设计_new

实验二分支及循环程序设计1.实验目的:(1)熟悉汇编语言的编辑、汇编、连接、运行的全过程。

(2)了解汇编语言的程序结构、学习调用过程实现输入输出及用INCLUDE 命令包含文件的方法。

(3)分支及循环程序设计2.实验步骤:(1)用编辑软件记事本或EDIT 编辑一个扩展文件名为ASM的汇编语言源程序。

(2)用汇编程序TASM 汇编上述的汇编语言源程序,形成目标代码文件。

(扩展名为OBJ)(3)用连接程序TLINK连接目标代码文件,形成可执行文件。

(扩展名为EXE)(4)运行可执行文件。

观察执行结果,以验证其正确性。

3.实验内容:1)从键盘上输入一个十进制数(-32767<x<32767),若为正返回为正1,若为负返回为-1,若为0返回为0,并显示符号函数的结果。

参考程序:.model tiny.code.Startupcall readmov ax,bxcall dpcrlfcmp ax,0jge a1mov bx,-1jmp exit1A1: jg a2mov bx,0jmp exit1A2: mov bx,1Exit1: call write.exit 0INCLUDE out_B_D.ASMINCLUDE in_D_B.ASMEnd2).编写多字节非组合BCD码相加的程序。

其参考程序如下:.model small.stack 256.datanum1 db 4,7,8,2,3count equ $-num1num2 db 3,5,6,1,4sum db count dup (0).code.startmov ax,@datamov ds,axmov es,axlea si,num1lea bx,num2lea di,sumadd si,count-1add bx,count-1add di,count-1mov cx,countstdclcl1:lodsbadc al,[bx]aaastosbdec bxloop l1mov ax,4c00hint 21hend start3).将上面2)题改成非组合BCD码相减,则程序如何修改?4).将上面2)题改成组合BCD码相加或相减,则程序如何修改?5). 将上面2)题改成二进制相加或相减,则程序如何修改?。

汇编(循环、分支、子程序)实验报告

汇编(循环、分支、子程序)实验报告
1.设计:
分别为十个成绩、成绩总个数、分段的5个区间申请内存单元,初始化数据段;将AX,BX,CX压栈,保留原始数据。选取第一个成绩,存入AX中,该数据除以10,得到商存入BX,判断商的所属区间,给所属区间加1,继续下一个,循环直到十个全部判断结束,pop出栈,得到属于各区间的成绩个数,程序结束。
2.源程序清单
2.源程序清单
datasegment
xdw 1ah
ydw 0ah
zdw 01h
maxdw ?
dataends ;数据段定义
codesegment
assume ds: data, cs: code
start:
mov ax, data
mov ds, ax ;初始化数据段
mov ax, x
cmp ax, y
《汇编语言程序设计》实验报告
实验名循环、分支、子程序设计实验室实验楼实验日期2014-06-09
一、实验目的及要求
1.熟悉命令格式,功能,加强对指令系统的理解
2.编写简单循环、选择、子程序的结构程序
3.单步跟踪调试,观察寄存器的变化和指令执行的结果
二、实验环境
硬件环境:一台微型计算机
软件环境:windows xp,debug环境,masm
2.源程序清单
datarea segment;定义数据段
buffer db 80 dup(?) ;预申请了以buffer为首地址的内存单元
flag db ?
datarea ends
prognam segment;定义编码段
main proc far
assume cs:prognam,ds:datarea
(5).初始数据段
(6).分别将AX,BX,CX,SI压栈,保留初始数据,

8086-汇编语言分支程序设计

8086-汇编语言分支程序设计

汇编语言程序设计实验报告学院:计算机科学与技术专业:计算机科学与技术班级:计科131MOV AH,2INT 21H ;显示高位ASCII 码MOV DL,BLAND DL,0FHCMP DL,9JBE NEXT2ADD DL,7NEXT2: ADD DL,30HMOV AH,2INT 21H ;显示低位ASCII 码MOV AH,4CHINT 21HCODE ENDS ;返回DOSEND START使用相应的文本编辑器建立文件three.asm,内容如上所示。

2.生成可执行文件:1>.汇编:C:\masm> masm three;2>.连接:C:\masm> link three;3.运行及调试:1>. 运行:C:\masm>debug three.exe-U0 ;通过反汇编查找程序的断点-T=0 2 ;加载数据段-D0 ;查看原始数据是否正确-G=0 XX ;运行程序至断点XX 处-R ;查看程序运行结果以上命令执行的细节可参照实验二中的说明。

4.调试:修改AL 的内容,判断此程序是否能正确显示其中的内容的方法。

例:修改AL 内容为9AH:-L ;重新加载可执行文件-A0 ;重新修改MOV AL,3EH 指令361E:0000 MOV AL,9A361E:0002-G=0 xx;带断点运行-R ;查看程序运行结果实验二:编写一个数据区移动程序,要考虑源数据区与目的数据区有重叠的情况。

1.源程序如下所示,编辑下面的源程序到文件lab.asm 中:使用相应的文本编辑器建立文件lab.asm,内容如上所示。

2.生成可执行文件:1>.汇编:C:\masm> masm lab;2>.连接:C:\masm> link lab;。

8086汇编语言程序设计

8086汇编语言程序设计

.实验1简单汇编语言程序设计一、实验目的与要求1.熟悉汇编语言运行、调试环境及方法。

2.掌握简单汇编语言程序的设计方法。

3.熟悉调试工具DEBUG,并运用DEBUG 工具调试程序。

二、实验内容依照以下要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,考据程序的正确性。

若X、Y、R、W是存放8位带符号数字节单元的地址,Z是16位字单元的地址。

试编写汇编程序,完成Z ((W X) 5Y)(R 2)。

2.试编写一个程序,测试某数是否是奇数。

如该数是奇数,则把DL的第0地址1,否则将该地址0。

三、实验报告要求1.程序算法流程图。

2.源程序清单。

3.程序运行结果。

4.调试过程中遇到的问题和解决的方法。

..实验2分支及循环程序设计一、实验目的与要求1.熟悉汇编语言运行、调试环境及方法。

2.掌握分支程序和循环程序的设计方法。

3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。

二、实验内容依照以下要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,考据程序的正确性。

1.编写汇编程序,统计某储藏区若干个数据中英文字母的个数,并将结果在屏幕上显示。

2.从键盘任意输入一组字符数据,请编写汇编程序将该组数据加密后在屏幕上显示。

参照加密方法是:每个数乘以2。

(说明:本题的加密方法,同学们可以自己拟订)三、实验报告要求1.程序算法流程图。

2.源程序清单。

3.程序运行结果。

4.调试过程中遇到的问题和解决的方法。

..实验3子程序程序设计一、实验目的与要求1.熟悉汇编语言运行、调试环境及方法。

2.掌握子程序的设计方法。

3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。

二、实验内容依照以下要求,编写汇编源程序,并利用DEBUG工具调试程序,考据程序的正确性。

1.编程以十进制形式和十六进制形式显示AX的内容,并把两个显示功能分别封装成子程序dispDEC和dispHEX。

2.设在以EXAMSCORE为首地址的数据缓冲区依次存放某班10名同学5门功课的成绩,现要统计各位同学的总分,并将总分放在该学生单科成绩后的单元,并调用第1个程序封装好的子程序,以十进制方式显示统计情况,显示格式自行设计。

实验二8086汇编语言之分支循环程序设计

实验二8086汇编语言之分支循环程序设计

实验二8086汇编语言之分支、循环程序设计【实验目的】1.掌握循环结构程序设计的方法;2.掌握数据块传送程序设计的方法;3.掌握串传送指令的应用。

【实验内容】1.编写程序实现将数据段STR1单元开始的20个字符移到STR2开始的存储区。

假设STRI+20>STR2,可以用串传送指令,也可以用MOV传送指令。

该题目要求掌握单循环程序设计方法。

为了实现指定功能,应从以下几个方面考虑:(1)数据串操作的起始位置从高地址还是从低地址开始。

(2)确定使用串传送指令,还是用MOV指令。

(3)确定循环程序的结构。

2.如果要求字符串从键盘中输入,应如何设计程序?3.用子程序方法,且不使用MOVSB指令来完成数据块的传输,应如何设计程序?【实验程序】DATA SEGMENTSTR1 DB 'WHAT IS YOUR NAME?',0AH,0DH,'$'CN EQU $-STR1STR2 EQU STR1+ CN-5DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,ES:DATASTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV DX, OFFSET STR1MOV AH,09HINT 21HMOV SI ,OFFSET STR1MOV DI ,OFFSET STR2MOV CX ,CNADD SI ,CN-1ADD DI, CN-1STDREP MOVSBMOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START【实验结果】数据段STR1单元开始的20个字符成功移到STR2开始的存储区【实验心得和体会】通过实验让我掌握了循环结构程序设计的方法、数据块传送程序设计的方法、串传送指令的应用。

更好地了解了语言之分支、循环程序设计让我知道汇编程序的奥秘,我对x86的指令有了新的认识,对一些指令操作更熟练啦。

8086汇编语言程序设计实验指导书.

8086汇编语言程序设计实验指导书.

汇编语言上机实验指导书一、概述上机实验总学时为16学时,其中综合性实验为2学时。

实验共有6项暂定为8次,每次2学时。

1.实验辅导的主要内容实验辅导的内容包括每个实验的实验目的;实验内容;对实验的算法及实验方法的必要说明;实验准备;实验步骤;实验报告要求;实验程序及参考框图。

开始的实验介绍较细,后面的实验简要介绍。

2.实验的软硬件要求关于汇编语言程序设计的硬件要求不高,有IBM-PC/XT即可,但应有彩色显示器以便进行图形实验。

软件方面应有MASM.EXE5.0版(包括LINK.EXE),与MS-DOS版本配套的DEBUG程序和EDIT.EXE编辑软件(其它编辑软件也可以)。

3.加强实践能力的培养实验目的不光是为了验证书本理论,更重要的是对实践能力的培养。

其中包括:实际调试程序的能力,例如修改程序参数的能力,查看结果的能力,设置断点调试运行的能力等;开发汇编语言应用程序的能力,例如应用有关汇编软件的能力,进行系统调用和BIOS功能调用的能力,进行模块程序设计的能力等。

对某一问题用不同的程序实现的能力,例如我们为每个实验提供了参考程序(或程序段),目的是让每个实验者参照样板程序将实验成功地实现,在掌握其方法后,自己改变程序或自己编制程序加以实现。

实验一汇编语言运行环境及方法、简单程序设计(2学时、验证性)1.实验目的:(1) 熟悉汇编语言运行环境和方法(2)了解如何使用汇编语言编制程序(3) 熟悉DEBUG有关命令的使用方法(4) 利用DEBUG掌握有关指令的功能(5) 利用DEBUG运行简单的程序段2.实验内容(1)学会输入、编辑汇编语言程序(2)学会对汇编语言程序进行汇编、连接和运行(3)进入和退出DEBUG程序(4)学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。

对于U命令、N命令、W命令等,也应试一下。

3.实验准备(1)仔细阅读有关汇编语言环境的内容,事先准备好使用的例子。

实验二 分支及循环程序设计

实验二 分支及循环程序设计

实验二分支结构与循环结构程序设计
一、实验目的:
1.掌握分支结构和循环结构程序调试方法。

2.进一步巩固8086/8088的指令。

3.进一步掌握源程序中语法错误的检查方法。

4.进一步巩固DEBUG的使用方法。

二、实验内容:
1. 分支结构:将AX与CX中较大的一个无符号数放到BX中。

2. 循环结构:判断数据段中BUF开始的若干个字节数据是小于8、等于8还是大于8?
分别转向DAYU、DENGYU和XIAOYU三个分支分别进行处理,把小于、等于和大于的个数分别存入数据段JIEGUO开始的三个字节中。

三、实验步骤
1. 分别编写程序,并在DEBUG环境下用连续运行、单步运行等方式调试程序。

2. 观察实验结果是否正确,做好记录。

四、实验报告
1. 第二个实验要求画出程序流程图
2. 写出程序清单,加注释;记录执行结果。

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

实验二8086汇编语言之分支、循环程序设计
【实验目的】
1.掌握循环结构程序设计的方法;
2.掌握数据块传送程序设计的方法;
3.掌握串传送指令的应用。

【实验内容】
1.编写程序实现将数据段STR1单元开始的20个字符移到STR2开始的存储区。

假设STRI+20>STR2,可以用串传送指令,也可以用MOV传送指令。

该题目要求掌握单循环程序设计方法。

为了实现指定功能,应从以下几个方面考虑:
(1)数据串操作的起始位置从高地址还是从低地址开始。

(2)确定使用串传送指令,还是用MOV指令。

(3)确定循环程序的结构。

2.如果要求字符串从键盘中输入,应如何设计程序?
3.用子程序方法,且不使用MOVSB指令来完成数据块的传输,应如何设计程序?【实验程序】
DATA SEGMENT
STR1 DB 'WHAT IS YOUR NAME?',0AH,0DH,'$'
CN EQU $-STR1
STR2 EQU STR1+ CN-5
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE,ES:DATA
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV DX, OFFSET STR1
MOV AH,09H
INT 21H
MOV SI ,OFFSET STR1
MOV DI ,OFFSET STR2
MOV CX ,CN
ADD SI ,CN-1
ADD DI, CN-1
STD
REP MOVSB
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
【实验结果】
数据段STR1单元开始的20个字符成功移到STR2开始的存储区
【实验心得和体会】
通过实验让我掌握了循环结构程序设计的方法、数据块传送程序设计的方法、串传送指令的应用。

更好地了解了语言之分支、循环程序设计让我知道汇编程序的奥秘,我对x86的指令有了新的认识,对一些指令操作更熟练啦。

相关文档
最新文档