汇编上机实验

合集下载

汇编语言上机实验内容

汇编语言上机实验内容

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

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

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

2、利用DEBUG进行程序调试,把握经常使用命令的利用方式,观看运行结果。

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

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

c:\masm>DEBUG手写源程序图 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 ;编辑源程序c:\masm>MASM ShowBL ;汇编成Microsoft (R) Macro Assembler VersionCopyright (C) Microsoft Corp 1981,1988. All rights reserved.48912 + 447243 Bytes symbol space free0 Warning Errors0 Severe Errorsc:\masm>LINK ShowBL ;连接成Microsoft (R) Overlay Linker VersionCopyright (C) Microsoft Corp 1983-1987. All rights reserved.LINK : warning L4021: no stack segmentc:\masm>ShowBL ;装载并执行01010011 ;屏幕显示c:\masm>-在DEBUG下查看的装入情形:c:\masm>DEBUG- 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!”传送到另一段中。

实验二汇编语言上机过程实验(机制本)

实验二汇编语言上机过程实验(机制本)

实验二汇编语言上机过程实验一、实验目的1、了解和掌握由键盘接收数据,并显示其运行结果的方法。

2、掌握INT 21H 的09H和0AH,01H和02H的功能。

3、熟悉在PC机上建立,汇编,链接,调试和运行8086/8088汇编语言程序的过程。

二、实验内容1、汇编语言源程序的上机过程:①将masm5.zip文件下载放在D:\masm文件夹下, 在该文件夹下将压缩文件解压缩。

②利用编辑器建立一个ASM 源文件。

Edit ,记事本等编辑器文件以文件名.asm文件名保存。

最好保存在D:\masm文件夹下。

(即:D:\masm\文件名.asm)文件名自取。

③点击开始菜单,运行↙>cmd↙>d: ↙>cd masm↙>masm 文件名 3下回车>link 文件名 3下回车>debug 文件名.exe>g ↙其中利用MASM.EXE对源程序进行编译。

生成中间代码文件:文件名.obj。

利用link.exe对obj文件进行连接。

生成最终目标代码文件:文件名.exe。

运行可执行文件:文件名.exe,并利用debug调试工具查看结果。

2、编写一个完整程序,在屏幕上显示字符串How are you!data segmentstring db 'how are you!$'data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,offset stringmov ah,9int 21hmov ah,4chint 21hcode endsend start三、实验器材IBM PC 微机一台四、实验报告要求1、实验报告应包括实验目的,实验内容,实验步骤,实验思考题2、完成实验思考题,如有编程题,写出调试正确的程序,并给程序加注释,写出实验中所记录下的内存数据存放格式。

五、实验思考题下面的汇编语言源程序有错误的,试给程序加注释。

汇编上机实验报告

汇编上机实验报告

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

实验内容:实验一:汇编程序的简单输入输出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

汇编语言上机实验报告1

汇编语言上机实验报告1汇编语言上机实验报告1实验内容:1.编写一个程序,求解给定整数的阶乘并输出结果。

2.编写一个程序,求解斐波那契数列中的第n个数并输出结果。

实验步骤:1.阶乘程序:编写一个汇编程序,通过输入一个整数n,求解n的阶乘。

程序流程如下:1.1.定义变量n,用于保存输入的整数。

1.2.将n与0进行比较,如果n为0,则直接将1输出作为阶乘的结果,并跳转到程序结束;否则继续执行下一步。

1.3.将n的值保存到寄存器中,并将n减1,保存到n中。

1.4.将n与0进行比较,如果n为0,则直接跳转到程序结束;否则继续执行下一步。

1.5.将n的值与寄存器中保存的值相乘,将结果保存到寄存器中。

1.6.将n减1,保存到n中并跳转到第4步。

1.7.输出寄存器中的结果作为阶乘的结果,并跳转到程序结束。

2.斐波那契数列程序:编写一个汇编程序,通过输入一个整数n,求解斐波那契数列中的第n个数。

程序流程如下:2.1.定义变量n,用于保存输入的整数。

2.2.将n与0进行比较,如果n为0,则直接将0作为结果输出,并跳转到程序结束;否则继续执行下一步。

2.3.将n与1进行比较,如果n为1,则直接将1作为结果输出,并跳转到程序结束;否则继续执行下一步。

2.4.将n的值保存到寄存器中,并将n减1,保存到n中。

2.5.将n与0进行比较,如果n为0,则跳转到第9步;否则继续执行下一步。

2.6.将n减1,保存到n中并跳转到第7步。

2.7.将n的值与寄存器中保存的值相加,将结果保存到寄存器中。

2.8.将n减1,保存到n中并跳转到第5步。

2.9.输出寄存器中的结果作为斐波那契数列中第n个数的结果,并跳转到程序结束。

实验结果:1.阶乘程序运行结果:请输入一个整数:55的阶乘为:1202.斐波那契数列程序运行结果:请输入一个整数:6斐波那契数列中第6个数为:8实验总结:通过本次实验,我学习了如何在汇编语言中编写程序解决一些基本的数学问题。

汇编语言上机实验指导

汇编语言上机实验指导

实验一汇编语言上机基本步骤一、实验目的:熟悉汇编语言的上机过程,掌握各项工具软件的使用方法二、实验环境:1.硬件:PC微机2.软件:DOS系统、EDIT.EXE、MASM.EXE、LINK.EXE、DEBUG.EXE三、实验内容:1.前期准备:在开始进行汇编语言上机练习之前,建立并进入自己的工作子目录,准备好相关工具软件如MASM.EXE、LINK.EXE等,其后所有工作均在自己的子目录中进行,以避免因路径概念不清而导致的文件存取错误,以及对系统其它部分造成影响。

