汇编程序设计 分支结构的程序设计 实验报告

合集下载

实验二 分支结构程序设计实验

实验二 分支结构程序设计实验

实验二 分支结构程序设计实验1、实验目的和要求:掌握汇编语言分支程序的设计方法;2、实验内容:编程序求分段函数Y 的值。

已知变量X 为16位带符号数, 分段函数的值要求 保存到字单元Y 中。

函数定义如下:1 (当X>0)Y = 0 (当x=0)—1 (当X<0)3、实验仪器与器材:计算机及EMU8086汇编软件等。

4、实验原理:分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。

分支结构适合于带有逻辑或关系比较等条件判断的计算,设计这类程序时往往都要先绘制其程序流程图,然后根据程序流程写出源程序,这样做把程序设计分析与语言分开,使得问题简单化,易于理解。

程序流程图是根据解题分析所绘制的程序执行流程图。

5、实验过程与测试数据(含电路图/程序流程框图):6、实验分析:自己分析7、实验体会:自己总结实验参考程序:DATA SEGMENTX DW -128Y DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AXMOV AX,XCMP AX,0JG ISPNJZ ISZNMOV Y,-1JMP FINISHISPN: MOV Y,1JMP FINISHISZN: MOV Y,0FINISH: MOV AH,4CHINT 21HCODE ENDSEND START思考题:把程序修改成如下的分段函数的值—1 (当X>=0)Y=1 (当X<0)。

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

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

汇编语言程序设计实验报告汇编语言程序设计实验报告引言:汇编语言是计算机中最基本的语言,通常用于处理硬件相关问题。

在这个实验中,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。

以下是我们的实验报告。

正文:1. 实验环境我们使用的实验环境是Intel 8086微处理器与高级汇编语言。

微处理器使用的是PCB-512主板,而高级汇编语言是MASM。

2. 实验目的我们的实验目的主要是学习汇编语言的基础知识和编程技巧,包括了汇编语言的寄存器、指令、内存管理等方面的知识。

我们的另一个目的是掌握汇编语言的常用编程技巧,能够独立完成一些简单的汇编程序。

3. 实验内容我们的实验内容主要包括以下几点:(1)学习汇编语言的基础知识,包括寄存器、指令、内存管理等方面的知识。

(2)掌握汇编语言的常用编程技巧,包括数据输入输出、运算、跳转等基本操作。

(3)实践用汇编语言编写程序,如计算器、菜单等实用程序。

(4)了解8086微处理器的结构和原理。

4. 实验过程在这个实验过程中,我们完成了以下几个程序:(1)计算器计算器是一个简单的程序,主要用于实现两个数之间的加、减、乘、除等基本运算。

我们通过输入输出指令、存储指令等指令实现了这个程序的功能。

(2)菜单菜单是一个实用程序,主要用于展示一个简单的菜单并实现用户选择相关功能的功能。

我们使用了汇编语言中的跳转指令、输入输出指令等实现了这个程序。

5. 实验结果在我们的实验中,我们成功完成了上述两个程序。

我们通过输入输出指令、存储指令等指令实现了这个程序的功能。

6. 实验总结在这个实验过程中,我们学习汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。

我们通过编写计算器和菜单等简单实用程序,加深了对汇编语言的理解和认识。

我们认为这个实验对我们今后的学习和工作都有很大的帮助。

结论:通过这个实验,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。

实验三---分支结构程序设计实验报告-

实验三---分支结构程序设计实验报告-

XXX大学软件类实验报告
课程名称:C语言程序设计学号:
姓名:
班级:
指导教师:
开课学期:
学院:
XXX大学教务处
4.switch语句。

四、实验过程及内容:(运行结果请抓图到对应题目的下方)
1. 先分析以下程序,写出运行结果,再上机检验。

实验结果:
2.先分析以下程序,写出运行结果,再上机检验。

实验结果:
3.先分析以下程序,写出运行结果,再上机检验。

实验结果:
4. 程序改错题。

以下程序的功能是将a、b、c三个数从小到大进行排序,即使得a≤b≤c.。

程序中有一些错误,试将其改正并上机验证。

实验结果:
5. 程序填空题。

以下程序的功能是:从键盘接收一个字符,如果是小写英文字母,则将其转换为相应的大写字母;如果是大写英文字母,则将其转换为相应的小写字母;如果是其他字符,则不做转换。

填空将程序补充完整并上机验证。

实验结果:
6. 编程题。

根据以下分段函数计算y的值,x的值由键盘输入。

