北京理工大学汇编第四次(分支和循环程序设计实验)报告

合集下载

北京理工大学总汇编实验报告材料实验四

北京理工大学总汇编实验报告材料实验四

本科实验报告实验名称:分支和循环实验一、实验目的1)掌握比较指令;2)理解条件转移和无条件转移指令的区别;3)掌握单分支、双分支、多分支的程序设计方法;4)掌握循环程序设计方法。

二、实验内容内容一程序代码:DATAS SEGMENTBUF DB 12H,98H,45H,64H,78H,36H,55H,44H,0ABH,0CFH COUNT EQU $-BUFNUM1 DB 0NUM2 DB 0BUF1 DB 00,00BUF2 DB 00,00DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV CX,COUNTMOV SI,0MOV DI,0L:MOV AL,BUF[SI]CMP AL,0JG L1INC NUM2CBWADC WORD PTR BUF2[DI],AXJMP L2L1:INC NUM1CBWADC WORD PTR BUF1[DI],AX L2:INC SILOOP LMOV AH,4CHINT 21HCODES ENDSEND START程序运行结果:内容二实验代码:DATAS SEGMENTBUF DB 12H,98H,45H,64H,78H,36H,55H,44H,0ABH,0CFH COUNT EQU $-BUFMAX DB 0MIN DB 0DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV CX,COUNTMOV SI,0MOV AL,BUF[SI]MOV MAX,ALL:INC SIMOV AL,BUF[SI]CMP AL,MAXJL L1MOV MAX,ALL1:DEC CXJNZ LMOV CX,COUNTMOV SI,0MOV AL,BUF[SI]MOV MIN,ALM:INC SIMOV AL,BUF[SI]CMP AL,MINJA M1MOV MIN,ALM1:DEC CXJNZ MMOV AH,4CHINT 21HCODES ENDSEND START程序运行结果:所以可得有符号数的最大值为78H,无符号数的最小值12H。

北京理工大学汇编实验报告3

北京理工大学汇编实验报告3

北京理工大学汇编实验报告3本科实验报告实验名称:实验三字符串操作实验课程名称:课程设计Ⅰ(CPU与汇编)(实验)实验时间:第5-10周周五下午任课教师:聂青实验地点:10-102实验教师:苏京霞实验类型:☑原理验证□综合设计□自主创新学生姓名:罗逸雨学号/班级:1120141208 05211401 组号:3 学院:信息与电子学院同组搭档:专业:通信工程成绩:CX 中值减 1,当 CX 中值减至 0 时,停止重复执行,继续执行下一条指令。

当REP无条件重复前缀,重复串操作直到计数寄存器的内容 CX 为0为止。

经常与REP 配合工作的字符串处理指令有MOVS、STOS和LODS。

当REPE/REPZ判断计数寄存器的内容 CX 是否为0或ZF=0(即比较的两个操作数不等),只要满足一个则重复执行结束,否则继续执行。

可以与 REPE/REPZ 配合工作的串指令有CMPS和SCAS。

当REPNE/REPNZ判断计数寄存器的内容是否为0或ZF=1(即比较的两个操作数相等),只要满足一个则重复执行结束,否则继续执行。

可以与 REPE/REPZ 配合工作的串指令有CMPS和SCAS。

3)字符串操作指令lodsb、lodsw:把DS:SI指向的存储单元中的数据装入AL或AX,然后根据 DF 标志增减 SI;stosb、stosw:把AL或AX中的数据装入ES:DI指向的存储单元,然后根据 DF 标志增减 DI;movsb、movsw:把 DS:SI 指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据 DF标志分别增减SI和DI;scasb、scasw:把AL或AX 中的数据与ES:DI 指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI;cmpsb、cmpsw:把DS:SI 指向的存储单元中的数据与 ES:DI 指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI;rep:重复其后的串操作指令。

北京理工大学信号与系统实验报告

北京理工大学信号与系统实验报告