1)建立自己的工作子目录(例如MYTEST):C:\>MD MYTEST2)进入自己的工作子目录:C:\>CD MYTEST3)将所需工具软件从其它地方(如C:\MASM)拷贝进自己的工作子目录:C:\MYTEST>COPY C:\MASM\MASM.EXEC:\MYTEST>COPY C:\MASM\LINK.EXE2.编写源程序:原则上可以用任何文字处理软件(如EDIT、写字板、甚至WORD)编写源程序,但必须注意,源程序应为ASCII码文件(或称纯文本文件),扩展名一般为.ASM。

因此,建议使用DOS环境下的EDIT软件。

1)在DOS系统操作提示符下键入EDIT并回车,即可进入EDIT文本编辑环境。

如果没有进入,检查当前路径下是否存在EDIT.EXE文件,以及文件是否完整等。

2)从键盘输入下列程序(不必输入注释部分):CODE SEGMENT;定义一个CODE段ASSUME CS:CODE;定义CODE段为代码段START:;可执行语句起始处MOV AH,02H ;以下三条语句将显示字母aMOV DL,’a’INT 21HMOV AH,4CH ;以下二条语句将返回DOSINT 21HCODE ENDS;CODE段结束END START;整个程序结束该程序的功能是仅在CRT屏上显示一个字母a,完成功能的只有其中的三条语句,但其它部分则是一个完整的汇编语言源程序必不可少的部分。

汇编语言上机实验汇总

汇编语言上机实验汇总

汇编语言上机实验汇总汇编语言是计算机的低级语言,主要用于编写底层程序和驱动程序。

在学习汇编语言的过程中,学生通常需要进行一定数量的上机实验。

下面是一个汇编语言上机实验的汇总。

1.实验一:环境搭建-目标:搭建汇编语言开发环境2.实验二:基本语法-目标:学习汇编语言的基本语法和指令格式-内容:编写一个简单的汇编程序,包括数据段、代码段和堆栈段,以及常用指令(例如MOV、ADD、SUB、JMP等)的使用。

3.实验三:寄存器和内存操作-目标:熟悉汇编语言中的寄存器和内存的操作-内容:编写一个汇编程序,通过MOV指令将数据从内存中加载到寄存器中,然后进行运算,并将结果存储回内存。

4.实验四:条件分支和循环-目标:掌握汇编语言中的条件分支和循环结构-内容:编写一个汇编程序,使用条件分支指令(例如CMP、JE、JNE 等)实现一个简单的判断语句;然后使用循环指令(例如LOOP)实现一个简单的循环结构。

5.实验五:子程序和参数传递-目标:学习如何创建和调用子程序,并传递参数-内容:编写一个汇编程序,其中包含一个子程序,该子程序接受两个参数并返回它们的和。

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

6.实验六:中断和异常处理-目标:了解中断和异常处理机制,并在汇编程序中处理中断或异常-内容:编写一个汇编程序,其中包含一个中断处理程序,当发生特定的中断时,该处理程序将执行一些特定的操作。

7.实验七:串操作和文件操作-目标:学习汇编语言中的串操作和文件操作-内容:编写一个汇编程序,使用串操作指令(例如MOVS、LODS、STOS等)操作字符串;然后使用文件操作指令(例如OPEN、READ、WRITE 等)读取或写入文件。

8.实验八:图形和音频处理-目标:了解汇编语言中的图形和音频处理- 内容:编写一个汇编程序,使用图形库(例如BGI、OpenGL、DirectX)绘制简单的图形或运行一个音频文件。

这些上机实验可以帮助学生逐步掌握汇编语言的基本知识和技能,并为以后的高级汇编语言编程打下基础。

汇编语言程序上机实验

汇编语言程序上机实验

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

汇编上机试验

汇编上机试验

