汇编第3次上机实验报告

合集下载

汇编语言上机实验内容

汇编语言上机实验内容

实验一上机操作一、实验目的掌握汇编语言程序编辑、汇编、连接、运行以及利用DEBUG调试程序的方法。

二、实验设备PC机及相应的软件。

三、实验内容及步骤1、编辑一个指定的汇编语言源程序,并对其进行汇编、连接和运行。

2、利用DEBUG进行程序调试,掌握常用命令的使用方法,观察运行结果。

3、汇编语言上机操作,见图1-1 汇编语言上机操作流程。

上机操作过程:开始输入cmd 确认后显示:C:\Documents and setting\Administrator>-输入 cd c:\masm 后显示:c:\masm>-c:\masm>EDIT ABC.asmc:\masm>MASM ABC;若有语法错,回EDIT下改该程序c:\masm>LINK ABC;若有错,回EDIT下改程序c:\masm>ABC若运行结果错,回EDIT下改程序或在DEBUG下调试,找原因。

c:\masm>DEBUG ABC.exe手写源程序图 1-1 汇编语言上机操作流程汇编语言程序举例例1:将BL寄存器的内容按二进制形式显示出来。

设:(BL)=01010011B分析:采用2号功能调用,分别输出30 31 30 31 30 30 31 31显示:01010011参考程序:CODE SEGMENTASSUME CS: CODESTART:MOV CX ,8 ;显示字符个数为8MOV BL ,53HNEXT:SHL BL ,1 ;将显示位移至CF中JC ONE ;CF=1?MOV DL ,30H ;CF=0,将0的ASCII放在DL中JMP EXITONE:MOV DL ,31H ;CF=1,将1的ASCII放在DL中EXIT:MOV AH ,2INT 21H ;调用DOS功能显示DEC CX ;循环次数减1JNZ NEXT ;判断是否结束MOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START上机操作:c:\masm>EDIT ShowBL.asm ;编辑源程序c:\masm>MASM ShowBL ;汇编成ShowBL.objMicrosoft (R) Macro Assembler Version 5.10Copyright (C) Microsoft Corp 1981,1988. All rights reserved.48912 + 447243 Bytes symbol space free0 Warning Errors0 Severe Errorsc:\masm>LINK ShowBL ;连接成ShowBL.exeMicrosoft (R) Overlay Linker Version 3.61Copyright (C) Microsoft Corp 1983-1987. All rights reserved.LINK : warning L4021: no stack segmentc:\masm>ShowBL ;装载并执行ShowBL.exe 01010011 ;屏幕显示c:\masm>-在DEBUG下查看ShowBL.exe的装入情况:c:\masm>DEBUG ShowBL.exe- R ;查看当前寄存器内容AX=0000 BX=0000 CX=001B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=0B51 ES=0B51 SS=0B61 CS=0B61 IP=0000 NV UP EI PL NZ NA PO NC B353 MOV BL,53- U CS:0 ;查看程序0B61:0000 B353 MOV BL,530B61:0002 B90800 MOV CX,00080B61:0005 D0E3 SHL BL,10B61:0007 7205 JB 000E…….0B61:0017 B44C MOV AH,4C0B61:0019 CD21 INT 21…….-G ;执行程序01010011Program terminated normally-例2:将某段中的字符串“Hello!”传送到另一段中。

汇编语言程序设计上机实验报告(实验三)-循环程序设计

汇编语言程序设计上机实验报告(实验三)-循环程序设计
0~9 ------ -37h
2、学习应用了循环指令并了解了其特点:
A、循环指令不影响标志位
B、其功能为使寄存器CX的值减1,如果结果不等于0,则循环
至标号,否则顺序执行。
程序1:
data segment
input1 db ' please input your numbers:',0dh,0ah,'$'
input2 db 'the binary number is :',0dh,0ah,'$'
input3 db ' your data is wrong,please input again:',0dh,0ah,'$'
enter db 0dh,0ah,'$'
data ends
code segment
汇编语言程序设计上机实验报告(实验三)
一、实验题目、内容及要求:
题目:循环程序设计
内容:编写一程序,要求从键盘接收一个4位十六进制数,在终端上显示与它等值的二进制数。
要求:实验前要作好充分准备,包括程序清单、调试步骤、调试方法,对程序结果的分析等。本实验要求在EDIT下编写完整的汇编语言程并生成可执行文件运行。
or bl,al
jmp Again
remind:mov ah,09h
lea dx, input3
int 21h
jmp back
stmov:mov ah,09h
lea dx,enter
int 21h
lea dx, input2
int 21h
mov cx,10h
clc
loopst:mov al,30h

汇编上机实验报告心得体会

汇编上机实验报告心得体会

汇编语言程序设计第一次上机作业1.从键盘上接受一个字符,找出他的前导字符和后继字符,按顺序显示这三个字符。

寄存器分配: AL :存输入值x DL :输出显示 流程图:如右图所示 DA TA SEGMENTA DB 0DA TA ENDSSTACK SEGMENT STACKDB 200 DUP(0) STACK ENDSCODE SEGMENT ASSUME DS:DA TA,SS:STACK,CS:CODE S: MOV AX,DA TAMOV DS,AX MOV AH,1INT 21H INC AL MOV DL,AL MOV AH,2 INT 21HDEC ALMOV DL,AL MOV AH,2 INT 21H DEC AL MOV DL,AL MOV AH,2 INT 21H CODE ENDS END S2.从键盘上输入一个数字字符,如不是,显示‘not odd ’,否则显示‘odd ’。