保留两位小数
输入格式:-2
输出格式:y=-2.00
实验代码:
实验结果:
7.输入一个正整数作为年份,编程判断该年是否为闰年。

若是输出“Yes”,否则输出“No”。


示:能被4整除,但不能被100整除的年份;或者能被400整除的年份。

实验代码:
实验结果:。

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

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

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

分支结构应用实验报告

分支结构应用实验报告

一、实验目的1. 理解分支结构在程序设计中的重要作用。

2. 掌握C语言中的分支结构语句,如if-else、switch-case等。

3. 通过实际编程,熟练运用分支结构解决实际问题。

二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 编程语言:C语言三、实验内容1. 实验一:判断两个整数的大小(1)功能描述:输入两个整数,输出较大的数。

(2)程序代码:```c#include <stdio.h>int main() {int a, b;printf("请输入两个整数:\n");scanf("%d %d", &a, &b);if (a > b) {printf("较大的数是:%d\n", a);} else {printf("较大的数是:%d\n", b);}return 0;}```2. 实验二:计算分段函数的值(1)功能描述:输入一个实数x,计算分段函数y的值。

(2)程序代码:```c#include <stdio.h>int main() {double x, y;printf("请输入一个实数x:\n");scanf("%lf", &x);if (x < 2) {y = x x;} else {y = 2 x - 1;}printf("分段函数y的值是:%lf\n", y);return 0;}```3. 实验三:判断字符类型(1)功能描述:输入一个字符,判断其是字母、数字还是其他字符。