上机实验5 上机实验5—循环程序设计
练习1 统计键盘输入字符的个数(不超过10 练习1:统计键盘输入字符的个数(不超过10个),并显示 10个 在屏幕上( 为结束符, 在屏幕上($为结束符,含)
CODE SEGMENT ASSUME CS:CODE START: MOV CL,0 AA: MOV AH,1 INT 21H INC CL CMP AL,'$' JNZ AA ADD CL,30H MOV DL,CL MOV AH,2 INT 21H MOV AH,4CH INT 21H CODE ENDS END START
DATA SEGMENT NUM DW -5 RESULT DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,NUM CMP AX,0 JGE L1 NEG AX L1: MOV RESULT,AX MOV AH,4CH INT 21H CODE ENDS END START
MOV BX,8 MUL BX SUB AX,50 SBB DX,0 MOV BX,2 DIV BX MOV Z,AX MOV Z+2,DX MOV AH,4CH INT 21H CODE ENDS END START
上机实验3 上机实验3—分支程序
练习1 已知在内存中有一个字单元NUM 存有带符号数据, 练习1:已知在内存中有一个字单元NUM,存有带符号数据,要 NUM, 求计算出它的绝对值后,放入RESULT单元中. RESULT单元中 求计算出它的绝对值后,放入RESULT单元中.
CODE
上机实验6 上机实验6—串操作程序设计

汇编语言上机实验报告

汇编语言上机实验报告

汇编语言上机实验报告实验时间:XXXX年XX月XX日实验课程:XXXXX实验室地点:XXXXX一、实验目的:1.熟悉汇编语言的基本语法和指令格式;2.掌握汇编语言程序的编写和调试方法;3.理解汇编语言与计算机硬件之间的关系。

二、实验设备与环境:1.实验设备:个人计算机或计算机终端;2. 实验环境:汇编语言开发工具,如Masm、TASM等。

三、实验内容:本实验通过编写汇编语言程序,实现以下功能:1.输入两个整数,求出其和并输出;2.输入一个正整数,判断其是否为素数并输出结果;3.输入一段字符串,判断其中是否存在一些字符,并输出字符的位置。

四、实验原理与方法:1.汇编语言基本语法:包括数据定义、指令格式、寄存器、标志位等;2.输入输出操作:通过中断调用实现从键盘输入、向屏幕输出;3.常用指令:包括数据传送指令、算术运算指令、逻辑运算指令等;4.判断与分支:通过条件判断指令实现程序流程控制。

五、实验步骤:1. 打开汇编语言开发工具,新建文件,并保存为.asm文件;2.编写程序,包括数据定义、指令编写等;3.进行程序调试,检查程序的正确性和运行结果;4.运行程序,查看程序的输出结果;5.对程序进行优化,确保程序的效率和稳定性;6.编写实验报告,记录实验过程和结论。

六、实验结果与数据分析:1.第一个功能的结果:输入两个整数进行相加并输出;2.第二个功能的结果:输入一个正整数,判断是否为素数并输出结果;3.第三个功能的结果:输入一段字符串,判断是否存在一些字符,并输出字符的位置。

七、实验总结:通过本次实验,我对汇编语言的基本语法和指令格式有了更深入的了解,掌握了汇编语言程序的编写和调试方法,加深对汇编语言与计算机硬件之间关系的理解。

在实验过程中,我遇到了一些困难和问题,但通过不断学习和尝试,最终解决了这些问题。

通过实验,我对汇编语言的应用有了更深入的认识,并体会到了编程的乐趣和挑战。

实验完成后,我深刻感受到了汇编语言的底层性能和灵活性,同时也意识到了其编码复杂和调试困难的一面。

汇编语言程序上机实验

汇编语言程序上机实验


常用命令
C: CD
MD
RD DIR
bme bme bme
DEL
CLS EXIT
c.asm
进入C盘 指定当前路径上的bme为当前工作目录 在当前路径新建名为bme的子目录 删除当前路径的bme子目录 显示当前工作目录的文件列表 删除当前工作目录下的c.asm文件 清除屏幕显示内容 退出命令提示符
把MASM.zip 解压到E盘, 把已经编辑 好的 Hello.asm 放入文件夹 内。 打开命令提 示符。


输入“E:” 回车 进入E盘
输入“CD masm” 回车 指定masm 为当前工 作目录

此时可以输 入“DIR” 查看masm目 录下的文件 列表 可以看到, 有我们放进 去的 Hello.asm 文件

输入“link hello.obj” 回车 再三个回车 对 hello.obj 文件进行连 接

提示用户输入要建立的可执行文件 名,若默认括弧内的可执行文件名, 则直接按回车
询问用户是否要建立地址分配文件, 若要,则打入文件名,否则按回车
询问用户是否用到库文件,如果用 户自己建立了库文件,则键入库文 件名,否则按回车
obj文件进行连接提示用户输入要建立的可执行文件名若默认括弧内的可执行文件名若默认括内的则直接按回车执行文件询问用户是否要建立地址分配文件若要则打入文件名否则按回车询问用户是否用到库文件如果用户自己建立了库文件则键入库文件名否则按回车?观察masm文件夹当中是否生成hello
汇编 编辑 连接
调试
? 运行
ቤተ መጻሕፍቲ ባይዱ
代码区
数据区
寄存器区
堆栈区

汇编语言上机试验指导

汇编语言上机试验指导

作实验2【1】.有空加作实验【4】(1).实验2算术及位串处理程序【1】.在数据段预先存放16个十六进制数的ASCII码,把BX中的四位十六进制数,从左到右用查表的方法找到对应数位的ASCII码,并取出显示出来。

要求见书:参考程序:data segmentasc db30h,31h,32h,33h,34h,35h,36h,37h,38h,39hdb41h,42h,43h,44h,45h,46hdata endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov cl,4rol bx,clmov si,bxand si,0fhmov dl,[asc+si]mov ah,2int21hrol bx,clmov si,bxand si,0fhmov dl,[asc+si]mov ah,2int21hmov ah,4chint21hcode endsend start【2】用字符串处理指令编制程序,处理字符串的比较和查找,显示结果。

要求:(1)字符串的比较程序中,一个字符串在数据段定义,另一个字符串在程序执行时从键盘输入,必须定义键盘缓冲区。

并指出不相等的位置。

参考书上例3.51,题目改为MESS2定义为从键盘输入缓冲区,键盘输入缓冲区定义:mess2DB9,?,9DUP(?)例3.51在数据段中有一个长度为19的字符串MESS1,在附加段中有一个长度为19的字符串MESS2,比较它们是否相等。

若相等显示‘Y’,否则显示‘N’。

编制程序如下所示。

data segmentmess1db‘computer software$’data endsext segmentmess2db‘comkuter software$’ext endscode segmentassume cs:code,ds:data,es:extstart:mov ax,datamov ds,axmov ax,extmov es,axlea si,mess1lea di,mess2mov cx,19cldrepe cmpsbjz yes;如果zf=1跳转到标号yesmov dl,‘n’jmp disp;跳转到标号dispyes:mov dl,‘y’disp:mov ah,2int21hmov ah,4chint21hcode endsend start实验3分支程序设计实验目的:掌握分支与循环程序等基本编程方法。

汇编语言上机实验汇总

汇编语言上机实验汇总

START: MOV AX,DATA MOV DS,AX LEA DX,INFON MOV AH,9 INT 21H LEA DX,BUF MOV AH,10 INT 21H MOV CL, [BUF+1] LEA DI,BUF+2 CALL DATACATE CALL IFYEARS JC A1 LEA DX,N MOV AH,9 INT 21H JMP EXIT A1: LEA DX,Y MOV AH,9 INT 21H EXIT: MOV AH,4CH INT 21H DATACATE PROC NEAR LEA SI,BUF+2 MOV BX,0 X3: MOV AL ,[SI] SUB AL ,30H MOV AH,0 XCHG AX,BX MOV DX,10D MUL DX XCHG AX,BX ADD BX,AX INC SI LOOP X3 MOV W,BX RET DATACATE ENDP IFYEARS PROC NEAR PUSH BX PUSH CX PUSH DX MOV AX,W MOV CX,AX MOV DX,0 MOV BX,4 DIV BX CMP DX,0 JNZ LAB1 MOV AX,CX MOV BX,100 DIV BX CMP DX,0 JNZ LAB2 MOV AX,CX MOV BX,400
18A2:011E CD21 INT 21 可见,要执行10条指令,至011B处停止 -G=100,011B AX=7777 BX=0000 CX=020C DX=0000 SP=0000 BP=0000 SI=0200 DI=0204 DS=18A2 ES=1892 SS=18A2 CS=18A2 IP=011B NV UP EI PL NZ NA PE NC 18A2:011B B8004C MOV AX,4C00 -D 200 20F 18A2:0200 78 56 34 12 A9 87 43 65-21 DE 77 77 43 43 83 06 xV4...Ce!.wwCC.. 和为7777DE21H,正确。 ⑥再取一组数据,查看运行结果。为此,首先用E命令修改数据。 -E 200 CD,AB,78,56,90,EF,34,12 -D 200 20F 18A2:0200 CD AB 78 56 90 EF 34 12-21 DE 77 77 43 43 83 06 ..xV..4.!.wwCC.. -G=100,11B AX=68AC BX=0000 CX=020C DX=0000 SP=0000 BP=0000 SI=0200 DI=0204 DS=18A2 ES=1892 SS=18A2 CS=18A2 IP=011B NV UP EI PL NZ NA PE NC 18A2:011B B8004C MOV AX,4C00 -D 200 20F 18A2:0200 CD AB 78 56 90 EF 34 12-5D 9B AC 68 43 43 83 06 ..xV..4.]..hCC.. 和为68AC9B5DH,错误。说明程序有问题。 ⑦再将断点设在完成低位字加法后,查看运行结果。 -G=100,112 AX=9B5D BX=0000 CX=020C DX=0000 SP=0000 BP=0000 SI=0200 DI=0204 DS=18A2 ES=1892 SS=18A2 CS=18A2 IP=0112 NV UP EI NG NZ NA PO CY 18A2:0112 8B4402 MOV AX,[SI+02] DS:0202=5678 -D 200 20F 18A2:0200 CD AB 78 56 90 EF 34 12-5D 9B AC 68 43 43 83 06 ..xV..4.]..hCC.. 低位和为9B5D,正确。说明错误可能出在后面 ⑧使用T命令从刚才的断点处向后单步调试,查看运行结果。 -T=112 AX=5678 BX=0000 CX=020C DX=0000 SP=0000 BP=0000 SI=0200 DI=0204 DS=18A2 ES=1892 SS=18A2 CS=18A2 IP=0115 NV UP EI NG NZ NA PO CY 18A2:0115 034502 ADD AX,[DI+02] DS:0206=1234 -T AX=68AC BX=0000 CX=020C DX=0000 SP=0000 BP=0000 SI=0200 DI=0204 DS=18A2 ES=1892 SS=18A2 CS=18A2 IP=0118 NV UP EI PL NZ NA PE NC 18A2:0118 89440A MOV [SI+0A],AX DS:020A=68AC AX寄存器的结果为68AC,而应为68AD。可见是本条加法指令使用错误,这里应使用带进位加法指令。 ⑨使用A命令装入正确指令后再次运行,察看结果。 -A 115 18A2:0115 ADC AX,[DI+02] 18A2:0118 -G=100,11B AX=68AD BX=0000 CX=020C DX=0000 SP=0000 BP=0000 SI=0200 DI=0204 DS=18A2 ES=1892 SS=18A2 CS=18A2 IP=011B NV UP EI PL NZ NA PO NC 18A2:011B B8004C MOV AX,4C00 -D 200 20F 18A2:0200 CD AB 78 56 90 EF 34 12-5D 9B AD 68 43 43 83 06 ..xV..4.]..hCC.. 和为68AD9B5DH,正确。对于这样一个简单程序一般来说不会再有问题。退出后修改源程序即可。 ⑩退出 -Q D:\MASM> 四、实验要求 (1)熟练掌握Debug的命令; (2)熟练掌握使用Debug调试汇编程序; (3)记录实验结果,写实验报告。