实验1 信号的时域描述与运算一、实验目的1、掌握信号的MATLAB表示及其可视化方法。

2、掌握信号基本时域运算的MATLAB实现方法。

3、利用MATLAB分析常用信号,加深对信号时域的理解。

二、实验原理1、连续时间的MATLAB表示连续时间信号指的是在连续时间范围内有定义的信号,即除若干个不连续点外,在任何信号都有意义。

在MATLAB中,连续时间信号可以用两种方法来表示,即向量表示法和符号对象表示法。

向量表示法:严格意义上来说,MATLAB并不能处理连续时间信号,都必须是用信号等时间间隔采样后的采样值来近似表示的,采样时间间隔足够小的时候,这些采样值就可以近似地表示出连续时间信号。

例如:>>t=0:0.01:10;>>x=sin(t);此时利用plot(t,x)命令即可绘制上述信号的时域波形。

符号对象表示法:连续时间信号先用表达式表示出来,然后采用符号表达式来表示信号。

例如:>>sym t;>>x=xin(t);此时利用ezplot(x)命令即可绘制上述信号的时域波形。

常用的信号产生函数:2、连续时间信号的时域运算对连续时间信号的运算包括量信号想家、相乘、微分、积分以及位移反转、尺度变换(尺度伸缩)等1)相加和相乘信号的相加和相乘指两个信号对应时刻的值相加和相乘,对于两个采用向量表示的可以直接使用算术运算的运算符“+”和“•”来计算,此时要求表示两信号的向量时间范围和采样间隔相同,采用符号对象表示的两个信号,可以直接根据符号对象的运算规则运算。

2)微分和积分对于向量表示发表示的连续时间信号,可以用过数值计算的方法计算信号的微分和积分。

这里由时间向量[t1,t2,…,t N]和采样值向量[x1,x2,…,x N]表示的连续信号的微分是利用差分来近似求取的。

MATLAB里用diff来计算差分x(k+1)-x(k)。

连续信号的定积分可以由MATLAB的quad函数实现,调用格式为quad(‘functions_name’,a,b)其中,functions_name为被积函数名,a、b为积分区间。

北京理工大学数信实验报告

北京理工大学数信实验报告

实验1 利用DFT 分析信号频谱一、实验目的1、加深对DFT 原理的理解。

2、应用DFT 分析信号的频谱。

3、深刻理解利用DFT 分析信号频谱的原理,分析实现过程中出现的现象及解决方法。

二、实验设备与环境计算机、MATLAB 软件环境。

三、实验基础理论1.DFT 与DTFT 的关系:有限长序列的离散时间傅里叶变换(e )j X ω 在频率区间(02)ωπ≤≤ 的N 个等间隔分布的点2(0k N 1)kk N πω=≤≤-上的N 个取样值可以有下式表示:2120(e )|(n)e(k)(0k N 1)N jkn j Nkk NX x X πωπω--====≤≤-∑由上式可知,序列(n)x 的N 点DFT (k)X ,实际上就是(n)x 序列的DTFT 在N 个等间隔频率点2(0k N 1)kk N πω=≤≤-上样本(k)X 。

2.利用DFT 求DTFT方法1:由(k)X 恢复出(e )j X ω的方法如下:由流程知:11(e )(n)e[(k)W]e N j j nkn j nNn n k X x X Nωωω∞∞----=-∞=-∞===∑∑∑继续整理可得到:12()(k)()Ni k kx e X N ωπφω==-∑其中(x)φ为内插函数:sin()2()sin()2N N ωφωω=方法2:实际在MATLAB 计算中,上述插值运算不见得是最好的办法。

由于DFT 是DTFT 的取样值,其相邻两个频率样本点的间距为2N π,所以如果我们增加数据的长度N ,使得到的DFT 谱线就更加精细,其包络就越接近DTFT 的结果,这样就可以利用DFT 计算DTFT 。

如果没有更多的数据,可以通过补零来增加数据长度。