寄存器分配: AL :存输入值x DL :输出显示流程图:如右图所示 程序代码如下:DA TA SEGMENT A DB 0BUF DB,'NOT ODD$' EA DB,'ODD$' DA TA ENDSSTACK SEGMENT STACK DB 200 DUP(0) STACK ENDSCODE SEGMENTASSUME DS:DA TA,SS:STACK,CS:CODE S: MOV AX,DA TA MOV DS,AX MOV AH,1 INT 21H CMP AL,'0' JNGE B CMP AL,'9' JGE B LEA DX,EA MOV AH,9 INT 21H JMP CB: LEA DX,BUF MOV AH,9 INT 21HC: MOV AH,4CH INT 21H CODE ENDS END S第二次上机作业1.将以H为首地址的字节存储区中的技能被3整除又能被13整除的无符号整数的个数(假定<=9)显示出来;同时对应的显示它们分别对应的地址偏移量。

汇编上机实验报告

汇编上机实验报告

汇编上机实验报告实验目的:通过进行汇编语言上机实验,掌握汇编语言的基本语法和编程技巧,培养汇编程序设计能力。

实验内容:实验一:汇编程序的简单输入输出1.编写一个汇编程序,要求从键盘输入两个整数,然后将其相加,并将结果输出到屏幕上。

2. 利用调试器(如DOSBox或emu8086)执行并调试程序,观察程序运行过程和实际输出结果。

实验二:汇编程序的条件跳转1.编写一个汇编程序,要求从键盘输入一个整数,判断其是否大于10,若是,则将其打印到屏幕上;否则,将其乘以5并打印到屏幕上。

2. 利用调试器(如DOSBox或emu8086)执行并调试程序,观察程序运行过程和实际输出结果。

实验三:汇编程序的循环1.编写一个汇编程序,要求计算1到10的累加和,并将结果打印到屏幕上。

2. 利用调试器(如DOSBox或emu8086)执行并调试程序,观察程序运行过程和实际输出结果。

实验四:汇编程序的数组操作1.编写一个汇编程序,要求定义一个长度为10的数组,并将数组中的值初始化为0,然后利用循环将数组中的每一个元素加1,并将每个元素的值打印到屏幕上。

2. 利用调试器(如DOSBox或emu8086)执行并调试程序,观察程序运行过程和实际输出结果。

实验结果:实验一:汇编程序的简单输入输出编写的汇编程序通过键盘输入两个整数,实现了相加并将结果输出到屏幕上的功能。

程序运行正常,输出结果与预期一致。

实验二:汇编程序的条件跳转编写的汇编程序通过键盘输入一个整数,根据条件判断,实现了将输入数大于10时打印在屏幕上,否则将其乘以5并打印在屏幕上的功能。

程序运行正常,输出结果与预期一致。

实验三:汇编程序的循环编写的汇编程序通过循环计算1到10的累加和,并将结果打印在屏幕上。

程序运行正常,输出结果与预期一致。

实验四:汇编程序的数组操作编写的汇编程序通过定义一个长度为10的数组,并将数组中的值初始化为0,利用循环将数组中的每一个元素加1,并将每个元素的值打印到屏幕上。

第三次汇编上机作业

第三次汇编上机作业

微机原理上机实验报告(三)
班级:学号:姓名:
实验目的
(1)掌握比较指令、转移指令在分支程序设计中的使用方法。

(2)掌握分支结构程序的组成。

(3)掌握分支程序的设计、调试方法。

(4)熟悉DOS软中断及系统功能调用。

实验内容
从键盘上输入0-10之间的三个数字,比较其大小,完成三个数从大到小排序。

数的输入写了一个过程,把输入的三个数分别存入缓冲区。

输出显示也写了一个过程,先显示提示,然后按照从大到小的顺序输入显示缓冲区的三个数字。

提示:1.请用字母按键上方的键盘输入数字(不要使用键盘右侧的小键盘键入),以防程序运行错误。

2.输入的三个数字,分别放入AL、BL和CL中。

实验要求
请画出该分支程序排序过程的流程图,并且完善空白部分的源程序并补充分号后面的注释内容。

实验数据及结果
1.该分支程序排序过程的流程图
2.完整的程序源代码以及补充分号后面的注释内容:
3.程序输入数值以及运行程序后显示的结果:
实验过程中所遇到的问题及解决办法。

汇编语言程序上机实验

汇编语言程序上机实验

设置断点
在需要调试的代码行设置断点,以便在程 序运行时暂停执行。
分析程序的输出结果
运行可执行文件
在实验环境中运行可执行文件,观察 程序的输出结果。
分析结果
根据程序的输出结果,分析程序的逻 辑和功能是否正确实现。如果输出结 果与预期不符,检查源代码和调试过 程,找出问题所在并进行修正。
04
实验内容
根据实验需求选择合适的硬件设备是实验成功的关键,需要 考虑设备的性能、兼容性和可扩展性等因素。
03
实验步骤
编写汇编语言源代码
确定实验题目和要求
根据实验指导书的要求,明确实验目的和任务,确定需要编写的 汇编语言程序。
编写代码
使用汇编语言编写源代码,实现程序的功能。注意语法和指令的 正确性,确保程序逻辑正确。
编写一个简单的汇编语言程序
总结词
了解汇编语言的基本语法和结构
详细描述
编写一个简单的汇编语言程序,如输出“Hello, World!”的程序,了解汇编语言的指令、寄存器、数据和程序结 构等基本概念。
实现一个简单的计算器程序
总结词
掌握汇编语言的算术运算指令
详细描述
编写一个可以进行加、减、乘、除运 算的简单计算器程序,通过汇编语言 的算术指令实现。
了解汇编语言程序的 基本结构,如程序头、 数据段、代码段等。
熟悉子程序和中断服 务程序的编写和使用。
掌握汇编语言程序的 流程控制结构,如顺 序、分支、循环等。
掌握汇编语言的程序调试方法
熟悉汇编语言程序的调试工具, 如调试器、反汇编器等。
掌握调试工具的基本使用方法, 如设置断点、单步执行、查看 寄存器值等。
调试程序并运行可执行文件
打开调试器