汇编语言程序设计上机实验指导

汇编语言程序设计上机实验指导

汇编语言程序设计上机实验指导一、实验目的1.掌握汇编语言的基本原理和编程技巧。

2.加深对计算机系统结构的理解。

3.培养实验操作和编程能力。

二、实验环境1.所需软件:MARS仿真器。

2.操作系统:任意支持MARS仿真器的操作系统。

三、实验内容1.实验一:编写一个简单的汇编语言程序,实现加法运算。

(1)要求用户输入两个整数。

(2)将两个数相加。

(3)输出两个数的和。

2.实验二:编写一个汇编语言程序,实现乘法运算。

(1)要求用户输入两个整数。

(2)将两个数相乘。

(3)输出两个数的乘积。

3.实验三:编写一个汇编语言程序,实现判断一些数是否为质数。

(1)要求用户输入一个整数。

(2)判断该整数是否为质数。

(3)输出判断结果。

4.实验四:编写一个汇编语言程序,实现打印从1到N之间的所有质数。

(1)要求用户输入一个整数N。

(2)打印出从1到N之间的所有质数。

四、实验步骤1.打开MARS仿真器,创建一个新的程序。

2.按照实验要求,编写汇编语言程序代码。

3.在MARS仿真器中调试和运行程序。

4.检查程序输出结果是否与预期相符。