3.利用DFT 分析连续信号的频谱采用计算机分析连续时间信号的频谱,第一步就是把连续信号离散化,这里需要进行两个操作:一是采样,二是截断。

对于连续时间非周期信号(t)a x ,按采样间隔T 进行采样,阶段长度M ,那么:1(j )(t)e(nT)e M j tj nTa a a n X x dt T x -∞-Ω-Ω-∞=Ω==∑⎰对(j )a X Ω 进行N 点频域采样,得到:2120(j )|(nT)e(k)M jkn Na a M kn NTX T x TX ππ--Ω==Ω==∑采用上述方法计算信号(t)a x 的频谱需要注意如下三个问题:(1)频谱混叠;(2)栅栏效应和频谱分辨率; (3)频谱泄露。

Python语言程序设计 第4章 分支及循环

Python语言程序设计 第4章 分支及循环

简单条件构造
简单条件基本形式
<expr> <relop> <expr>
<relop>是关系操作符<, <=, ==, >=, >, != 使用“=”表示赋值语句,使用“==”表示等于 除数字外,字符或字符串也可以按照字典顺序用于条件
比较 <condition>是布尔表达式,为bool类型,布尔值的
PM2.5 0-35 35-75
空气质量等级 优 良
伪代码如下: if PM2.5值 > 75 打印空气污染警告 if PM2.5值 < 35 打印空气质量优,建议户外 运动
75-115 轻度污染 115-150 中度污染 150-250 重度污染 250-500 严重污染
PM2.5指数分级例子-流程图
输入半径R
π*R*R S
2*π*R L
输出 S、L的值
结束
顺序
流程图-表示算法
例:求给定数R的绝对值。
算法: R R≥0
|R|= -R R<0
这是分支程序结构
Y R S
开始
输入R N
R≥0 -R S
输出 S的值 结束
流程图-表示算法
例: 给定K值,求1到 K连加和。 Sum=1+2+3+…+K。 1I 0 Sum Sum+I Sum(I=1,2,3,…K)
多分支决策
要解决双根问题,就需要对delta等于0的情况进 行处理。语句的结构上要引入嵌套结构。
当delta < 0,处理无实根情况; 当delta = 0,处理实根情况; 当delta > 0,处理“双根情况;

北京理工大学微机原理实验报告

北京理工大学微机原理实验报告

微机原理与接口技术实验报告实验内容:汇编语言程序设计实验组别:12姓名:班级:学号:一、实验目的1、熟悉IDE86集成开发环境的使用。

2、通过编程、上机调试,进一步理解汇编语言的设计思路与执行过程。

3、熟悉DOS命令调用,以达到输入输出、返回DOS系统等目的。

4、掌握利用汇编实现求和与求最值的方法。

5、掌握利用汇编实现数制转换的方法。

6、巩固理论知识,锻炼动手编程,独立思考的能力。

二、实验内容(具体内容)1、求从TABLE开始的10个无符号字节数的和,并将结果放在SUM字单元中。

并查看前5个,前8个数之和以及各寄存器和内存的状态。

2、在1的基础上修改程序,求出10个数中的最大值和最小值,最后将最大最小值分别赋给MAX及MIN。

3、求1到 100 的累加和,并用十进制形式将结果显示在屏幕上。

要求实现数据显示,并返回DOS状态。

三、实验方法1、设计思路(1)实验1的设计思路:先将10个要相加的数存在以TABLE为首的10个连续的存储单元中,然后利用循环结构依次取出数值放在AL中并累加,若有进位则加到AH中直至循环10次累加结束,将累加的结果放在SUM中并返回DOS状态。

(2)实验2的设计思路:先将10个要比较的数放在以TABLE为首的10个连续的存储单元中。