(2)程序代码:```c#include <stdio.h>#include <ctype.h>int main() {char c;printf("请输入一个字符:\n");scanf("%c", &c);if (isalpha(c)) {printf("该字符是字母。

汇编实验报告--分支程序设计实验

汇编实验报告--分支程序设计实验

实验四分支程序设计实验学生姓名:何茂杰学号:2010305104 专业班级:计算机本科一班指导老师:文远熔实验日期:实验成绩:一、实验目的1.掌握分支程序的设计方法;2.掌握利用DEBUG修改参数、检查结果的方法;3.熟悉汇编语言源程序的编辑、汇编、连接及调试过程。

二、实验内容p181,例5.10把x的绝对值赋给y,x为一个四字节有符号数。

三、实验环境PC微机DOS操作系统或Windows 操作系统四、实验要求1.画出两个程序的流程图,若要独立编写程序,应列出相应的程序清单。

2.说明本实验是如何利用DEBUG进行调试的。

五、主要实验步骤跳跃表法可以使程序根据不同的条件转移到多个程序分支中去。

步骤;第一步:定义所要使用的数据段,并分别定义是字还是字节。

第二步:对所要使用寄存器进行压栈处理。

第三步:书写子程序,即寄存器中哪一位为1(从低位到高位)把程序转移到8个不同的程序分支中去。

第四步:测试结果。

1.对.EXE文件进行调试运行。

(1)用DEBUG调试运行,学会修改AL内容的方法;(2)对DSPKEY.EXE键入不同的字符,分别进行调试;(3)在MS-DOS下运行这两个.EXE文件。

六.实验结果及测试子程序:cmp al, 0 ;AL为逻辑尺je continuelea bx, branch_tableL:shr al, 1 ;逻辑右移jnc add1jmp word ptr[bx];段内间接转移add1: add bx, type branch_table ;add bx,2jmp L七.心得体会该实验让我了解用变址寻址方式实现跳跃表法源代码:Brand_addresses segmengtBranch_table dw routine_1dw routine_2dw routine_3dw routine_4dw routine_5dw routine_6dw routine_7dw routine_8branch_addresses endsprocedure_select segmentmain proc farassume cs: procedure_select ,ds:branch_addresses start:push dssub bx,bxpush bxmov bx,branch_addressesmov ds,bxcmp al,0je continue_main_linemov si,0l:shr al,1jnb not_yetjmp branch_table[si]not_yet:addsi,type branch_tablejmp lcontinue_main_line:routine_1:routine_2:retmain endpprocedure_select endsend start。

实验2 顺序与分支汇编语言程序设计实验

实验2 顺序与分支汇编语言程序设计实验

ARM技术原理与应用实验报告实验2 顺序与分支汇编语言程序设计实验专业电子信息工程班级14电信班学生姓名陈定光学号2014010243101指导教师曹计昌2017年4月19 日实验2 顺序与分支汇编语言程序设计实验1、实验目的(1)掌握顺序结构汇编语言程序设计;(2)掌握分支结构汇编语言程序设计;(3)掌握AXD环境下顺序结构和分支结构汇编语言程序的运行、调试。

2、实验要求1、实验必须在在ADS1.2环境下进行。

2、工程名、汇编语言源文件名按照下面规则命名:工程名:pj+学号最后4位+其它字符汇编语言源文件名:p+学号最后4位+其它字符+.s例如:张维智同学学号最后4位是3134因此,pj3134、pj3134a、pj31341等都是允许的工程名;而 p3134a.s、p3134b.s等都是允许的源文件名。

3、实验报告中需要说明实验中在ADS、AXD环境下进行的实际操作;4、实验报告中应给出实际的实验操作、编写的源程序、及计算机的调试观察结果;5、按照规定格式打印实验报告。

3、实验内容1、编写程序p2xxxx1.s完成下面任务:(1)将1、2、3、4、5、6、7、8依次传送给寄存器R1-R8;分析:如上图显示,寄存器r1-r8分别是存放1-8(2)用STMIA指令将R1-R8保存到刚好能够存储8个字数据ARY_A数组中。

分析:如上图显示,地址0x8058-0x8078分别存放1-8(3)用STMIB指令将R1-R8保存到刚好能够存储8个字数据ARY_B数组中。

分析:如上图显示,地址0x8088-0x80A7分别存放1-8(4)用STMDA指令将R1-R8保存到刚好能够存储8个字数据ARY_C数组中。

分析:如上图显示,地址0x8094-0x80B3分别存放1-8(5)用STMDB指令将R1-R8保存到刚好能够存储8个字数据ARY_D数组中。

(6)用LDMIA指令将ARY_A数组中数据5、6、7、8传送到R1-R4寄存器。

分支程序设计实验实验报告

分支程序设计实验实验报告

分支程序设计实验实验报告————————————————————————————————作者:————————————————————————————————日期:ﻩ实验二分支程序设计实验实验报告实验名称:分支程序设计实验指导教师罗志祥专业班级光信1006 姓名张博学号U201013339 联系方式一、任务要求:熟练掌握K eil C环境下汇编语言程序的调试方法,加深对汇编语言指令、机器码、寻址方式等基本内容的理解,掌握分支程序和简单程序的设计与调试方法,了解并行IO 口的使用。

1. 设有8bits 符号数X 存于外部R AM 单元,按以下方式计算后的结果Y 也存于外部RAM 单元,请按要求编写程序。

240/2204020X X Y X X XX ⎧≥⎪=<<⎨⎪≤⎩当当当2. 利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P 0、P 1、P2端口输出(以压缩B CD 码的形式)。

P3.0为低电平时开始计时,为高电平时停止计时。

提高部分(选做):a . 实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P 2口输出。

利用P3.7状态选择加、减计数方式。

b. 利用P3口低四位状态控制开始和停止计数,控制方式自定。

二、设计思路:1.分支函数程序设计:首先将X 赋给累加器A ,与40比较大小,将大于或等于40的执行乘方操作;小于40的再与20做比较,大于20的执行取除法操作,小于或等于20的执行取反操作。

最后将计算结果Y 存于片外的RAM 上。

2.电子时钟程序设计思路:首先用循环程序的嵌套实现一个1s 的延时,同时让记秒的端口P2同步加一,到60后清零;再让此循环执行60次实现1min 的延时,同时让P1同步加一,到60后清零;再让分钟的循环执行24次,实现1hour 的延时,同时让P 0同步加一。

至此循环,即可实现24小时的时钟功能。

(注:本计算机的晶振频率为12MHz)3.4位十进制加、减1计数程序思路:低位的个位和十位赋给一个寄存器,而将高位即百位千位赋给另外一个寄存器,通过循环程序使低位数循环100次即向高位进位或借位,高位循环100次后即回归初始状态,同时设计两个子函数分别执行加一、减一操作。

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

所以,在编写分支结构时,一般先处理简单的分支,再处理较复杂的分支。对多分支的 情况,也可遵循“由易到难”的原则。因为简单的分支只需要较少的指令就能处理完,一旦 处理完这种情况后,在后面的编程过程中就可集中考虑如何处理复杂的分支;
4.在屏幕上从当前光标位置开始显示一个字符串:
MOV DX,OFFSET STRING
and string[1],0fh ;把月份数值个位的 ASCII 码转换为对应数字
add al,string[1] ;十位加上个位 (如 12 月)
jisuan:
;以下计算偏移地址
cmp al,1 ;比 1 小是非法月份
jb shuruerr ;若月份值小于 1 则转出错处理
cmp al,12
ja shuruerr ;比 12 大也是非法月份
JMP 指令是从程序当前执行的地方无条件转移到另一个地方执行。这种转移可以是一个 短(short)转移(偏移量在[-128, 127]范围内),近(near)转移(偏移量在[-32K, 32K]范围内) 或远(far)转移(在不同的代码段之间转移)。
短和近转移是段内转移,JMP 指令只把目标指令位置的偏移量赋值指令指针寄存器 IP, 从而实现转移功能。但远转移是段间转移,JMP 指令不仅会改变指令指针寄存器 IP 的值, 而且还会改变代码段寄存器 CS 的值。
sub al,1 ;月份值减 1
shl al,1
shl al,1 ;月份再乘 4 对应了 MON 字符串中从首地址开始的字符相对位置
xor ah,ah ;1 月份从 0 位置开始即 JAN,...5 月份从位置 16 开始即 MAY
lea si,mon ;找到被显示月份字符的位置
add si,ax
mov cx,3
mov al,string ;若只输入 1 位数字月份值,则读出该值
and al,0fh
;把 ASCII 码转换为对应数字
jmp jisuan
da10:
mov al,string
and al,0fh
;把月份数值十位的 ASCII 码转换为对应数字(如 12 月的 1 字)
mov bl,10
mul bl
output: mov dl,[si] ;输出对应月份英文缩写
mov ah,2
int 21h
inc si
loop output
.exit 0
shuruerr: lea dx,msg2 ;输入出错时提示出错,并转到程序起始处重新执行
mov ah,09h
int 21h
jmp shuru
end
4
图 5-1 键入代码
1
《汇编语言程序设计》
实验报告
2
实验五 分支结构程序设计
实验目的
1、掌握利用无条件转移指令JMP和有条件转移指令实现多分支程序的设计方法。 2、掌握用DOS的中断调用,实现在程序执行过程中从键盘动态输入字符串的方法。 3、掌握程序中标号的定义和使用。
实验内容
实现从键盘输入一个月份数值(1-12),根据输入的月份数值显示相应的月份英文单词 缩写,如输入5则显示May。
实验步骤
1、编辑下列程序:
.model small
.stack
.data
mon db 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'
msg1 db 'Please input a month(1-12) :',13,10,'$'
msg2 db 'Input error! Now try again...',13,10,'$'
5
图 5-2 编译通过 2、程序汇编通过后,运行程序察看输出结果。
图 5-3 程序运行结果 3、程序运行中不输入月份值(直接回车),或输入非法月份值,观察程序执行的情况。
实验体会
图 5-4 直接回车或输入非法月份值观察输出
1.无条件转移指令JMP(Unconditional Jump): JMP指令的一般形式: JMP 标号/Reg/Mem
mov ah,09h
int 21h
;显示提示信息
lea dx,buffer
mov ah,0ah
int 21h
;输入月份数值
cmp actlen,0 ;若没有输入月份则转出错处理
je shuruerr
;以下判断输入月份是否合法
3
lea di,string
cmp actlen,2
je da10
;若输入的是 2 位数月份值则转到 da10 标号处执行
该转移指令的执行不影响任何标志位。 2.无符号数的条件转移指令(Jumps Based on Unsigned (Logic) Data)
6
图 5-5 无符号数的条件转移指令
3. 在编写分支程序时,要尽可能避免编写“头重脚轻”的结构,即:当前分支条件成立时,
将执行一系列指令,而条件不成立时,所执行的指令很少。这样就使后一个分支离分支点较 远,有时甚至会遗忘编写后一分支程序。这种分支方式不仅不利于程序的阅读,而且也不便 将来的维护。
buffer label byte ; db 3
;最多 2 个数字,包括一个回车
actlen db ?
;保存实际输入的字符个数
string db 3 dup(?) ;保存输入的月份数字内容(ASCII 码)
.code
.startup
shuru:
;开始输入月份编号
lea dx,msg1
;取字符串的首地址
MOV AH,09H
;系统调用功能号送 AH
INT 21H
此调用的入口参数为内存缓冲区中字符串的首地址,该字符必须以‘$’结尾,出口参 数无,调用执行结果是在屏幕上显示一个字符串
5.分支结构的两种结构:
图 5-6 分支结构的两种结构
相关文档
最新文档