5.优化程序代码,提高程序的效率和性能。

五、实验注意事项1.确保编写的代码逻辑正确、语法规范。

2.程序设计要遵循模块化设计原则,尽量将程序划分为多个模块,提高程序代码的可读性和维护性。

3. 实验过程中要注意调试程序,排除可能出现的bug。

4.在程序编写过程中,保持良好的编程习惯,合理命名变量和子程序,提高代码的可读性。

六、实验总结1.实验报告中需包含实验的目的、内容、步骤、注意事项等内容。

2.分析并总结实验中遇到的问题和解决方法。

3.对实验过程、结果的合理性进行分析和讨论。

4.提出对实验中存在问题的改进建议。

以上就是一份汇编语言程序设计上机实验指导的内容。

希望这份指导能够帮助学生们更好地进行汇编语言程序设计的实验,提高他们的实践能力和编程水平。

《汇编语言上机环境及基本步骤》实验报告

《汇编语言上机环境及基本步骤》实验报告

汇编语言上机环境及基本步骤一、实验目的:1.掌握编写汇编源程序的基本格式。

2.熟悉汇编语言上机环境。

3.掌握汇编源程序的编辑和修改,熟悉EDIT或记事本的使用方法。

4.掌握汇编源程序编译、连接成可执行文件的过程,熟悉MASM,LINK的使用方法。

二、实验内容:在屏幕上显示并打印字符串“This is a sample program.”三、实验仪器微机一台四、实验步骤:1.在某盘如E盘,以自己的名字的汉语拼音建立一个工作目录(文件夹,名称不要太长,不超过8个字符比如zhangsan),将文件MASM.EXE,LINK.EXE等复制到该目录下,编辑的源文件也保存到该目录下。

从WINDOWS进入DOS环境:C:\>2.用EDIT编辑SW1.ASM源文件。

(1). 从当前目录进入自己的目录下,C:\>E: 回车E:\> CD zhangsan ↙回车键入EDIT并回车:E:\ zhangsan>EDIT根据菜单提示进行各种操作。

(2)进入EDIT编辑------EDIT是一种全屏幕编辑软件,可输入、编辑、修改、保存、另存源程序非常方便。

说明:也可在WIDNDOWS环境下用记事本编辑源文件,在保存时,保存类型应选择所有文件,不能选择文本文件(*.txt),否则在编译时会找不到源文件的。

(3).编辑新文件:a、在EDIT编辑器中输入汇编源程序。

b、检查输入有无错误。

c、打开文件菜单FILE→选择另存为SA VE AS┅→输入文件名为:SW1.ASM→保存。

注意:保存到你自己的文件夹中d、若需要修改此文件,用FILE菜单→选择打开OPEN→输入文件名SW1.ASM,即可修改。

修改后注意重新再存盘。

(4).编辑汇编源程序a、在EDIT(或记事本)中输入源程序。

b、检查。

c、存盘。

可保存为SW1.ASM3.用汇编程序MASM将SW1.ASM文件汇编,生成SW1.OBJ目标文件。

(1).一般简单程序只需生成.OBJ文件,可键入简化命令:E:\zhangsan>MASM SW1;↙若有错误,则显示错误行号及错误性质,如:SW1.ASM(5):error A2006:undefined symbor:xxxx(2).若有错重新进入EDIT进行修改。

汇编语言上机实验

汇编语言上机实验

汇编语言上机实验主讲:左琼一、汇编程序的功能1.MASM的功能.检查语法错误,提示错误信息.产生可重定位的目标文件(.OBJ).处理各种伪指令.处理宏库,对于宏指令进行宏扩展.提供包括源程序、目标程序以及符号表在内的汇编列表文件(.LST) .提供一个夹有特定控制字符的符号交叉参考文件(.CRF)。

MASM是一个两次扫描(即从头到尾逐行阅读处理汇编源程序,直到END伪指令)的汇编程序,第一次扫描确定用户自定义符号的值,第二次扫描产生目标代码。

即两次扫描后MASM就能将源程序翻译成目标程序(.OBJ)。

DATA1 SEGMENT USE16A DD A1 ;第二遍扫描处理DATA1 ENDSDATA2 SEGMENT USE16A1 DW 125 ;第一遍扫描处理DATA2 ENDS2.其它汇编程序TASMNASM二、连接程序的功能1.连接程序LINK的功能.将指定的若干个目标模块(OBJ)和子程序库(LIB)中的子程序模块连接在一起,生成一个能够执行的文件(EXE/COM).生成一个地址分配文件(MAP),描述各段的起始地址、结束地址、大小等信息。

三、在PC机上建立、调试、运行汇编源程序的方法1.上机步骤(1)建立与修改汇编源程序文件,扩展名为.asm在WINDOWS98或WIN2000下可用记事本输入汇编源程序,然后以.asm为扩展名存盘。