微机原理汇编语言的上机过程 实验报告

微机原理汇编语言的上机过程 实验报告

微机原理技术与接口实验报告学院:专业:班级:姓名:学号:汇编语言程序的上机过程实验目的通过简单地操作了解汇编语言程序的基本内容,体会汇编语言的运行,为以后的实验打下一定的基础。

实验原理及操作步骤一、上机环境❖要运行调试汇编语言程序,至少需要以下程序文件:▪编辑程序:或其他文本编辑工具软件,用于编辑源程序。

▪汇编程序:MASM.EXE,用于汇编源程序,得到目标程序。

▪连接程序:LINK.EXE,用于连接目标程序,得到可执行程序。

▪调试程序:DEBUG.EXE,用于调试可执行程序。

二、上机过程❖汇编语言程序上机操作包括:编辑、汇编、连接和调试几个阶段。

1.编辑源程序❖用文本编辑软件创建、编辑汇编源程序。

常用编辑工具有:、记事本、Word等。

❖无论采用何种编辑工具,生成的文件必须是纯文本文件,所有字符为半角,且文件扩展名为.asm(文件名不分大小写,由1~8个字符组成)。

2.汇编❖用汇编工具对上述源程序文件(.asm)进行汇编,产生目标文件(.obj)等文件。

❖汇编程序的主要功能是:检查源程序的语法,给出错误信息;产生目标程序文件;展开宏指令。

❖汇编过程如下:❖在DOS状态下,输入命令:MASM MYFILE.ASM(回车),即启动了汇编程序。

❖此命令执行后,会出现下面的3行信息,依次按回车键(即选择默认值)即可建立3个输出文件,其扩展名分别为:.OBJ(目标文件),.LST(列表文件)和.CRF(交叉引用文件)。

Object Filename [MYFILE.OBJ]:Source Listing [Nul.LST]:Cross Reference [Nul.CRF]:依次按回车键,进行选择后,汇编程序就对汇编源程序进行汇编。

如果汇编过程中发现有语法错误,则屏幕上会显示出错语言的位置和出错的类型。

此时,需要进行修改,然后再进行汇编。

❖如此进行,直至汇编无错误,得到目标文件为止。

3.连接❖汇编产生的目标文件(.obj)并不是可执行的程序,还要用连接程序把它转换为可执行的EXE文件。

汇编实验报告

汇编实验报告

汇编实验报告一、实验目的本次汇编实验的主要目的是深入理解计算机底层的工作原理,掌握汇编语言的基本语法和编程技巧,能够运用汇编语言编写简单的程序来实现特定的功能。

通过实践操作,提高对计算机体系结构的认识,培养解决实际问题的能力。

二、实验环境本次实验使用的操作系统为 Windows 10,汇编语言编译器为MASM 615。

三、实验内容(一)数据传送与算术运算1、编写程序实现将两个 16 位的整数相加,并将结果存储在指定的内存单元中。

2、实现数据在不同寄存器和内存单元之间的传送。

(二)逻辑运算与移位操作1、对给定的两个字节数据进行逻辑与、或、异或操作,并观察结果。

2、进行移位操作,包括左移和右移,理解移位对数据的影响。

(三)循环与分支结构1、利用循环结构计算 1 到 100 的整数之和。

2、根据给定的条件,使用分支结构实现不同的操作。

(四)子程序调用1、编写一个子程序,实现两个数的乘法运算。

2、在主程序中调用该子程序,并输出结果。

四、实验步骤(一)数据传送与算术运算1、打开 MASM 编译器,新建一个汇编源文件。

2、使用`MOV` 指令进行数据传送,将两个整数分别存储在寄存器`AX` 和`BX` 中。

3、使用`ADD` 指令将两个数相加,结果存储在`CX` 寄存器中。

4、最后,使用`MOV` 指令将结果存储到指定的内存单元。

(二)逻辑运算与移位操作1、在源文件中定义两个字节变量,并初始化其值。

2、使用逻辑运算指令(如`AND`、`OR`、`XOR`)对这两个变量进行操作。

3、使用移位指令(如`SHL`、`SHR`)对变量进行移位,并观察结果。

(三)循环与分支结构1、对于循环结构,使用`LOOP` 指令实现从 1 到 100 的累加。

2、在分支结构中,根据给定的条件(如比较两个数的大小),使用`JZ`、`JL` 等指令执行不同的分支操作。

(四)子程序调用1、定义一个子程序,使用参数传递的方式接收两个数,并进行乘法运算。

汇编上机实验报告

汇编上机实验报告

实验一认识Tddebug集成操作软件实验日志指导教师曾素华实验时间:2013 年04 月02 日学院计算机科学与技术专业计算机科学与技术班级0411005 学号2010211912 姓名李新娱实验室s401一、实验题目认识Tddebug集成操作软件二、实验目的1.熟悉汇编程序的开发过程。

2.认识Tddebug集成操作软件。

3.掌握在Tddebug集成环境中编辑、编译、连接汇编语言程序方法。

4.掌握INT 21H软件中断来调用DOS内部子程序的方法三、实验内容及说明1.实验内容:数据传送实验1)编程将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。

参见示例出程序。

2)修改此程序,采用字符串传送指令完成。

2.实验中使用DOS功能调用(INT 21H):参见教材《32位微型计算机原理与接口技术》89页(1)显示字符串入口:AH=09H调用参数:DS:DX=串首地址,‘$’为结束字符。

(2)返回DOS系统入口:AH=4CH调用参数:AL=返回码四、实验主要步骤要求一数据传送实验1.运行Tddebug软件,选择Edit菜单编写实验程序2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。

3.使用Rmrun菜单中的Run运行程序,观察运行结果。