将第一个数首先赋给AL和AH(分别存储相对最小和最大值)在利用LOOP循环结构,依次和下面的数进行比较,每次把相对的最大值与最小值存储到AH和AL中直至循环9次比较结束,将AH和AL里面的最大值与最小值赋给MAX和MIN,返回DOS状态(3)实验3的设计思路:先在内存中定义COUNT=100,表示1-100求和,若相求1-n的和并显示只需COUNT的值为n即可,同时定义一块以DNUM为首地址的数据区用于存储累加和的十进制数对应的ASCII码。

先利用AX和LOOP求出1-COUNT的累加和存在AX中;在进行数值转化,AX 依次除10取余数保存,将16进制数转化为10进制ASCII码值并存在DUNM中。

北理工汇编语言实验讲义-2016

北理工汇编语言实验讲义-2016

CPU与汇编语言实验讲义张芨高平信息系统及安全对抗实验中心2016第一部分汇编语言设计中使用的系统软件简介 (3)第一章 MASM for Windows 集成实验环境 (4)第二章调试程序DEBUG的使用 (9)第二部分宏汇编语言程序设计 (17)实验一 MASM for Windows 环境下的汇编语言编程环境使用 (17)实验二算术运算实验 (19)实验三字符串操作实验 (22)实验四分支和循环实验 (25)实验五子程序与模块化程序设计实验 (28)实验六磁盘文件读写实验 (32)第一部分汇编语言设计中使用的系统软件简介汇编语言实验操作流程图如图1所示。

图1汇编语言实验操作过程在实验室上机时,计算机有教师机统一开启,学生不要随意关机。

1)严禁带电操作;2)带上理论课教材、实验指导书及准备的实验程序;3)调试实验程序,记录实验结果;4)实验结束后,关闭所有应用程序。

第一章 MASM for Windows 集成实验环境1.熟悉MASM for Windows 集成实验环境运行实验室计算机的MASM for Windows 软件,如图2所示。

图 2 MASM for Windows运行环境2.编写运行第一个汇编程序1)输入汇编程序打开MASM for Windows 集成实验环境,在“程序输入区”编写一个显示“Hello World!”的程序。

如图3所示。

图3输入汇编程序红色方框内是需要输入的汇编程序代码,而其它的汇编程序代码该软件自动生成汇编程序框架。

说明:输入的内容分别是:红色框1内的代码:STRING DB 'Hello World',13,10,'$'红色框2内的代码:LEA DX,STRINGMOV AH,9INT 21H2)保存汇编程序点击“工具栏”中的“保存”按钮(或“文件/另存为”或“文件/保存”),弹出“另存为”对话框,键入文件名,如“我的第一个汇编程序”,然后点击“保存”即可。

北京理工大学汇编语言实验报告一

北京理工大学汇编语言实验报告一

汇编语言实验报告实验一 DOS环境下的汇编语言编程环境使用(基础与验证型)班级:05211002姓名:张宁学号:1120102310实验日期:2012.9.7晚6:00~9:00汇编语言实验报告实验一 DOS 环境下的汇编语言编程环境使用(基础与验证型)一、实验要求和目的1、掌握汇编语言程序设计的基本流程和学会上机开发简单程序;2、熟练掌握宏汇编程序MASM 的使用;3、熟练掌握连接程序LINK 的使用;4、熟练掌握DEBUG 的使用;二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。

三、实验涉及的主要知识汇编语言程序设计上机开发过程如图1.1 所示。

四、实验内容与步骤1、汇编、链接并调试给出的简单程序,找出程序中的错误。

(一)录入并建立汇编语言源程序文件(ASM 文件)(二)用汇编程序MASM 将ASM 文件汇编成目标程序文件(OBJ 文件)(三)用连接程序LINK 生成可执行程序文件(EXE 文件)(四)程序的调试2、完成程序设计:分类统计字数组data 中正数、负数和零的个数,并分别存入内存字变量Positive、Negative 和Zero 中,数组元素个数保存在其第一个字中。

使用Debug 查看Positive、Negative 和Zero 三个变量的数据。