(2)在DOS窗口下,汇编源文件以产生相应的目标文件(扩展名为.obj):执行命令:MASM DEMO.ASM;(简单方式)或者:MASM DEMO.ASM (交互方式)(3)在DOS窗口下,连接目标文件以建立可执行文件(扩展名为.exe)LINK DEMO; (简单方式)LINK (交互方式)LINK命令还可以连接多个目标文件:LINK DEMO1(主模块名)+DEMO2+DEMO3产生可执行文件DEMO1.EXE2.程序调试(1) 调试工具TD.EXE源代码级调试器,可以调试ASM/C等多种语言程序。

汇编上机实验报告

汇编上机实验报告

汇编上机实验报告实验名称:汇编上机实验报告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模拟器中成功执行了汇编程序,没有出现任何错误提示,并得到了预期的输出结果。

汇编语言上机实验报告

汇编语言上机实验报告

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

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

实验目的: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的和。

汇编语言上机实验

汇编语言上机实验

实验一 DOS常用命令及8088指令使用 二、实验内容
DEBUG 命令使用 :
1、打 DEBUG 进入 DEBUG 控制,显示提示苻 '_ '。 2、用命令 F100 10F 'A' 将'A'的ASCII码填入内存。 3、用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。 4、用命令 F110 11F 41 重复上二项实验,观察结果并比较。 5、用命令 E100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存 单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码? 6、用H命令检查下列各组16进制数加减结果并和你的手算结果比较: (1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH 7、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF 和AF的内容。 8、用R命令将AX,BX内容改写为1050H及23A8H。在操作时要注意提示信息,并按提示操
实验二 内存操作数及寻址方法
二、实验内容和步骤
求累加和程序: 程序: MOV BX,1000 MOV CX,10 SUB AX,AX LOP: ADD AL,[BX] AD CAH,0 INC BX J: LOOP LOP INT 3 步骤: 1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,在键入LOOP指令时LOP用实际地址 值代替。 2)用命令N AA将此程序命名为文件AA(文件名可任取)。 3)用R命令将BX:CX改为程序长度值(即最后一条指令后面的地址减去开 始地址) 4)用命令W 100将此程序存到AA命名的磁盘文件中。 5)用命令Q退出DEBUG。 6)用命令DEBUG AA再次调入DEBUG和文件AA,可用U命令检查调入程序。 若调入DEBUG时忘了加AA文件名,可用N命令和L命令将文件调入。 7)用E命令在内存地址1000H处键入16个数字 8)用命令G=100 J(J用实际地址代替),使程序运行并停在断点J上,检查 AX,BX的值是否符合你的预计值。 9)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样, 若不一样,检查程序是否有错。 10)重复G J与T,再检查AX是否正确。 11)用G命令使程序运行到结束,检查AX值是否正确。

实验三 汇编语言程序上机操作方法

实验三 汇编语言程序上机操作方法

一 T AX=0233 BX=0000 CX=0011 DX=0038 SP=0000 BP=0000 SI=0000 DI=0000 DS=0B65 ES=0B65 SS=0B75 CS=0B75 IP=000B NV UP EI PL NZ NA PO NC_ 0B75:000B CD21_ INT_____21_ ・ 在_DEBUG_状态下执行程序 一 G 8 Program terminated normally ・ 退出 DEBUG 一 Q_ 2. 比较字符串_bjchx_ 编写一程序,比较两个字符串_string1_和 _string2_所含的字符是否相同,若相同则显示‘Match’ ,否则,显 示‘No_Match’ 。 参考程序如下:(程序名:SY3-2.ASM) D_SEG SEGMENT STRING1 DB '12345' STRING2 DB '1a345' MATCHSTR DB 'MATCH$' NOMATCHSTR DB 'NO MATCH$'
实验注意事项 1.如果使用的是 MASM5.1 的汇编工具,应包括以下文件:MASM 宏汇 编程序文件 LINK 连接程序文件CREF 索引程序文件(也可不用) EDIT 全屏幕文本编辑程序(或其他文字处理系统) 2.能用宏汇编通过的汇编语言源程序与在 DEBUG状态下运行的汇编 语言程序不同,必须是一个完整的程序,有各逻辑段的定义,而在 DEBUG 状态下运行的汇编语言源程序只是其程序段。 3.连接程序 LINK 是把一个或多个独立的目标程序模块装配成一个 可重定位的可执行文件,扩展名为.EXE。 实验与思考 1. 机器语言(Machine Language)、汇编语言(Assembler Language) 和高级语言(High_Level_ Language)的区别? 2.DOS 2 号功能调用和 DOS 9号功能调用的区别? 3.利用 DEBUG 调试程序过程中,应注意什么?
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

从键盘接收两个不大于5 的十进制数字,并以十进制数据形式显示其和。

编程提示:该程序中要求的均为一位数据的输入输出,暂时不考虑多位数据,请输入0~5 之间的数据,显示的结果为0~9。

请不要输入两个5,以免出现不能直接输出的情况。

data segmentdata endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov ah,01hint 21hmov bl,alsub bl,30h ;将输入的数字变成16进制数后放在bl中;为了实现bl与cl的16进制数相加mov dl,10 ;换行(10表示换行)mov ah,02hint 21h;mov dl,13 ;回车(13表示回车,为的是让换行之后光标移到行首);mov ah,02h;int 21hmov ah,01hint 21hmov cl,alsub cl,30h;将输入的数字变成16进制数后放在cl中mov dl,10mov ah,02hint 21h;mov dl,13;mov ah,02h;int 21hadd cl,bladd cl,30hmov dl,clmov ah,02hint 21hmov ax,4c00hint 21hcode endsend start1、试编写程序,完成下面公式的计算。