4.使用Rmrun菜单中的Debug调试程序,查看程序段、数据段、附加段装入内存后的分配情况。

单步执行数据传送指令后,观察各寄存器及数据区的内容。

过程如下:3)按F7单步执行,在代码区中有一个三角,表示正在执行的指令。

每一条指令的执行一定会使目标寄存器和状态寄存器发生变化,从相关窗口看结果。

4)检查内存数据区的内容,关键是找出用户程序的数据段和附加段:●方法1:在CPU窗口按Tab键使内存数据显示区成为活动区,按Ctrl+G键,输入:“DS或ES寄存器的值:偏移地址”,即可显示用户指定的数据区●方法2:选择菜单View| Dump,弹出内存数据显示窗口。

汇编语言上机报告

汇编语言上机报告

汇编语言上机报告班级:姓名:学号:成绩:实验1:8086的微处理器结构(现场)的认识实验一、实验目的1、通过DEBUG工具了解8086的寄存器2、了解DEBUG工具二、预习要点1、8086微处理器的内部特性。

2、8086的寄存器类型、名称和作用。

3、debug工具的作用和特点三、实验项目在DOS下利用Debug调试工具的R命令查看8086微处理器的现场(数据结构)四、实验设备环境PC机1台,DOS操作系统,Debug调试工具五、实验方法在DOS下利用Debug调试工具的R命令查看8086微处理器的现场(数据结构)。

六、实验要求1、写出R命令的功能。

2、写出8086的当前现场的所有数据部件(寄存器)的名称及作用。

1. 进入DOS 指定上机目录的方法2.建立第一次上机的源程序Z=X+Y (2=1+1)3.对源程序进行编译(汇编)产生目标(二进制)文件的方法。

源程序正确(无致命错误 0 Severest Errors )时会出现编译正确的信息并产生同名1.obj 目标文件。

4.制造错误并存盘后重新汇编(MASM 1; 为快速汇编命令,不能缺少“;”。

即不用会话直接)看产生错误的信息。

修改错误重新存盘汇编。

5. 对1.obj链接(link.exe)产生可执行1.exe文件6.完成1.exe后的文件夹7.用DEBUG调入要调试的1.exe文件,用U命令查看。

8.DEBUG的U命令的功能本程序的机器语言(二进制)程序的形态。

用十六进制表示。

每条指令的首地址,如13E7:0000(指令地址由系统分配)每条指令的机器代码,如B8E613每条指令的助记符(汇编指令),如MOV AX,13E6系统分配的本程序数据段的段地址13E69. DEBUG的R命令的功能自己完成截图,并小结指出R命令的所有功能实验2:8086传送类指令的学习实验一、实验目的1、了解8086指令的特点。

2、验证传送类所有指令类型的功能。

3、通用传送指令和专用传送指令的对比。

汇编语言编程实验报告

汇编语言编程实验报告

汇编语言编程实验报告汇编语言程序设计实验报告(一)汇编语言程序设计实验报告(一)一、预备知识汇编语言程序设计是一门实践性很强的课程。

编写程序、上机调试、运行程序是进一步学习和掌握汇编语言程序设计的必要手段。

二、实验目的1、掌握实验运行汇编语言所用的计算机机型2、熟悉常用编辑程序(行编辑程序EDLIN、全屏幕编辑程序QE及其它用于文件编辑的应用程序。

)3、掌握汇编程序ASM、宏汇编程序MASM1.0以上。

4、LINK连接程序5、DEBUG调试程序三、汇编语言源程序上机操作过程2、编辑源文件根据给定的任务,可编写程序。

如果经过检查认为所编程序无错时,就可在计算机上通过编辑程序建立源程序文件了。

一般在编辑过程中总会有错误产生,因此还要进行人工检查、修改以致重新编辑,直到所编辑的源程序无误为止,然后以一个源程序文件(ASM文件)存盘。

将包含QE文件的工作磁盘插入驱动器A:。

进入QEA\QE进入全屏幕后可以开始编程。

文件名取为Myprog。

asm;Ddisplystring (09H)CODESEGMENTPUBLICASSUME CS:CODE,DS:CODEORG 100HSTART:JMP BEGINMSG DB‘Hi ! This ia a dollar sign terminated string.’,’$’BEGIN:MOV AX,CS ;set up to display messageMOV DS,AXMOV DX,OFFSET,SG ;set up to display messageMOV AH,09H;display string function requestINT 21H ;call DOSMOV AH ,4CH ;terminate propram funct requestINT 21H ;Call DOSCODE ENDS;end of code segmentEND START;strat is the entry point输入完毕后,按ALT---X,存盘返回DOS3、汇编源程序文件(ASM,MASM)由编辑程序所建立的ASM文件只是个文本文件,计算机无法执行。

汇编上机实验报告

汇编上机实验报告

汇编上机实验报告实验名称:汇编上机实验报告1. 实验目的通过完成汇编上机实验,掌握汇编语言的基本概念和语法规则,理解计算机底层运行的原理,加深对计算机体系结构的理解。

2. 实验环境硬件环境:个人电脑一台,操作系统为Windows 10软件环境:MASM汇编语言开发工具(Microsoft Macro Assembler)、DOSBox模拟器3. 实验内容及步骤3.1 实验一:汇编程序基本框架搭建步骤:(1) 在MASM环境下创建一个新的汇编源文件,命名为"lab1.asm"。

(2) 在源文件中编写汇编程序的基本框架,包括段定义、数据定义和代码段等。

(3) 使用MASM汇编器将源文件编译为目标文件。

(4) 使用链接器将目标文件连接为可执行程序。

(5) 在DOSBox模拟器中执行可执行程序,观察程序输出结果。

3.2 实验二:实现简单的数值运算步骤:(1) 按照实验一的步骤,在MASM环境下创建一个新的汇编源文件,命名为"lab2.asm"。