五、实验过程及结果:实验一:1.输入给出的程序2.运行输入的程序,发现了三处错误:根据错误提示,发现错误为ADDITION后未打冒号,CMP错打为COM。

修改原代码:改为:3.代码编译成功,生成OBJ文件,再生成EXE文件,可成功运行。

4.在原程序代码后添加两行代码,以验证ADDITION的逻辑正确性,改动如下:现实在DA TA1中添加字节型sum ,再将ADDITION的运行结果,从AX送到sum中去。

5.调试发现ADDITION并没用正确运行。

检查语句逻辑性发现,应将JAE改成JB,才能实现累加并终结。

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

北京理工大学汇编第四次(分支和循环程序设计实验)报告汇编第四次(分支和循环程序设计实验)报告一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言分支程序基本指令的使用方法;3.掌握利用汇编语言实现单分支、双分支、多分支的程序设计方法;4.了解汇编语言循环程序设计的基本流程;5.熟悉汇编语言循环基本指令的使用方法;6.掌握利用汇编语言的循环指令完成循环程序设计方法。

二、软硬件环境1、硬件环境:计算机系统 windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。

三、实验涉及的主要知识在实际应用中,经常根据一些条件来选择一条分支执行。

汇编语言的条件判断主要是通过状态寄存器中的状态位、无符号数相减或有符号相减产生的结果来进行。

1.无条件转移指令JMP无条件转移指令JMP是使程序无条件转移至目标处,又分为段内转移、段间转移。

2.条件转移指令JXX条件转移指令可分为三大类:1).简单条件转移指令。

根据单个标志位的状态判断转移条件。

下表表示条件转移指令标志位的状态:2).无符号数条件转移指令。

假设在条件转移指令前使用比较指令,比较两个无符号数A,B,指令进行的的操作是A-B,其转移指令如下:3)带符号数条件转移指令。

在汇编程序设计中,要熟练使用循环指令和跳转指令等来实现循环,理解循环体结构中的初始化部分、循环体、结束部分,并且要结合前面分支结构相关的知识点,加深对循环结构的理解和掌握。

循环结构的组成及其设计方法的知识要点有:1、循环程序的基本结构通常由3部分组成1) 初始化部分建立循环初始值,为循环做准备,如设置地址指针,(BX/SI/DI/BP),初始化循环控制变量或计数器(CX),数据寄存器(AX/DX)初值等.2) 循环体循环体是循环程序的主体,是程序中重复执行的程序段.它是由循环工作部分、修改部分、和循环控制部分。

①循环工作部分:完成程序功能的主要程序段,用于解决程序的实际任务;②修改部分:对循环参数进行修改,并为下一次循环做准备;③循环控制部分:判断循环结束条件是否满足。

通常判断循环结束方法:用计数控制循环;循环是否进行了预定的次数。

用条件控制循环。

循环终止条件是否满足。

3)结束处理处理部分主要是对循环的结果进行处理,比如现实提示信息等,很多时候没有此部分程序。

2、循环控制指令:指令格式执行操作循环结束条件LOOP标号CX=CX-1;若CX=0,则循环CX=0 LOOPNZ/LOOPNE 标号CX=CX-1;若CX=0且ZF=0,则循环CX=0或ZF=0LOOPZ/LOOPE标号CX=CX-1;若CX=0且ZF=1,则循环CX=0或ZF=1JCXZ 标号仅测试(CX)=0?若等于0,则转移到目标地址,否则顺序执行3、循环控制可以分为:计数循环和条件循环。

作为计数循环,一般是指循环次数是已知的情况,在程序设计的的循环时,先应将循环次数送入计数器CX中进行计数,在循环体中使用LOOP等循环指令。

当然,也可以通过其他方式来进行,如cx←cx-1,jnz 等结合实现。

四、实验内容与步骤1、判断方程AX2+BX+C=0 是否有实根。

若有实根,则将字节变量tag置1,否则置0。