A ←(X-Y+24)/ Z的商,B ←(X-Y+24)/ Z的余数其中,变量X和Y是32位有符号数,变量A、B、Z是16位有符号数。

DATA SEGMENTX DD 12345HORG 10HY DD 12345HORG 20HZ DW 12HORG 30HA DW ?B DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AX,WORD PTR X ;将X低四位放入AX中MOV DX,WORD PTR X+2 ;将X高四位放入DX中SUB AX,WORD PTR Y ;X和Y的低四位相减(不考虑借位)SBB DX,WORD PTR Y+2 ;X和Y的高四位相减(考虑借位)ADD AX,24ADC DX,0 ;只是将进位加入到DX中IDIV ZMOV A,AX ;存放商到AMOV B,DX ;存放余数到BMOV AX,4C00HINT 21HCODE ENDSEND START2 、试将字节数据B1 拆分成两个半字节数据,分别存放于其后两个单元X 和Y 中。

编程提示:数据段定义应包含B1、X、Y 三个变量,其中B1 变量自定义具体的数值,X、Y 变量的数值由程序赋值,分别是B1 的高低半个字节。

该程序中需要使用逻辑操作完成半字节数据的拆分。

DATA SEGMENTB1 DB 12HX DB ?Y DB ?DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV AL,B1MOV CL,4SHR AL,CLMOV X,ALMOV AL,B1AND AL,0FHMOV Y,ALMOV AX,4C00HINT 21HCODE ENDSEND START1、试编写程序,完成以下功能。

(1)程序执行时,显示提示信息“Please input a string(length<9):”,由用户输入一个长度小于9的字符串;(2)然后显示提示信息“Please input the index of the char to display:”,请用户指定该串中的某个字符的位置号;(3)程序将用户指定位置的字符显示出来。

例如:用户输入一个字符串“ABCDEFG”,然后指定的位置号为2,则屏幕显示字符“C”。

注意:这里的位置号从0开始。

注意:以上功能的实现不要求程序做控制判断,在字符串输入时,由人为控制字符串长度小于9;在指定位置号时,由人为控制输入的位置号是合法的。

2、试使用分支结构和循环结构程序完善上面的程序功能。

(1)对用户输入的字符串进行长度检查,若长度大于9,则要求用户重新输入;(2)用户在指定位置号时,进行判断,若输入非法(位置号大于实际字符串长度),则提示用户重新输入;(3)统计用户输入的字符串中特定字符的数目并显示。

可先指定特定字符进行统计,然后再由用户指定字符进行统计。

DATA SEGMENTINMESS DB "Please input a string(length<9):$"TIPSMESS DB "Please input the index of the char to display:$"STR1 DB 20,?,20 DUP('$')X DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART:MOV AX,DATAMOV DS,AXL1: LEA DX,INMESSMOV AH,09HINT 21H;提示输入字符串LEA DX,STR1MOV AH,0AHINT 21H ;输入字符串MOV DL,10MOV AH,02HINT 21HMOV DL,13MOV AH,02HINT 21H ;换行回车CMP STR1+1,8JA L1;比较输入的字符串长度是否大于8 L2: LEA DX,TIPSMESSMOV AH,09HINT 21H ;提示输入位置MOV AH,01HINT 21H ;输入位置SUB AL,30HMOV CL,ALMOV DL,10MOV AH,02HINT 21HMOV DL,13MOV AH,02HINT 21H ;换行回车mov bl,str1+1DEC blCMP CL,blJA L2;判断指定位置是否超出MOV BL,CLMOV BH,0MOV AL,STR1[BX+2]MOV DL,ALMOV AH,02HINT 21Hmov dl,10mov ah,02hint 21hmov ah,01hint 21hXOR CX,CXMOV CL,str1[1]MOV BX,-1MOV DL,0l3: inc bxcmp al,str1[bx+2]jnz l4l4:LOOP l3ADD DL,30HMOV CL,DLMOV DL,0AH ;回车换行MOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HMOV DL,CLMOV AH,2INT 21HMOV AX,4C00HINT 21HCODE ENDSEND START实验四:1、已知无符号字数组LIST 的第一个字数据为其元素个数,其后数据按由小到大的顺序保存。

试将某无符号字数据X 插入数组LIST 的正确位置,并修改元素个数。

编程提示:该程序中要将X 插入递增数组,需要和数组中每一个数据值进行大小比较,找到合适位置保存X。

数据比较的方式:(1)从前向后比较:找到小于X 的数据后,移动该数据及其后面的所有元素,将X 存放到腾出的单元中;(2)从后向前比较:找到大于X 的数据后,直接将该数据向后移动一个数据的位置,直到找到小于X 的数据,将X 保存到当前空出位置上程序如下:DATA SEGMENTLIST DW 5,12,13,15,16,17ORG 20HA1 DW 14DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AX,A1MOV CX,LISTMOV BX,CXBEGIN: MOV DX,LIST[BX]CMP AX,DXJA LPMOV LIST[BX+2],DXLP1: sub BX,2LOOP BEGINLP: MOV LIST[BX+2],AXADD LIST,1MOV AX,4C00HINT 21HCODE ENDSEND START2、试用子程序实现以下要求。

题目:从键盘接收若干个一位十进制数值(0~9),并以十进制数据形式显示其和。