(2) 在源文件中编写汇编程序,实现两个数的相加、相减、相乘和相除等简单的数值运算。

(3) 使用MASM汇编器将源文件编译为目标文件。

(4) 使用链接器将目标文件连接为可执行程序。

(5) 在DOSBox模拟器中执行可执行程序,输入两个数值,观察程序计算结果。

3.3 实验三:字符串处理步骤:(1) 按照实验一的步骤,在MASM环境下创建一个新的汇编源文件,命名为"lab3.asm"。

(2) 在源文件中编写汇编程序,实现字符串的输入、输出和处理。

(3) 使用MASM汇编器将源文件编译为目标文件。

(4) 使用链接器将目标文件连接为可执行程序。

(5) 在DOSBox模拟器中执行可执行程序,输入一个字符串,观察程序对字符串的处理结果。

4. 实验结果与分析实验一:汇编程序基本框架搭建在DOSBox模拟器中成功执行了汇编程序,没有出现任何错误提示,并得到了预期的输出结果。

汇编语言上机实验报告3

汇编语言上机实验报告3

学号080304235沈阳建筑大学城市建设学院汇编语言程序设计上机实验报告2010~2011第2 学期专业班级:计算机08-2班姓名:董宇亮上机时间:指导教师:杜利明年月日1.实验目的掌握汇编程序的循环结构程序设计方法。

2.实验要求1.掌握多重循环程序和排序程序设计方法。

2.掌握带符号数的比较转移指令:JL,JLE,JG,JGE3.实验指令内容建立学生名次表,以grade为首地址的数组中保存了学生的成绩,其中grade+i 保存学号为i+1的学生的成绩。

要求建立一个10个字的rank数组,并根据grade中的学生成绩将学生名次填入rank 数组中,其中rank+i的内容是学号为i+1学生的名次(提示:一个学生的名次等于成绩高于该学生的人数加1)4.实验步骤1.输入,汇编并连接此程序。

2.在DEBUG下运行此程序,记录运行结果。

3.将转移指令JGE改为JG,JL,JLE分别运行记录排序结果,察看结果是否正确不对,并分析原因。

5.程序(指令)清单DA TAS SEGMENT;此处输入数据段代码GRADE DW 79,85,58,45,78,36,98,85,48,72;自行定义;成绩COUNT EQU ($-GRADE)/2RANK DW COUNT DUP (1) ;排名,初始值为1,大家都第一名,同一起跑线哈DA TAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX;此处输入代码段代码MOV SI,0 ;要排名的学生号码MOV CX,COUNTL1:MOV AX,GRADE[SI] ;获得第SI号学生的成绩MOV BX,RANK[SI] ;获得第SI号学生的初始排名MOV DX,CX ;保存CXMOV DI,0 ;要比较的学生的号码MOV CX,COUNTL2:CMP AX,GRADE[DI] ;逐个比较JNB L3INC BX ;低于某一个学生的成绩,则排名加1 L3:ADD DI,2LOOP L2MOV RANK[SI],BX ;保存排名ADD SI,2MOV CX,DXLOOP L1MOV AH,4CHINT 21HCODES ENDSEND START6. 程序运行结果7.实验心得。

汇编语言上机实验报告

汇编语言上机实验报告

汇编语言上机实验报告汇编语言上机实验报告引言:汇编语言是一种底层的计算机语言,通过使用汇编语言,我们可以更加深入地了解计算机的运行原理和底层机制。

本次实验旨在通过上机实践,掌握汇编语言的基本语法和编程技巧,同时加深对计算机底层的理解。

实验目的:1. 学习汇编语言的基本语法和指令集;2. 掌握汇编语言的程序设计和调试方法;3. 加深对计算机底层原理的理解。

实验环境:本次实验使用的是Windows操作系统,并安装了MASM汇编语言开发工具。

实验过程:1. 实验一:Hello World程序我们首先编写一个简单的Hello World程序,用于验证汇编语言的环境是否正常。

通过使用MASM工具,我们可以将源代码汇编成可执行文件,并在命令行中运行。

该程序的功能是在屏幕上输出"Hello World"。

```assembly.model small.stack 100h.datamsg db 'Hello World$'.codemain procmov ah, 09hlea dx, msgint 21hmov ah, 4chint 21hmain endpend main```通过编译、链接和运行,我们可以在屏幕上看到"Hello World"的输出。

2. 实验二:计算两个数的和在这个实验中,我们将学习如何编写一个简单的加法程序。

我们定义两个变量a和b,并将其值相加,然后将结果输出到屏幕上。

```assembly.model small.stack 100h.dataa db 10b db 20sum db ?.codemain procmov al, aadd al, bmov sum, almov ah, 09hmov dl, sumadd dl, 30hint 21hmov ah, 4chint 21hmain endpend main```在屏幕上,我们可以看到输出结果为"30",即10加20的和。

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

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

实验报告实验名称汇编语言程序设计||专业班级:信息安全学号:姓名:实验一汇编语言上机过程和Debug常用调试命令一.实验目的:学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。

二.实验题目:熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。

在调试过程中,学习及掌握debug程序的各种操作命令。

三.问题描述:试编写一程序:比较两个字符串string1和string2所含的字符是否相同,若相同则显示‘match’; 否则,显示‘no match’。

四.方法说明:a) 使用ws、tc或EDIT编辑程序来建立源文件,然后存盘,使系统返回DOS。

b) 用汇编程序masm(或asm)对源文件汇编产生目标文件obj如:汇编指示出错则需重新调用编辑程序修改错误,直至汇编通过为止。

c) 用连接程序link 产生执行文件EXE.d) 执行程序,可直接从DOS执行程序。

e) 使用debug程序调试程序的方法。