假设A、B、C均为字节变量,数据范围为-128~127。

流程图如下:(1)代码data segmentA db 5B db 10C db 5tag db 0data endscode segmentassume cs:code,ds:data start:mov ax,datamov ds,axmov al,Bmul almov cx,axmov al,Amul Cmov bx,axmov ax,4mul bxsbb ax,cxcmp ax,0jl yepjmp nopeyep:mov al,1mov tag,alnope:mov ah,4chint 21hcode endsend start(2)主要操作初始值a=5,b=10,c=5 显然有实根使用-u、-g 命令查看结果,可知确实有tag=al=1更改a=1,b=1,c=1,再次查看知al未赋值“1”,故tag仍为初始值“0”-q退出2、编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z字符,显示“C”;若为a-z 字符,显示“c”;若是回车字符(其ASCII码为0DH),则结束程序,若为其它字符则显示显示“R”。

流程图如下:(1)代码DATA SEGMENTCHAR DB ?DATA ENDSSTACK SEGMENTSTACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK,DS:DATA START: MOV AX,DATAMOV DS,AXMOV AH,1HINT 21HCMP AL,0DHJE END1CMP AL,39HJBE L1JMP L2L1: CMP AL,31HJAE S1JMP END0L2: CMP AL,41HJB END0CMP AL,59H JBE END2 JMP L3L3: CMP AL,61H JB END0CMP AL,79H JBE END3 JMP END0 S1: MOV DL,AL MOV AH,02 INT 21H JMP END1 END0:MOV DL,52H MOV AH,02 INT 21H JMP END1 END2:MOV DL,43H MOV AH,02H INT 21H JMP END1END3:MOV DL,63HMOV AH,02HINT 21HJMP END1END1:MOV AH,4CHINT 21HCODE ENDSEND START(2)主要操作分别输入9 d G ’以及回车,使用-t、-g指令查看结果如下,满足要求3、分类统计字数组data中正数、负数和零的个数,并分别存入内存字变量Positive、Negative和Zero中,数组元素个数保存在其第一个字中。

使用Debug查看Positive、Negative和Zero三个变量的数据。

流程图如下:(1)代码data segmentbuf db 9,5,4,2,0,0,0,-1,-2,-3 positive dw 0 negative dw 0zero dw 0data endscode segmentassume cs:code,ds:data start:mov ax,datamov ds,axmov si,0mov cx,10s:cmp cx,0je donedec cxcmp byte ptr [si],0je s1jg s2jl s3s1: inc zeroinc sijmp ss2: inc positive inc sijmp ss3: inc negative inc sijmp sdone:mov ax,positive mov bx,zero mov dx,negative mov ah,4ch int 21hcode endsend start(2)主要操作易知,按输入数据buf db 9,5,4,2,0,0,0,-1,-2,-3 结果应为四个正数,3个零,三个负数即ax=4、bx=3、dx=3,使用-u、-g指令查看寄存器结果如下图:结果正确!-q退出即可。

4、编写程序,在字符串变量STRING中存有一个以$为结尾的ASCII码字符串,要求计算字符串的长度,并把它存入LENGTH单元中。

(要求用条件控制循环方法,并且字符串分数据类型是字节和字两种情况)DB型(1)代码:DATA SEGMENTSTRING DB 'SABERSABEREXCALIBUR$'LEN DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX MOV AX,0MOV DI,0S: CMP BYTE PTR [DI],'$'JZ END1INC DIINC AXJMP SEND1:MOV WORD PTR [LEN],AXMOV AX,4CHINT 21HCODE ENDSEND START(2)操作:查看寄存器AX=13(即十进制19),与输入吻合,检测成功DW型(1)代码DATA SEGMENTBUF DB 'S','A','B','E','R','$' L DB 0 DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AXMOV SI,0L1: MOV AL,BUF[SI]CMP AL,'$'JE DONEINC LINC SIJMP L1DONE:MOV AL,L。

相关文档
最新文档