要求:(1)用子程序实现一位十进制数值的输入;(2)当用户未输入数值,直接回车时,结束输入;(3)输出的数据为多位十进制数据,而机器内部计算的和是十六进制形式,需要进行数制转换,然后以字符串的形式输出结果;(4)程序中要求有必要的提示信息。

例如:用户在提示信息下输入三个数值:Please input a number:5Please input a number:3Please input a number:4程序显示运算结果The sum is:123、试用子程序改进以上题目。

题目:从键盘接收若干个N位的十进制数值(0~65535),并以二进制、十进制、十六进制三种数制形式显示其和(假定多个数据和不超过65535)。

要求:(1)用子程序实现一个N位十进制数值的输入,在主程序的循环结构中调用该子程序;(2)当用户未输入数值,直接回车时,结束输入;(3)输出的数据为多位十进制数据,而机器内部计算的和是十六进制形式,需要进行数制转换,然后以十进制字符串的形式输出结果;(4)程序中要求有必要的提示信息。

例如:用户在提示信息下输入三个数值:Please input a number:15Please input a number:30Please input a number:45程序显示运算结果The sum is:0101 1010B 90D 5AHDATA SEGMENTX DW 0NUM DB 6, ? ,6 DUP('$')STR1 DB "Please input a number:$"STR2 DB "The sum is: $"sumB DB 20,0,20 DUP('$')sunD DB 20,0,20 DUP('$')sumH DB 20,0,20 DUP('$')DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX , DATAMOV DS , AXCALL INPUTNUMLEA DX,STR2 ;输出结果MOV AH,09HINT 21HCALL getTwo ;二进制表示CALL getTen ;十进制CALL getSixtin ;十六进制表示MOV AX , 4C00HINT 21H;功能,多个多位十进制数的输入,并且实现了这几个数的数值相加;实际上这个是两个循环嵌套,;入口参数:NUM;出口参数:X (X是多个数据相加之后的和,字数据,之后可以除以2、10、16,依次转化相应进制)INPUTNUM PROCPUSH AXPUSH BXPUSH CXPUSH DXPUSH SIAGAIN:LEA DX,STR1;提示输入信息MOV AH,09HINT 21HLEA DX,NUMMOV AH,0AHINT 21HCALL CHANGECMP NUM[2],0DHJZ exit;初始化操作,以下内嵌套的循环是要将接受的多位十进制数转化为与之相对应的值mov si,0 ;串指针初始化mov bx,10 ;基数10,乘数mov ax,0 ;累加结果初值mov cl,num+1mov ch,0 ;cx是循环的次数jcxz LP1 ;若串长度为0,直接跳过此内循环LP: mul bxmov dl,num[si+2]sub dl,30hmov dh,0add ax,dxinc siloop LPLP1: add x,axJMP AGAIN ;外循环,接收多个数据exit:POP SIPOP DXPOP CXPOP BXPOP AXRETINPUTNUM ENDP;名字:CHANGE;功能:回车换行CHANGE PROCPUSH DXPUSH AXMOV DL,0AH ;回车换行MOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HPOP DXPOP AXRETCHANGE ENDP;功能:将二进制数输出;入口参数:X;出口参数:getTwo PROCPUSH AXPUSH BXPUSH CXPUSH DXMOV CX,2MOV BX,2MOV AX,XMOV sumB[1],0LP: MOV DX,0DIV CX ;商在AX,余数在DX中MOV sumB[BX],DLINC BXINC sumB[1];记录长度CMP AX,0JA LP;倒序输出XOR CX,CXMOV CL,sumB[1]MOV BX,CXAGAIN:MOV DL,sumB[BX+1]ADD DL,30HMOV AH,02HINT 21HDEC BXLOOP AGAINMOV DL,'B'MOV AH,02INT 21HMOV DL,' 'MOV AH,02INT 21HPOP DXPOP CXPOP BXPOP AXRETgetTwo ENDP;功能:将十进制数输出;入口参数:X;出口参数:getTen PROCPUSH AXPUSH BXPUSH CXPUSH DXMOV CX,10MOV BX,2MOV AX,XMOV sunD[1],0LP: MOV DX,0DIV CX ;商在AX,余数在DX中MOV sunD[BX],DLINC BXINC sunD[1];记录长度CMP AX,0JA LP;倒序输出XOR CX,CXMOV CL,sunD[1]MOV BX,CXAGAIN:MOV DL,sunD[BX+1]ADD DL,30HMOV AH,02HINT 21HDEC BXLOOP AGAINMOV DL,'D'MOV AH,02INT 21HMOV DL,' 'MOV AH,02INT 21HPOP DXPOP CXPOP BXPOP AXRETgetTen ENDP;功能:将十六进制数输出;入口参数:X;出口参数:getSixtin PROCPUSH AXPUSH BXPUSH CXPUSH DXMOV CX,16MOV BX,2MOV AX,XMOV sumH[1],0LP: MOV DX,0DIV CX ;商在AX,余数在DX中MOV sumH[BX],DLINC BXINC sumH[1];记录长度CMP AX,0JA LP;倒序输出XOR CX,CXMOV CL,sumH[1]MOV BX,CXAGAIN:MOV DL,sumH[BX+1]CMP DL,9JA NEXTADD DL,30HMOV AH,02HINT 21HJMP theEndNEXT:ADD DL,37HMOV AH,02HINT 21HtheEnd:DEC BXLOOP AGAINMOV DL,'H'MOV AH,02INT 21HPOP DXPOP CXPOP BXPOP AXRET getSixtin ENDP CODE ENDS END START。

相关文档
最新文档