五.实验步骤:1.调用字处理程序EDIT 建立以sample.asm文件datarea segmentstring1 db ‘move the cursor backward.’string2 db ‘move the cursor backward.’mess1 db ‘Match..’,13,10,’$’mess2 db ‘No match!..’,13,10,’$’datarea endsprognam segmentmain proc farassume cs:prognam,ds:datarea,es:datarea start:push dssub ax,axpush axmov ax,datareamov ds,axmov es,axlea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx, mess1disp:mov ah,09int 21hretmain endpprognam endsend start2.对源文件汇编产生目标文件obj D:\masm 文件名。

微机原理汇编语言上机实验报告

微机原理汇编语言上机实验报告

微机原理汇编语言上机实验报告-CAL-FENGHAI.-(YICAI)-Company One1第三次上机实验报告一.实验目的1.熟练掌握汇编语言程序设计的方法及上机步骤。

2.掌握算术运算指令的应用。

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

4.掌握DOS功能的调用方法。

二.实验仪器586微机一台三.实验内容有一个首地址为A的N字数组,请编程序使该数组中的数按从大到小的次序排列。

编程要求及提示:[1] 参加排序的数据及个数由学生自己定义。

[2] 要将排序前的数组和排序后的数组在屏幕上显示出来。

四.给出实验内容对应的源程序及流程N = 50STACK SEGMENT STACK 'STACK'DW 100H DUP()TOP LABEL WORDSTACK ENDSDATA SEGMENTDATABUF DW NDB N DUP()ORIGINAL DB 13,10,13,10,'THE ORIGINAL DATA:$'ORDERED DB 13,10,10,13,'THE ORDERED DATA:$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXLEA SP,TOP;随机数据MOV CX,DATABUFLEA SI,DATABUF+2MOV BL,12MOV AL,14L:MOV [SI],ALINC SIADD AL,BLLOOP LLEA DX ,ORIGINALMOV AH,9INT 21HCALL DISPAL;下面给数据排序程序MOV CX,DATABUFDEC CXLEA SI,DATABUF+2ADD SI,CX; SI指向数据区末地址L1:PUSH CXPUSH SIL2:MOV AL,[SI]CMP AL,[SI-1]JBE NOXCHGXCHG AL,[SI-1]MOV [SI],ALNOXCHG:DEC SILOOP L2POP SIPOP CXLOOP L1LEA DX,ORDEREDMOV AH,9INT 21HCALL DISPALEXITPROC:MOV AH,4CH;结束程序MOV AH,1INT 21HDISPAL PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH DILEA DI,DATABUF+2MOV CX,NDISPAL2:MOV AL,[DI]SHR AL,1SHR AL,1SHR AL,1SHR AL,1CALL CHANG ;------------------------------------------------MOV AH,2MOV DL,ALINT 21HMOV AL,[DI]AND AL,0FHCALL CHANG;-------------------------------------------------MOV AH,2MOV DL,ALINT 21HMOV AH,2MOV DL,20HINT 21H ;为了让结果看得清楚,让显示的数用空格空开 INC DILOOP DISPAL2POP DIPOP DXPOP CXPOP BXPOP AXRETDISPAL ENDPCHANG PROC NEARCMP AL,10JNGE CHANG1ADD AL,7CHANG1:ADD AL,30HRETCHANG ENDPCODE ENDSEND START五.实验心得在实验过程中出现了类型不匹配的错误,归根结底还是对知识的掌握熟悉度不够;再者由于初次上机编写一个完整的汇编程序难免会出现这样或那样的问题,但在老师和同学的帮助下最终完成了这个程序的编写运行调试,收获颇丰。

masm实验3 实验报告

masm实验3 实验报告

(1)将下面程序保存为t1.asm,生成可执行文件t1.exe。

assume cs:codesgcodesg segmentmov ax,2000Hmov ss,axmov sp,0add sp,10pop axpop bxpush axpush bxpop axpop bxmov ax,4c00Hint 21Hcodesg endsend(2)用debug跟踪t1.exe的执行过程,写出每一步执行后,相关寄存器中的内容和栈顶内容。

step 0:通过debug t1.exe加载程序后:ax=0000H;bx=0000H;cx=0016H(表示程序长度,为22个字节);ds=13D5H(表示操作系统给t1.exe分配的空闲区域的段地址);cs=13e5H(=ds+10H,与之前描述一致);ss=13e5H,sp=0000H;通过d 13e5:0 1命令查看栈顶内容,为00b8H;step1:单步执行第一条指令后:ax=2000H;bx=0000H;其余cx,ds,cs,ss,sp均不变;此时栈顶内容理应不变,查看依旧为00b8H;step2:单步执行第二条指令后,自动连带执行第三条指令:ax=2000H;bx=0000H;其余cx,ds,cs均不变;ss和sp被重置,栈顶指向:2000:0,查看栈顶内容,为:0ff1H;step3:单步执行第四条指令后:ax=2000H;bx=0000H;其余cx,ds,cs,ss均不变;sp被重置,栈顶指向:2000:0a,查看栈顶内容,为:615fH;step4:单步执行第五条指令后:ax=615fH(与上一步所得一致);bx=0000H;其余cx,ds,cs,ss均不变;sp=sp+2,栈顶指向:2000:0c,查看栈顶内容,为:0DF0H;----------因重新debug,导致前后ax不一致-----------step5:单步执行第六条指令后:ax=13e5H;bx=0DF0H(与上一步所得一致);其余cx,ds,cs,ss均不变;sp=sp+2,栈顶指向:2000:0E,查看栈顶内容,为:0B16H;step6:单步执行第七条指令后:ax=13e5H;bx=0DF0H;其余cx,ds,cs,ss均不变;sp=sp-2,栈顶指向:2000:0C,查看栈顶内容,为:13E5H (与AX一致);step7:单步执行第八条指令后:ax,bx,cx,ds,cs,ss均不变;sp=sp-2,栈顶指向:2000:0A,查看栈顶内容,为:0DF0H (与BX一致);step8:单步执行第九条指令后:ax=0DF0H(与上步查看一致);bx,cx,ds,cs,ss均不变;sp=sp+2,栈顶指向:2000:0C,查看栈顶内容,为:13E5H;step9:单步执行第十条指令后:bx=13E5H(与上步查看一致);ax,cx,ds,cs,ss均不变;sp=sp+2,栈顶指向:2000:0E,查看栈顶内容,为:0B16H;(3)PSP头两个字节为CD 20,用debug加载t1.exe.查看PSP内容:PSP区域地址范围为:ds:0~ds:ff.分类: 汇编语言。

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

第三次上机实验报告时间:2013/4/26,18:30-21:30地点:南一楼803室实验人员:王涛一、题目输入一组有符号字数据。

对该组数进行排序,按照从大到小的顺序以用户指定的进制形式输出排序后的结果。

运行时:Please input numbers:123 0 -100 -50 300 25↙Output Format (1: decimal; 2 :hex; 3: Octal) : 1↙300,123,25,0,-50,-100运行时:Please input numbers:123 0 -100 -50 300 25 ↙Output Format (1: decimal; 2 :hex; 3: Octal ) : 2↙12CH,7BH,19H,-32H,-64H二、要求:(1) 画出程序流程图,给出寄存器、存储单元的分配方法,子程序的功能、入口参数及出口参数(对于各个子程序,也要说明其寄存器、存储单元的分配情况。

在流程图中也列出相应子程序的名称)。

(2) “数字串到字数据的转换”用子程序实现。

要求:该子程序只实现一个数字串的转换。

对于多个数字串,要多次调用该子程序。

(可以借鉴教材中的示例,注意每个模块前都应该加上“.386”)。

对于非数字串,以及超过一个字大小的数字串应给出提示。

(3)“排序”使用子程序实现。

(4) “数值数据到串的转换”用子程序实现。

要求该子程序只实现一个数值数据的转换。

(5) 输入时,数字串之间的分割符可以是一个空格,也可以是一个标点符号(如逗号),数字串前可有一个正号或负号。

输出时,数字串之间的分割符号为一个逗号加上一个空格。

(6) 观察执行CALL指令时,堆栈的变化,以及IP、CS的变化。

(7) 掌握跟踪进入子程序的方法。

(8) 定义宏并使用宏指令,观察宏扩展后的结果。

(9) 采用模块化程序的方法设计该程序。

(10)写下必要的设计文档可以帮助我们理清思路,减少写程序时的错误;(11)同学们可以相互讨论算法思想,理清思路;(12)可以先不用子程序来实现程序的功能,然后再改写成子程序,最后拆分到不同模块;(13)在源程序中加上适当的注释。

三、寄存器和存储单元分配和说明AX——中间寄存器。

BX——往ARR字存储区送数指针,初值为ARR。

CX——作以逗号分隔的一个十进制数字串长度计数器,初值为0。

DX——按系统功能调用的规定使用。

DI——往BUF字节存储区送输入的字符指针,初值为BUF。

SI——调用F10T2子模块的入口参数,作从BUF区取字符指针。

BUF——输入缓冲区首址。

ARR——经转换得到的二进制数组存储区首址。

COUNT——ARR存储区中数组元素个数计数器,初值为0。

SIGN——输入字符串处理结束标志,1—处理结束,0—处理未结束。

四、程序流程图子模块F2TN流程图:五、源代码NAME MAINEXTRN F10T2:NEAR ,F2T10:NEAR ,QUEUE:NEARIF1INCLUDE MACRO.LIB ;将宏汇编在第一次扫描时加入一起回汇编ENDIF.386DA TA SEGMENT USE16 PARA PUBLIC 'DATA'BUF D B 8 DUP(0) ;输入一个十进制数字串存储区ARR DB 32 DUP(0) ;转换后的二进制数组存储区SIGN DB 0 ;标记是否输入完0:未输完,1:输完COUNT DW 0 ;转换后的二进制数组元素个数计数器ERROR DB 'IS ILLEGAL DIGIT!$'INPUT1 DB 'Please Input Numbers:$'INPUT2 DB 'Output Format (1:decimal; 2:hex; 3:Octal):$'DA TA ENDSSTACK0 <200 DUP(0)>CODE SEGMENT USE16 PARA PUBLIC 'CODE'ASSUME DS:DA TA, ES:DATA, CS:CODE, SS:STACKSTART: MOV AX, DATAMOV DS, AXMOV ES, AXLEA B X, ARR ;数组首址ARR->BXMOV COUNT, 0MOV SIGN, 0WRITE INPUT1BEG: LEA D I, BUF ;数字串存储区首址MOV CX, 0NEXT0: MOV AH, 1INT 21HCMP AL, ' ' ;输入数字用空格分隔JE DIGITCMP AL, 0DH ;判断是否为回车符JNE PCMP COUNT, 0JE EXITINC SIGN ;已全部输完,标识置1JMP DIGIT ;转digit调用F10T2子模块P: STOSBINC CXJMP NEXT0DIGIT: LEA S I, BUFMOV DX, 16CALL F10T2 ;调用F10T2子模块CMP SI, -1 ;判断是否有非法字符和溢出,转到ERR处JE ERRMOV [BX], AXADD BX, 2INC COUNTCMP SIGN, 1JE END0JMP BEGEND0: MOV CX, COUNTLEA S I, ARRMOV BP, 1 ;对有符号数置1CALL QUEUE ;调用QUEUE排序模块CRLF ;换行WRITE INPUT2 ;输出提示信息,MOV AH, 1 ;选择输出格式INT 21HSUB A L, '1'XOR AH, AHMOV CX, AXCRLF ;换行MOV BX, COUNT ;LEA S I, ARR ;待输出数组的首址送SIOUT2: MOV AX, [SI] ;取出一个待输出的数送到AXADD SI, 2MOV DX, 16CALL F2TN ;调用F2TN子模块,将AX按用户指定格式输出OUT1 ' ' ;输出用空格分隔DEC BXJNE OUT2 ;未输完,转到OUT2继续JMP EXIT ;输完,到EXIT结束ERR: CRLFWRITE ERROR ;对非法操作输出错误提示EXIT: MOV AH, 4CHINT 21HCODE ENDSEND STARTNAME F10T2;功能:将十进制ASCII码转换成有符号的二进制数AX/EAX,可转换的16位数范围是-32767~+32767;入口参数:; SI——指向待转换的十进制ASCII码存储区首址; CX——存放该十进制ASCII码串的长度;出口参数:; EBX——中间寄存器; SIGN——正负数标记PUBLIC F10T2.386DA TA SEGMENT USE16 PARA PUBLIC 'DATA' SIGN DB ?DA TA ENDSCODE SEGMENT USE16 PARA PUBLIC 'CODE' ASSUME CS:CODE, DS:DA TAF10T2 PROCPUSH EBXMOV EAX, 0MOV SIGN, 0MOV BL, [SI]CMP BL, '+'JE F10CMP BL, '-'JNE NEXT2MOV SIGN, 1F10: DEC CXJZ ERRNEXT1: INC SIMOV BL, [SI]NEXT2: CMP BL, '0'JB ERRCMP BL, '9'JA ERRSUB B L, 30HMOVZX EBX, BLIMUL EAX, 10JO ERRADD EAX, EBXJO ERRJS ERRJC ERRDEC CXJNZ NEXT1CMP DX, 16JNE PP0CMP EAX, 7FFFHJA ERRPP0: CMP SIGN, 1JNE QQNEG EAXQQ: POP EBXRETERR: MOV SI, -1JMP QQF10T2 ENDPCODE ENDSENDNAME F2TN;功能:将AX/EAX中有符号二进制数换成N进制数,N有用户指定;入口参数:; AX/EAX——存放待转换二进制数; CX——存放用户要求的进制数的序号;出口参数:; BUF——; FROMAT——存放对用户输入要求转换的进制数; EAX——存放待转换的二进制数; EBX——存放要转换的进制数; SI——存放待转换的N进制数ASCII码数字串的字节缓冲区首址; DI——存放各种进制数内容区的首址; CX——N进制数计数器(在RADIX子程序中使用); EDX——按除法指令和系统功能调用的规定使用PUBLIC F2TN.386DA TA SEGMENT USE16 PARA PUBLIC 'DATA'BUF D B 12 DUP(?)FORMAT DB 10,16,8DA TA ENDSCODE SEGMENT USE16 PARA PUBLIC 'CODE' ASSUME CS:CODE, DS:DATAF2TN PROCPUSH EBXPUSH SIPUSH DILEA S I, BUFMOVSX EAX, AXOR EAX, EAXJNS PLUSNEG EAXMOV BYTE PTR [SI], '-'INC SIPLUS: LEA D I, OFFSET FORMA TADD DI, CXMOV BL, [DI]MOVZX EBX, BLCALL RADIXMOV BYTE PTR [SI], '$'LEA D X, BUFMOV AH, 9INT 21HPOP DIPOP SIPOP EBXRETF2TN ENDPRADIX PROCPUSH CXPUSH EDXXOR CX, CXLOP1: XOR EDX, EDXDIV EBXPUSH DXINC CXOR EAX, EAXJNZ LOP1LOP2: POP AXCMP AL, 10JB L1ADD AL, 7L1: ADD AL, 30HMOV [SI], ALINC SILOOP LOP2POP EDXPOP CXRETRADIX ENDPCODE ENDSENDNAME QUEUE;功能:将一组16位的有或无符号二进制数按从大到小顺序排列后存储在原来的区域,用冒泡排序;入口参数:; SI——从数组存储区取数指针,初值为该存储区首址; CX——待排序的数组元素个数; BP——有无符号排序的标识(BP=1为有符号数排序);所用寄存器:; DI——中间寄存器; AX——存放待比较数; DX——内循环计数器,CX为外循环计数器PUBLIC QUEUECODE SEGMENT USE16 PARA PUBLIC 'CODE' ASSUME CS:CODEQUEUE PROCPUSH AXPUSH DXPUSH DIMOV DI, SIDEC CX ;外循环计数器QU1: MOV DX, CX ;内循环计数器MOV SI, DIQU2: MOV AX, [SI]CMP BP, 0JE NOCMP AX, [SI+2] ;如果前一个数大于后一个数,则不交换JG NOXCHXCH: XCHG [SI+2], AXMOV [SI], AXNOXCH: ADD SI, 2DEC DXJNE QU2LOOP QU1POP DIPOP DXPOP AXRETNO: CMP AX, [SI+2]JBE NOXCHJMP XCHQUEUE ENDPCODE ENDSEND; MACRO.LIBWRITE MACRO ALEA D X,AMOV AH,9INT 21HENDMCRLF MACROMOV AH,2MOV DL,0AHINT 21HMOV DL,0DHINT 21HENDMOUT1 MACRO AMOV DL,AMOV AH,2INT 21HENDMSTACK0 MACRO ASTACK SEGMENT USE16 PARA STACK 'STACK'DB ASTACK ENDSENDM六、实验步骤1. 使用编辑程序TXT.EXE录入各个模块代码,存盘文件名分别为MAIN.ASM,F2TN.ASM,F10T2.ASM,QUEUE.ASM。

相关文档
最新文档