汇编实验报告
汇编代码.386将十进制按位转换成为二进制互相转化实验报告
汇编代码.386将十进制按位转换成为二进制互相转化实验报告全文共四篇示例,供您参考第一篇示例:引言汇编语言是一种底层的计算机语言,它直接面向计算机的硬件和指令集架构。
在计算机科学领域中,对汇编语言的理解和掌握是非常重要的,因为它可以帮助程序员更深入地理解计算机系统的工作原理。
本文将围绕着汇编语言中的十进制到二进制的转换,展开一项实验报告,通过编写汇编代码.386实现十进制和二进制的相互转换,并对实验结果进行分析和总结。
实验目的1. 了解汇编语言中的数据处理、位操作等基本概念和指令;2. 掌握利用汇编语言将十进制数字转换为二进制数,并将二进制数转换为十进制数的方法;3. 加深对计算机底层原理的理解,提高汇编语言编程能力。
实验过程1. 十进制转为二进制我们使用汇编语言编写代码,将给定的十进制数字转换为二进制数。
我们可以选择一个整数N作为输入,然后使用位操作指令将其转换为对应的二进制数。
在汇编语言中,可以使用移位操作来实现这一转换。
我们可以将整数N的每一位通过移位操作得到对应的二进制位,直到整个数转换完成。
2. 二进制转为十进制接下来,我们利用汇编语言编写代码,实现将给定的二进制数转换为十进制数的功能。
对于一个二进制数,我们可以通过相应的位操作和乘法操作将其转换为对应的十进制数。
具体来说,我们可以取得二进制数的每一位,并将其乘以相应位数的权值,然后求和得到十进制数。
实验结果在实验过程中,我们成功地编写了汇编代码.386来实现十进制和二进制的相互转换。
通过实际的测试和验证,我们得到了正确的转换结果。
这证明了我们的汇编代码在功能上是正确的,能够准确地进行十进制和二进制之间的转换。
实验总结通过这次实验,我们深入探讨了汇编语言中的数据处理和位操作等基本概念。
我们不仅了解了如何使用汇编语言进行十进制和二进制的转换,还加深了对计算机底层原理的理解。
我们也发现了汇编语言在实现这种功能上的高效性和灵活性。
结论本次实验通过汇编代码.386将十进制按位转换成为二进制,并实现了二进制到十进制的互相转化。
【实验】汇编实验报告
【关键字】实验实验一汇编程序的汇编及运行1.实验目的和要求(1)熟悉汇编程序的汇编、连接、执行过程(2)生成LST文件,查看LST文件(3)生成OBJ文件,修改语法错误(4)生成EXE文件(5)执行2.实验环境IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS 2.0以上;调试程序:;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录(1)将数据段输入,取名1.txt,保存在MASM文件夹下。
生成LST文件,(不必连接、运行)用EDIT查看1.LST文件。
试回答:DA1,DA2的偏移量分别是多少?COUNT的值为多少?DA TA SEGMENTORG 20HNUM1=8NUM2=NUM1+10HDA1 DB ‘IBM PC’DA2 DB 0AH, 0DHCOUNT EQU $-DA1DATA ENDSEND(2)输入有错误的文件,修改错误语句。
(MASM没有出现错误即可。
不必连接、运行。
)DA TA SEGMENTV AR1 DB 0, 25, ODH, 300V AR2 DB 12H, A4H, 6BHV AR3 DB ’ABCDEF’V AR4 DW 1234H, 5678HV AR5 DW 10H DUP(?)DATA ENDSCODE SEGMENTASSUME CS: CODE, DE: DA TABEING MOV AX, DA TAMOV DS, AXLEA SI, V AR5MOV BX, OFFSET V AR2MOV [SI], 0ABHMOV AX, V AR1+2MOV [BX], [SI]MOV V AR5+4, V AR4MOV AH, 4CHINT 21HCODE ENDSEND START(3)输入正确的程序,汇编、连接、运行STACKS SEGMENT STACKDW 128 DUP(?)STACKS ENDSDATAS SEGMENTSTRING DB ‘WELCOME!’, 13, 10, ‘$’DATAS ENDSCODES SEGMENTASSUME CS: CODES, DS: DATAS START:MOV AX, DA TASMOV DS, AXLEA DX, STRINGMOV AH, 9INT 21HMOV AH, 4CHINT 21HCODES ENDSEND START 1.算法描述及实验步骤1.(1)生成1.st文件(2)用EDIT查看文件2.修改后正确算法:DATA SEGMENTV AR1 DB 0, 25, 0DH, 30V AR2 DB 12H, 0A4H, 6BHV AR3 DB 'ABCDEF'V AR4 DW 1234H, 5678HV AR5 DW 10H DUP(?)DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATA BEING: MOV AX, DATAMOV DS, AXLEA SI, V AR5MOV BX, OFFSET V AR2MOV byte ptr[SI], 0ABHMOV AL, V AR1+2MOV AX, [SI]MOV [BX], AXMOV AX, V AR4MOV V AR5+4, AXMOV AH, 4CHINT 21HCODE ENDSEND BEING5.调试过程1.程序没有错误,结果:2.程序运行出现错误:问题及改正:(1). 2.asm(2): error A2009: Symbol not defined: ODH 表示没有定义ODH;出错语句VAR1 DB 0, 25, ODH, 300,这里的 ODH应该为 16进制数的0DH。
汇编语言实验7实验报告
汇编语言实验7实验报告一、实验目的本次实验旨在通过汇编语言编写程序,实现对字符串的操作和输出。
二、实验内容1. 编写一个汇编程序,要求从键盘输入一个字符串,并将其逆序输出到屏幕上;2. 编写一个汇编程序,要求从键盘输入两个字符串,并将它们拼接起来后输出到屏幕上。
三、实验过程1. 字符串逆序输出程序首先,需要从键盘输入一个字符串。
为了方便起见,我们可以先规定字符串的最大长度为100。
接着,我们需要定义两个变量:```buffer db 100 ; 用于存储输入的字符串length dw ? ; 存储输入的字符串长度```其中,db代表定义字节型变量,dw代表定义双字节型变量。
然后,我们需要使用INT 21H中断来读取用户输入的字符串。
具体而言,我们可以使用下面这段代码:```mov ah, 0Ah ; 设置INT 21H功能号为0Ahmov dx, offset buffer ; 将buffer的地址传给DX寄存器int 21h ; 调用INT 21H中断```该代码会将用户输入的字符串存储在buffer中,并且将其长度存储在length变量中。
接着,我们需要将该字符串逆序输出到屏幕上。
为了实现这个功能,我们可以使用栈来存储字符串中的每个字符,并逐个弹出来输出。
具体而言,我们可以使用下面这段代码:```mov si, offset buffer + 1 ; 将si寄存器指向字符串的第一个字符mov cx, length ; 将cx寄存器设置为字符串长度dec cx ; 字符串长度需要减1reverse:push byte ptr [si] ; 将当前字符压入栈中inc si ; 指向下一个字符loop reverse ; 循环直到所有字符都被压入栈中mov ah, 02h ; 设置INT 21H功能号为02h,表示输出一个字符print:pop dx ; 弹出栈顶元素int 21h ; 输出该字符loop print ; 循环直到所有字符都被弹出并输出完毕```2. 字符串拼接程序首先,需要从键盘输入两个字符串。
汇编语言实验报告_6
青岛理工大学课程实验报告
课程名称汇编语言程序设计班级实验日期
2013.11.3
姓名学号实验成绩
实验
名称
子程序
实验目的及要求1.掌握子程序设计相关指令和伪指令的使用方法
2.掌握子程序设计方法, 特别是参数传递方法
3.掌握主程序和子程序之间的调用关系和调用方法
4.熟悉循环和子程序结合应用解答问题的思路
实验环境1.命令行方式
2.MASM.EXE LINK.EXE DEBUG.EXE
实验内容1.设DATA1开始的内存单元中, 存放着一串带符号字数据, 要求采用冒泡排序算法(Bubble Sort)按照从小到大的顺序排序并将排好序的数据存在DATA1开始的单元。
然后在显示器输出排好序的数据, 中间用’,’隔开。
2.输出数据使用子程序方式。
算法描述及实验步骤步骤:
(1)设置数据段地址
(2)设置堆栈段地址
(3)设置堆栈指针
(4)调用9号功能, 输出一个提示性字符串。
(5)循环进入子程序, 输出原始数据。
(6)在子程序内循环输出每一位的十进制数字。
(7)主程序进行内外循环, 进行冒泡排序。
(8)再一次调用子程序输出排序后的结果。
调试过程及实验结果调试过程:
(2)(1)在输出时, 调用DOS 9号功能, 并不是只要语句MOV AH,09H
(3)它是存在入口条件的, 入口条件:DS:DX=输出字符缓冲区首地址。
所以前面必须加上MOV DX,OFFSET NOTE1。
(4)汇编语言是不会再输出汉字的。
(5)子程序结束时一定要有RET
(6)冒泡排序也遇到一些困难。
调试结果:。
汇编语言实验报告
实验报告一:汇编语言实验基础一.实验目的:1. 熟悉汇编语言程序的开发过程以及汇编语言常用软件的使用方法2. 掌握DEBUG常用命令的使用方法二、实验内容:1.DEBUG 命令使用2.8088常用指令练习三、实验步骤:(一)DEBUG 命令使用:1、打 DEBUG 进入 DEBUG 控制,显示提示符'_ '。
2、用命令 F 100 10F 'A' 将'A'的ASCII码填入内存。
3、用命令 D 100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。
4、用命令 F 110 11F 41 重复上二项实验,观察结果并比较。
5、用命令 E 100 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,347FH7、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF 和AF的内容。
8、用R命令将AX,BX内容改写为1050H及23A8H。
(二)8088常用指令练习1、传送指令1)用A命令在内存100H处键入下列内容:MOV AX,1234MOV BX,5678XCHG AX,BXMOV AH,35MOV AL,48MOV DX,75ABXCHG AX,DX2)用U命令检查键入的程序,特别注意左边的机器码。
3)用T命令逐条运行这些指令,注意有关寄存器及IP的变化情况。
并注意标志位有无变化。
2、加减法指令:1)用A命令在内存100H处键入下列内容:MOV AH,34MOV AL,22ADD AL,AHSUB AL,78MOV CX,1284MOV DX,5678ADD CX,DXSUB CX,AXSUB CX,CX2)用U命令检查键入的程序及对应的机器码。
汇编数码显示及键盘实验实验报告
数码显示及键盘实验【实验内容】1、数码管显示0-72、独立按键识别【需要了解的知识】1、GPIO设定2、数码管动态扫描显示原理,键盘扫描工作原理,输入与输出及其处理【实验预习】仔细预读实验指导电子文档的实验六、七及其前面的实验流程【实验设备】Keil C51软件、ICE52 仿真驱动、MEFlash编程软件、USB驱动程序【实验过程】实验一数码管显示0-7实验任务:1)先将“0-7”数码管的段码值写入存储器中,使8位数码管从右至左显示0-7.实验步骤:1)首先在硬盘上建立一个文件夹;2)启动Keil C51软件;3)执行Keil C51软件的菜单“Project|New Project……”,弹出一个名为“Create New Project”的对话框。
输入工程文件名,选择保存路径uv2后缀,点击“保存”按钮;4)紧接着弹出“Options for Target‘Target 1’”,为刚才的项目选择ATMEL的AT89S52的CPU。
选择之后,点击“确定”按钮;5)接下来弹出一个对话框提示你是否要把标准8051的启动代码添加项目中去,此时,点击“否”按钮;6)执行菜单“File|New……”,出现一个名为“Text1”的文档。
接着执行菜单“File|Save”弹出一个名为“Save As”的对话框,将文件名改为“.asm”后缀,然后保存;7)添加源程序文件到工程中,一个空的源程序文件建成。
单击Keil C51软件左边项目工作窗口“Target1”上的“+”,将其展开。
然后右击“Source Group1”文件夹弹出下拉菜单,单击其中的“Add Files to Group‘Source Group1’”项;8)在弹出的对话框中先选择文件类型为“Asm Source file(*.s*;*.src;*.a*)”,这时对话框内创建的空的源程序文件已经出现在项目工作窗口的“Source Group1”文件夹中;输入源程序代码;9)点击工具栏“Options for target”按钮,弹出一个对话框,定义“Xtal”为11.0592.下面依序是存储模式、程序空间大小等设置,均用默认值即可。
汇编语言程序设计实验报告
二、实验内容
P131作业29。
实验三子程序设计实验
一、实验目的
1.掌握汇编语言源程序子程序设计方法;
2.会使用CV软件工具。
二、实验内容
把实验二作为子程序,编写主程序来对能否构成三角形进行10判断。
实验四宏汇编程序设计实验
一、实验目的
1.掌握宏汇编程序编程技术及宏调用的方法;
2.主模块程序完成子程序的调用,及判断结果的显示,程序名为:ZHU.asm。
实验五混合程序的开发实验
一、实验目的
1.了解混合调用中的参数设置;
2.掌握混合调用的方法;
二、实验内容
P156第5题。
实验一单指令功能测试实验
一、实验目的
1.会使用DEBUG软件;
2.利用DEBUG单步执行功能测试指令的执行。
二、实验内容
判断从键盘输入的ASCII码数字,若是小于等于5,显示“C”,若是大于5显示“D”。假设输入的只可能是0~9数字。
实验二完整的汇编语言程序设计实验
一、实验目的
1.掌握完整的汇编语言源程序的设计方法;
实验五多模块程序设计实验
一、实验目的
1.掌握汇编段的属性的含义;
2.掌握利用LINK将多模块连接起来的方法;
3.掌握利用库文件将多模块连接起来的方法。
二、实验内容
假设内存单元中有三个字a、b和c,编写一个程序,它可判断它们能否构成一个三角形,若能,显示“Y”,否则,显示“N”;
具体要求:
1.三角形的判断程序为一模块子程序,程序名为:ABC.asm。入口参数:字节变量a、b、c。出口参数:字节变量d=1是三角形,d=0不是三角形。
2.了解COM文件的编程方法及特点;
汇编实验报告
实验三算术运算与代码转换程序设计一、实验目的1掌握算术运算程序的设计方法..2掌握代码转换程序的设计方法..3进一步掌握各种程序结构..4熟练掌握和使用用DEBUG调试程序..二、实验内容1编制两个多字节整数加法和减法程序;并将结果按十六进制形式显示在屏幕上..2编制程序实现二进制定点数与十进制数的ASCII码串之间转换;并将结果显示在屏幕上..3编写程序计算从键盘输入两个不超过四位的十进制数的和、差、积、商;并以十进制形式输出..4写程序把从键盘输入的四位十六进制数转换为压缩的BCD码;并显示输出..5编写一通用过程用来将十进制数从键盘输入转换为P从键盘输入进制数..三、实验设备PC机一台四、实验步骤1 按程序流程图编制实验程序..2 输入源程序..3 汇编、连接程序;执行程序;检查结果..4 程序的执行可用DEBUG的G命令;也可用T命令单步跟踪执行..5 用D命令检查执行结果..六、源程序实验一DA TA SEGMENTNUM1 DB 22H;33H;44H;55H;66H;77H NUM1L DB 6HNUM2 DB 22H;22H;22H;22HNUM2L DB 4HOUTCOME1 DB 10H DUP0OUTCOME2 DB 10H DUP0N DB 0HDA TA ENDSSTACK1 SEGMENT PARA STACKDW 20H DUP0STACK1 ENDSCODE SEGMENTASSUME CS:CODE;DS:DATA;SS:STACK1 START:MOV AX;DA TAMOV DS;AXMOV CH;0MOV SI;OFFSET NUM1MOV DI;OFFSET NUM2MOV AH;NUM1LMOV AL;NUM2LCMP AH;ALJAE CHAXCHG SI;DIXCHG AH;ALCHA:SUB AH;ALMOV CL;ALCLCMOV BX;OFFSET OUTCOME1LOP1:MOV AL;DIPUSH CXMOV CL;SIADC CL;ALMOV BX;CLINC BXINC SIINC DIPOP CXLOOP LOP1MOV CL;AHLOP2:PUSH CXMOV CL; BYTE PTR SIADC CL;0MOV BX;CLPOP CXINC BXINC SILOOP LOP2LOP3:MOV CH;0MOV SI;OFFSET NUM1MOV DI;OFFSET NUM2MOV AH;NUM1LMOV AL;NUM2LCMP AH;ALJAE CHA1XCHG SI;DIXCHG AH;ALCHA1:SUB AH;ALMOV CL;ALCLCMOV BX;OFFSET OUTCOME2 LOP11:MOV AL;DIPUSH CXMOV CL;SISBB CL;ALMOV BX;CLINC BXINC SIINC DIPOP CXLOOP LOP11MOV CL;AHJCXZ LOP7LOP21:PUSH CXMOV CL; BYTE PTR SISBB CL;0MOV BX;CLPOP CXINC BXINC SILOOP LOP21LOP7:MOV DI;OFFSET OUTCOME1 ADD DI;10HLOP4: MOV DL;DIDEC DICMP N;0HJNE LOP5CMP DL;0HJE LOP9LOP5:PUSH DXPUSH CXMOV CL;4HSHR DL;CLPOP CXCMP DL;9HJBE LOP6ADD DL;7HLOP6:ADD DL;30HMOV AH;2INT 21HMOV N;1HPOP DXAND DX;0FHCMP DL;9HJBE LOP8ADD DL;7HLOP8:ADD DL;30HMOV AH;2INT 21HMOV DL;'H'MOV AH;2INT 21HLOP9:LOOP LOP4MOV N;0MOV DI;OFFSET OUTCOME2 ADD DI;10HMOV CX;11HLOP14: MOV DL;DIDEC DICMP N;0HJNE LOP15CMP DL;0HJE LOP19LOP15:PUSH DXPUSH CXMOV CL;4HPOP CXCMP DL;9HJBE LOP16ADD DL;7HLOP16:ADD DL;30HMOV AH;2INT 21HMOV N;1HPOP DXAND DX;0FHCMP DL;9HJBE LOP18ADD DL;7HLOP18:ADD DL;30HMOV AH;2INT 21HMOV DL;'H'MOV AH;2INT 21HLOP19:LOOP LOP14MOV AH;4CHINT 21HCODE ENDSEND START实验2DA TA SEGMENTTISHI1 DB 'Please enter the first number:';'$' TISHI2 DB 'Please enter the second number:';'$' JIA DB '+';'$'JIAN DB '-';'$'CHENG DB '*';'$'CHU DB '/';'$'DENG DB '=';'$'YU DB '......';'$'A DB 10B DW 10C DW 10000F DW 0HNUM1 DW 0HNUM2 DW 0HN1 DB 4HDA TA ENDSSTACK1 SEGMENT STACKDW 30H DUP0STACK1 ENDSCODES SEGMENTASSUME CS:CODES;DS:DATASTART:MOV AX;DA TAMOV DS;AXMOV DX;OFFSET TISHI1MOV AH;09HINT 21HLOOP2:MOV AX;NUM1MUL BMOV BX;AXMOV AH;1INT 21HCMP AL;0DHJE LOP1MOV NUM1;BXMOV AH;0SUB AL;30HADD NUM1;AXJMP LOOP2LOP1:MOV DL;0AH 输出换行和回车MOV AH;2INT 21HMOV DL;0DHMOV AH;2INT 21HMOV DX;OFFSET TISHI2MOV AH;09HINT 21HLOOP1:MOV AX;NUM2MUL BMOV BX;AXMOV AH;1INT 21HCMP AL;0DHJE LOP3MOV NUM2;BXMOV AH;0SUB AL;30HADD NUM2;AXJMP LOOP1LOP3:MOV DL;0AH 输出换行和回车MOV AH;2INT 21HMOV DL;0DHMOV AH;2INT 21HMOV N;0MOV DX;NUM1MOV F;DXLOP6:MOV DX;0HMOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOP7MOV F;AXJMP LOP6LOP7:MOV CL;NMOV CH;0LOP16:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOP16MOV DX;NUM2MOV F;DXMOV N;0MOV DX;OFFSET JIAMOV AH;09H INT 21HLOOOP6:MOV DX;0HMOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOOOP7MOV F;AXJMP LOOOP6LOOOP7:MOV CL;NMOV CH;0LOOOP16:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOOOP16MOV DX;OFFSET DENGMOV AH;09HINT 21HMOV N;0LOOP3:MOV AX;NUM1ADD AX;NUM2MOV F;AXLOOP4:MOV DX;0HMOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOOP5MOV F;AXJMP LOOP4LOOP5:MOV CL;NMOV CH;0LOOP0:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOOP0MOV DL;0AH 输出换行和回车MOV AH;2INT 21HMOV DL;0DHMOV AH;2INT 21HMOV N;0MOV DX;NUM1MOV F;DXLOP61:MOV DX;0HMOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOP71MOV F;AXJMP LOP61LOP71:MOV CL;NMOV CH;0LOP161:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOP161MOV DX;NUM2MOV F;DXMOV N;0MOV DX;OFFSET JIANMOV AH;09H INT 21H LOOOP61:MOV DX;0HMOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOOOP71MOV F;AXJMP LOOOP61LOOOP71:MOV CL;NMOV CH;0LOOOP161:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOOOP161MOV DX;OFFSET DENGMOV AH;09HINT 21HMOV N;0MOV N;0MOV AX;NUM1SUB AX;NUM2MOV F;AXAND AX;10000000BCMP AX;10000000BJNE LOOP6NEG FLOOP6:MOV DX;0MOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOOP7MOV F;AXJMP LOOP6LOOP7:MOV CL;NMOV CH;0LOOP16:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOOP16MOV DL;0AH 输出换行和回车MOV AH;2INT 21HMOV DL;0DHMOV AH;2INT 21HMOV N;0MOV DX;NUM1MOV F;DXLOP62:MOV DX;0HMOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOP72MOV F;AXJMP LOP62LOP72:MOV CL;NMOV CH;0LOP162:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOP162MOV DX;NUM2MOV F;DXMOV N;0MOV DX;OFFSET CHENGMOV AH;09HINT 21HMOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOOOP72MOV F;AXJMP LOOOP62LOOOP72:MOV CL;NMOV CH;0LOOOP162:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOOOP162MOV DX;OFFSET DENGMOV AH;09HINT 21HMOV N;0MOV AX;NUM1MUL NUM2DIV CPUSH DXMOV F;AXMOV N;0LOOP8:MOV DX;0MOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOOP9MOV F;AXJMP LOOP8LOOP9:MOV CL;NMOV CH;0LOOP17:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOOP17MOV N;0POP FMOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOOP11MOV F;AXJMP LOOP10LOOP11:MOV AL;NCMP AL;4HJE LOOP20MOV AL;4HSUB AL;NMOV CL;ALMOV CH;0LOOP19:MOV DX;'0'MOV AH;2INT 21HLOOP LOOP19LOOP20:MOV CL;NMOV CH;0LOOP18:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOOP18MOV DL;0AH 输出换行和回车MOV AH;2INT 21HMOV DL;0DHMOV AH;2INT 21HMOV N;0MOV DX;NUM1MOV F;DXLOP64:MOV DX;0HMOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOP74MOV F;AXJMP LOP64LOP74:MOV CL;NMOV CH;0LOP164:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOP164MOV DX;NUM2MOV F;DXMOV N;0MOV DX;OFFSET chuMOV AH;09HINT 21HLOOOP64:MOV DX;0HMOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOOOP74MOV F;AXJMP LOOOP64LOOOP74:MOV CL;NMOV CH;0LOOOP164:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOOOP164MOV DX;OFFSET DENGMOV AH;09HINT 21HMOV N;0MOV AX;NUM1MOV DX;0DIV NUM2PUSH DXMOV F;AXMOV N;0LOOP15:MOV DX;0MOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOOP12MOV F;AXJMP LOOP15LOOP12:MOV CL;NMOV CH;0LOOP21:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOOP21MOV DX;OFFSET YUMOV AH;09HINT 21HPOP FMOV N;0LOOP13:MOV DX;0MOV AX;FDIV BPUSH DXINC NCMP AX;0HJE LOOP14MOV F;AXJMP LOOP13LOOP14:MOV CL;NMOV CH;0HLOOP22:POP DXADD DX;30HMOV AH;2INT 21HLOOP LOOP22MOV AH;4CHINT 21HCODES ENDSEND START实验五输入输出程序设计一、实验目的1 掌握输入输出程序的编写方法..2 熟悉系统功能调用的方法..3 熟悉动画程序的编写方法..二、实验内容1在CRT上每隔一秒连续显示字符0-9..编程提示为了使输出的字符之间有空格;在每一个循环中输出一个0-9的字符和一个空格..为了输出0-9;置寄存器BL初值为0;每循环一次使其增量..为了保证输出是十进制;增量后用DAA调整指令..由于输出为一位十进制数;用AND 0FH 指令屏蔽高4位..2用系统功能调用将‘HELLO’由键盘输入;再从屏幕输出‘***HELLO***’..3编制在屏幕上画线的子程序;调用该子程序画一矩形..4编制字母下落一行的子程序;调用该子程序使字母从屏幕顶部下落到底部..5创建一磁盘文件;保存从键盘输入的字符串..6编写程序用设置系统时间;首先从键盘以十进制数形式输入时间;然后修改系统时间;并重新以十进制形式显示时间..7编写程序将屏幕分割成格状;每一格涂上不同颜色;格数从键盘输入..8编写程序在屏幕上显示菜单;输入相应菜单的序号后;选种该菜单项..三、实验设备PC机一台四、实验步骤1 按程序流程图编制实验程序..2 输入源程序..3 汇编、连接程序;执行程序;检查结果..4)程序的执行可用DEBUG的G命令;也可用T命令单步跟踪执行..五、源程序实验五EXAM5-1STACK SEGMENT STACKDB 1024 DUP0STACK ENDSCODE SEGMENTASSUME CS:CODE;SS:STACKSTART:MOV BL; 0LP:MOV DL; 20HMOV AH; 2INT 21HMOV AL; BLADD AL; 0DAAAND AL; 0FHMOV BL; ALPUSH BXOR AL; 30HMOV DL; ALMOV AH; 2INT 21HMOV BX; 3E8HLP2:MOV CX; 176H ;延时1msLP1:PUSHFPOPFLOOP LP1DEC BXJNZ LP2POP BXINC BLJMP LPCODE ENDSEND START执行程序EXAM5-1·EXE;屏幕上依次循环显示一个数字一个空格:0 1 2 3 4 5 6 7 8 9 ……实验五EXAM5-2STACK SEGMENT STACKDB 1024 DUP0STACK ENDSDATA SEGMENTBUFF DB 6;7 DUP ;‘$’DATA ENDSINPUT MACRO BUFEMOV DX; OFFSET BUFEMOV AH; 0AHINT 21HENDMPUTCHAR MACRO CHARMOV DL; CHARMOV AH; 02HINT 21HENDMCODE SEGMENTASSUME CS:CODE;DS:DA TA;SS:STACK START:MOV AX; DATAMOV DS; AXINPUT BUFF ;读取字符串➝BUFFPUTCHAR 0DHPUTCHAR 0AH ;光标另起一行MOV CX; 0003HNEXT:PUTCHAR 2AHLOOP NEXTMOV CL; BUFF+1SUB CH; CHMOV BX; OFFSET BUFF+2BEGIN:MOV AL; BXPUTCHAR ALINC BXLOOP BEGINMOV CX; 0003HNEXT1:PUTCHAR 2AHLOOP NEXT1MOV AH; 4CHINT 21HCODE ENDSEND START执行程序EXAM5-2·EXE;输入HELLO↙屏幕上显示结果:*** HELLO ***实验五 EXAM5-5NAME EXAM6SSTACK SEGMENT STACK ’stack’DB 1024 DUPSSTACK ENDSDATA SEGMENTASKNAME DB 0DH;0AH;’Enter the’DB ’dest file name:$’ASKCONT DB 0DH;0AH;’Enter the string’DB ’as file content:’0dh;0ah;’$’ FILEBUF DB 62;63DUPHAND_D DWMSGMER DB 0DH;0AH;0AHDB ’Directory full’;0DH;0AH;’$’ MSGWER DB 0DH;0AH;0AHDB ’Disk full’;0DH;0AH;’$’ MSGSUC DB 0DH;0AH;0AH;DB ’Write file is Successful’DB 0DH;0AH;’$’DATA ENDSDISPLY MACRO TEXTMOV DX;OFFSET TEXTMOV AH;09HINT 21HENDMCRHAND MACRO PATH;ATTRMOV DX;OFFSET PATH ;文件名MOV CL;ATTR ;文件属性XOR CH;CHMOV AH;3CHINT 21HENDMWRHAND MACRO HAND;BUFF;BYTEMOV BX;HANDMOV DX;OFFSET BUFFADD DX;2MOV CL;BYTEXOR CH;CHMOV AH;40HINT 21HENDMCLHAND MACRO HANDMOV BX;HANDMOV AH;3EHINT 21HENDMCODE SEGMENTPROG PROC FARASSUME CS:CODE;DS:DATA;SS:SSTACKPUSH DSMOV AX;0PUSH AXMOV AX;DATAMOV DS;AXDISPLY ASKNAME ;提示输入文件名MOV DX;OFFSET FILEBUFMOV AH;0AHINT 21HMOV DI;OFFSET FILEBUF2MOV BL;FILEBUF1XOR BH;BHMOV BYTE PTRBXDI;00HCRHAND FILEBUF2;0 ;创建并打开新文件JC CRTERRMOV HAND_D;AX ;存文件句柄DISPLY ASKCONT ;提示键入文件内容MOV DX;OFFSET FILEBUFMOV AH;0AHINT 21HWRHAND HAND_D;FILEBUF;FILEBUF1JC WRITERRCLHAND HAND_DDISPLY MSGSUCJMP EXITCRTERR:DISPLY MSGMERJMP EXITWRITERR:DISPLY MSGWEREXIT:RETPROG ENDPCODE ENDSEND PROG。
汇编实验报告一实验总结
汇编实验报告一实验总结
实验报告一:汇编实验总结
实验目的:通过汇编实验,掌握汇编语言的基本语法和编程技巧,加深对计算
机底层工作原理的理解。
实验过程:在实验中,我们首先学习了汇编语言的基本语法和指令格式,包括
寄存器的使用、内存地址的访问、算术运算和逻辑运算等。
随后,我们进行了
一系列的编程练习,包括编写简单的程序来实现加法、乘法、比较大小等功能。
在实验的最后阶段,我们还学习了如何调用系统中断来实现输入输出操作。
实验结果:通过本次实验,我们深入了解了汇编语言的编程技巧和应用场景。
我们不仅掌握了汇编语言的基本语法,还学会了如何编写简单的汇编程序来实
现一些基本的功能。
同时,通过实验,我们对计算机底层的工作原理有了更深
入的理解,对计算机系统的运行机制有了更清晰的认识。
实验总结:本次汇编实验让我们深入了解了汇编语言的基本知识和编程技巧,
为我们今后的学习和工作打下了坚实的基础。
通过实验,我们不仅学会了如何
使用汇编语言编写程序,还对计算机系统的底层工作原理有了更深入的理解。
希望在今后的学习和工作中,我们能够继续深入研究汇编语言,不断提高自己
的编程水平,为计算机科学技术的发展贡献自己的力量。
汇编实验报告
实验一Debug程序的使用一.实验目的1.熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。
2.掌握8086/8088的寻址方式及多字节数据的处理方法。
二.实验内容1.利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。
2.分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。
要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。
三.实验过程和程序直接寻址m ov ax,[0200]mov bx,[0202]add ax,[0204]adc bx,[0206]mov[0208],axmov[020a],bx寄存器间接寻址mov si,[0200]mov di,[0204]mov bx,[0208]mov ax,[si]mov dx,2[si]add ax,[di]adc dx,2[di]mov[bx],axmov2[bx],dx四.实验结果(包括必要的截图)五.实验体会通过实验了解到汇编语言的编译、运行方法。
汇编语言的寻址方式有直接寻址,寄存器寻址,基址变址寻址,相对基址变址寻址等等,掌握这些都是编写汇编程序很重要的环节。
在编写汇编程序时,应该注意特别容易出现的错误特别是通过亲自实验,体验到了对内存、寄存器的修改和使用,加深了对内存寻址和寄存器间接寻址的理解,正确认识了在寄存器名中加入“[]”的作用。
实验二汇编语言程序设计(顺序、循环)一.实验目的1.掌握顺序和循环程序结构和设计方法;2.熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。
二.实验内容1.X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。
汇编语言实验报告
汇编语言实验报告一、实验目的本次汇编语言实验的主要目的是通过实际编程和调试,深入理解汇编语言的基本语法、指令系统和程序设计方法,提高对计算机底层工作原理的认识和编程能力。
二、实验环境1、操作系统:Windows 102、编程工具:MASM 615 集成开发环境三、实验内容1、简单算术运算程序设计一个程序,实现两个 16 位无符号整数的加法运算,并将结果输出显示。
分析程序的执行过程,理解加法指令和数据存储方式。
2、数据排序程序编写一个程序,对给定的一组 8 位无符号整数进行冒泡排序。
观察排序过程中数据的交换和移动,掌握循环和比较指令的应用。
3、字符串处理程序设计一个程序,实现字符串的复制、比较和查找操作。
熟悉字符串操作指令和内存访问方式。
四、实验步骤1、简单算术运算程序定义数据段,存储两个待相加的整数。
在代码段中,使用加法指令 ADD 进行运算,并将结果存储在指定的内存单元。
通过输出指令将结果显示在屏幕上。
2、数据排序程序定义数据段,初始化待排序的整数数组。
在代码段中,使用两层循环实现冒泡排序算法。
比较相邻的两个元素,如果顺序错误则进行交换。
输出排序后的数组。
3、字符串处理程序定义数据段,分别存储源字符串和目标字符串。
使用字符串复制指令 MOVS 实现字符串的复制。
利用比较指令 CMPS 进行字符串的比较。
通过扫描指令 SCAS 查找指定的字符。
五、实验结果与分析1、简单算术运算程序输入两个整数,如 100 和 200,程序输出结果为 300,运算正确。
通过调试工具观察寄存器和内存的变化,进一步理解了加法运算的实现过程。
2、数据排序程序对于给定的数组5, 3, 1, 8, 2,排序后输出为1, 2, 3, 5, 8,排序结果符合预期。
分析循环次数和数据交换的位置,加深了对冒泡排序算法的理解。
3、字符串处理程序字符串复制操作成功,源字符串被准确地复制到目标字符串中。
字符串比较结果正确,能够准确判断两个字符串的相等与否。
汇编语言顺序程序设计实验报告
实验名称:汇编语言顺序程序设计实验报告实验目的:通过本次实验,学生能够掌握使用汇编语言编写顺序程序的基本方法,理解汇编语言的基本结构和运行机制。
实验内容:1. 汇编语言基础知识1.1 汇编语言的概念1.2 汇编语言的特点1.3 汇编语言的应用领域2. 汇编语言程序设计2.1 程序设计的基本流程2.2 程序设计的基本步骤2.3 汇编语言程序设计的规范与技巧3. 实验步骤3.1 确定实验题目和要求3.2 分析实验任务,设计程序流程图3.3 编写汇编程序3.4 调试程序,确保程序正确运行3.5 编写实验报告4. 实验报告要求4.1 实验题目4.2 实验目的4.3 实验内容和步骤4.4 程序设计思路和实现方法4.5 实验结果分析和讨论4.6 实验心得体会实验过程:1. 确定实验题目和要求本次实验的题目为“汇编语言顺序程序设计”,要求学生使用汇编语言编写一个顺序程序,实现指定的功能要求。
2. 分析实验任务,设计程序流程图在开始编写汇编程序之前,我们首先要明确实验的功能需求,然后设计程序的流程图,规划程序的整体结构。
3. 编写汇编程序在设计好程序流程后,根据汇编语言的语法规则,编写相应的程序代码,并确保程序的逻辑正确,语法无误。
4. 调试程序,确保程序正确运行编写完成程序后,需要对程序进行调试,逐步检查程序运行过程中的各个环节,发现并修复可能存在的错误。
5. 编写实验报告我们需要撰写本次实验的实验报告,详细记录实验的整体过程,包括程序设计思路、程序实现方法、实验结果分析和讨论,以及实验心得体会。
实验结果分析和讨论:经过本次实验,我们掌握了汇编语言顺序程序设计的基本方法和技巧,了解了汇编语言程序设计的规范和要求。
在实验过程中,我们遇到了一些问题和困难,但通过不懈的努力和团队合作,最终成功完成了实验任务,并取得了令人满意的成绩。
实验心得体会:通过本次实验,我们深刻认识到汇编语言在计算机领域中的重要性和应用价值,同时也意识到汇编语言程序设计的复杂性和技术挑战。
汇编实验一 实验报告
实验一查看CPU和内存用机器指令和汇编指令编程
一、实验目的
1.掌握debug的使用方法,会用基本的D,R命令查看、显示内存和寄存器
2.了解汇编指令编程的方法。
二、实验任务
1检查在存储器低端的BIOS数据区的内容。
(1)检查串行与并行端口
(2)检查系统设备
(3)检查键盘Shift状态
(4)检查显示状态
2 考察ROM BIOS
目的:检查在存储器高端的ROM BIOS中的数据。
(1)检查版本通告
(2)检查ROM BIOS数据
3.用D、R命令查看、显示内存和寄存器,可对寄存器内容进行修改。
三、实验结果及分析
1、检查在存储器低端的BIOS数据区的内容
(1)检查串行与并行端口
说明:检查后发现有四个串行端口,分别是03F8、02F8、03E8、02E8;并行端口也有四个,分别是03BC、03BC、0378、0278、9FC0
(2)检查系统设备
(3)检查键盘Shift状态
(4)检查显示状态
2、考察ROM BIOS (1)检查版本通告
(2)检查ROM BIOS数据
3、用D、R命令查看、显示内存和寄存器,可对寄存器内容进行修改
四、实验总结(心得、体会)
1、通过对检查在存储器低端的BIOS数据区的内容的查看,可以了解计算机的各种状态,而考察ROM BIOS可以鉴定计算机的出厂信息。
2、通过用D、R命令查看、显示内存和寄存器,可以了解计算机运行的过程步骤,并且可以通过偏移地址读取内容。
3、在读取时需要注意的是,在DEBUG显示中是低位至高位的显示,而我们需要的是高位至低位的显示方式,所以在操作时对于双字节的读取,需要将前后字节地址内容互换。
汇编语言编程实验报告
汇编语言编程实验报告汇编语言程序设计实验报告(一)汇编语言程序设计实验报告(一)一、预备知识汇编语言程序设计是一门实践性很强的课程。
编写程序、上机调试、运行程序是进一步学习和掌握汇编语言程序设计的必要手段。
二、实验目的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.了解汇编语言的语句与机器语言的指令之间的对应关系,了解伪指令在汇编过程中的作用。
3.学习教学机监控程序的功能、监控命令的使用方法,体会软件系统在计算机组成中的地位和作用。
【实验内容】1.学习联机使用TH-UNION+教学实验系统和仿真终端软件PCEC.2.使用监控程序的R命令显示/修改寄存器内容、D命令显示存储器内容、E命令修改存储器内容。
3.使用A命令写一小段汇编程序,U命令反汇编刚输入的程序,用G命令连续运行该程序,用T、P命令单步运行并观察程序单步执行情况;【实验内容】1.用R命令查看寄存器内容或修改寄存器的内容1)在命令行提示符状态下输入:R↙;显示寄存器的内容注:寄存器的内容在运行程序或执行命令后会发生变化。
2)在命令行提示符状态下输入:R R0↙;修改寄存器R0的内容,被修改的寄存器与所赋值之间可以无空格,也可有一个或数个空格2.用D命令显示存储器内容在命令行提示符状态下输入:D 2000↙3. 用E命令修改存储器内容在命令行提示符状态下输入:E 2000↙4.用D命令显示这几个单元的内容D 2000↙可以看到这六个地址单元的内容变为0000 1111 2222 3333 4444 5555。
5. 用A命令键入一段汇编源程序,主要是向累加器送入数据和进行运算,执行程序并观察运行结果。
1)在命令行提示符状态下输入:A 2000↙;表示该程序从2000H(内存RAM区的起始地址)地址开始2)用U命令反汇编刚输入的程序在命令行提示符状态下输入:U 2000↙在相应的地址会得到输入的指令及其操作码3)用G命令运行前面键入的源程序G 2000↙4)用P或T命令,单步执行这段程序,观察指令执行结果在命令行提示符状态下输入:T 2000↙<12020:MVRD R2,00OA2022:MVRD R0,00302024:OUT 802025:DEC R22026:JRZ 202E2027:PUSH R02028:IN 812029:SHR R0202A:JRNC 2028202B:POP R0202C:INC R0202D:JR 2024202E:RET202F:↙<2(2100) MVRD R2,001AMVRD R0,0041(2104) OUT 80DEC R2JRZ 210EPUSH R0(2108)IN 81SHR R0JRNC 2108POP R0INC R0JR 2104(210E)RET【实验结果】<1屏幕上输出'0'到'9'十个数字符<2屏幕上显示“A”~“Z”26个英文字母【实验过程中遇到的问题以及解决办法】在验证例3的实验时,输入语句“JC 2053”,执行时系统一直提示有错误,无法进行运算查表得知语句中没有JC ,只有JRC,所以修改语句即可解决。
汇编实验一实验报告
汇编实验一实验报告一、实验目的本次汇编实验一的主要目的是熟悉汇编语言的基本语法和编程环境,通过实际编写和调试简单的汇编程序,加深对计算机底层工作原理的理解,并提高解决问题的能力。
二、实验环境1、操作系统:Windows 102、编程工具:MASM(Microsoft Macro Assembler)三、实验内容1、数据存储与操作定义不同类型的数据变量,如字节(BYTE)、字(WORD)和双字(DWORD)。
对这些数据进行赋值、运算和输出。
2、流程控制使用条件跳转指令(如 JE、JNE 等)实现简单的分支结构。
运用循环指令(如 LOOP )编写重复执行的代码段。
3、子程序调用编写具有特定功能的子程序,并在主程序中进行调用。
四、实验步骤1、数据存储与操作实验在代码中使用`DB` (定义字节)、`DW` (定义字)和`DD` (定义双字)指令定义变量,例如:```assemblyDATA1 DB 10HDATA2 DW 2000HDATA3 DD 40000000H```对定义的数据进行加法、减法等运算,并将结果存储在新的变量中。
使用`MOV` 指令将数据输出到屏幕上。
2、流程控制实验设定条件,根据条件的满足与否执行不同的代码段。
例如:```assemblyMOV AX, 10MOV BX, 20CMP AX, BXJE EQUALJNE NOT_EQUALEQUAL:;执行当 AX 等于 BX 时的代码MOV DX, 'E'JMP END_CONDITIONNOT_EQUAL:;执行当 AX 不等于 BX 时的代码MOV DX, 'N'END_CONDITION:;后续的通用代码```使用循环指令实现重复操作,如计算 1 到 10 的累加和:```assemblyMOV CX, 10MOV AX, 0LOOP_START:ADD AX, CXLOOP LOOP_START```3、子程序调用实验编写一个计算两个数之和的子程序,例如:```assemblySUM PROCMOV AX, BP + 4ADD AX, BP + 6RETSUM ENDP```在主程序中调用该子程序,并传递参数进行计算。
(最新版)汇编实验报告汇总
湖北工程学院计算机与信息科学学院实验报告2013—2014学年第_二学期课程名称:汇编语言程序设计班级:_______________________学号:_________________姓名:___________ 雷震_______________ 任课教师:叶从欢_____________实验一:顺序结构一、实验目的:1.加深对汇编的理解;2.掌握汇编程序的设计方法;3.学会使用顺序结构。
二、实验内容:定义变量A、B、C、D,编写程序实现:(a * b + c - 70 )/ a。
并将最后的商保存在D中,余数保存在D+2中。
本实验中:a = 15, b = 75, c = 70 。
程序中,定义字型变量A、B、C、D。
A B、C分别保存算数表达式中的数值a、b、c,D保存算数运算的最终结果。
程序开始,先将变量A、B、C赋初值,计算A乘以B的值,将结果保存在DX AX中,然后逐步计算A*B+C, A*B+C-70和(A*B+C-70)/A。
最后计算结果的商保存在A对,余数保存在D对,最终将AX赋值给D, DX赋值给D+2。
程序运行完毕,程序返回。
三、实验步骤1.程序设计流程图2.调试与运行(1)首先进入DO系统,进入目标文件所在的系统盘和文件夹;(2)输入“ MASM TEST,此命令是调用宏汇编程序MAS对源文件TEST.AS进行编译,TES■是文件的名称,生成目标文件TEST.OBJ(3)若汇编无错误,则用命令“ LINK TEST进行连接,生成可执行文件TEST.EXE(4)若连接成功,则用命令“ TEST运行四•总结与体会通过这次实验,我初步了解了汇编程序设计的基本方法和步骤,掌握了汇编程序设计的顺序结构。
顺序结构是其他结构的基础,学好顺序结构对进一步学习汇编的好处不言而喻。
在本程序中,主要分为加法,减法,乘法,除法,本程序基本实现了四则运算的功能,该程序所完成的运算式为:(a * b + c - 70 )/ a。
汇编实验报告
实验一汇编程序的汇编及运行1.实验目的和要求(1)熟悉汇编程序的汇编、连接、执行过程(2)生成LST文件,查看LST文件(3)生成OBJ文件,修改语法错误(4)生成EXE文件(5)执行2.实验环境IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS 2.0以上;调试程序:;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录(1)将数据段输入,取名1.txt,保存在MASM文件夹下。
生成LST文件,(不必连接、运行)用EDIT查看1.LST文件。
试回答:DA1,DA2的偏移量分别是多少?COUNT的值为多少?DA TA SEGMENTORG 20HNUM1=8NUM2=NUM1+10HDA1 DB ‘IBM PC’DA2 DB 0AH, 0DHCOUNT EQU $-DA1DA TA ENDSEND(2)输入有错误的文件,修改错误语句。
(MASM没有出现错误即可。
不必连接、运行。
)DA TA SEGMENTV AR1 DB 0, 25, ODH, 300V AR2 DB 12H, A4H, 6BHV AR3 DB ’ABCDEF’V AR4 DW 1234H, 5678HV AR5 DW 10H DUP(?)DA TA ENDSCODE SEGMENTASSUME CS: CODE, DE: DA TABEING MOV AX, DA TAMOV DS, AXLEA SI, V AR5MOV BX, OFFSET V AR2MOV [SI], 0ABHMOV AX, V AR1+2MOV [BX], [SI]MOV V AR5+4, V AR4MOV AH, 4CHINT 21HCODE ENDSEND START(3)输入正确的程序,汇编、连接、运行STACKS SEGMENT STACKDW 128 DUP(?)STACKS ENDSDA TAS SEGMENTSTRING DB ‘WELCOME!’, 13, 10, ‘$’DA TAS ENDSCODES SEGMENTASSUME CS: CODES, DS: DA TAS START:MOV AX, DA TASMOV DS, AXLEA DX, STRINGMOV AH, 9INT 21HMOV AH, 4CHINT 21HCODES ENDSEND START1.算法描述及实验步骤1.(1)生成1.st文件(2)用EDIT查看文件2.修改后正确算法:DATA SEGMENTV AR1 DB 0, 25, 0DH, 30V AR2 DB 12H, 0A4H, 6BHV AR3 DB 'ABCDEF'V AR4 DW 1234H, 5678HV AR5 DW 10H DUP(?)DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DA TA BEING: MOV AX, DA TAMOV DS, AXLEA SI, V AR5MOV BX, OFFSET VAR2MOV byte ptr[SI], 0ABHMOV AL, V AR1+2MOV AX, [SI]MOV [BX], AXMOV AX, VAR4MOV V AR5+4, AXMOV AH, 4CHINT 21HCODE ENDSEND BEING5.调试过程1.程序没有错误,结果:2.程序运行出现错误:问题及改正:(1). 2.asm(2): error A2009: Symbol not defined: ODH 表示没有定义ODH;出错语句VAR1 DB 0, 25, ODH, 300,这里的 ODH应该为 16进制数的0DH。
汇编实验报告
实验一(1)熟悉汇编语言程序调试环境及顺序程序设计一、实验目的及要求:1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。
2.学会使用EDIT、MASM、LINK、DEBUG等软件工具。
3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。
二、熟悉汇编语言程序调试环境1.汇编语言源程序的建立本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。
设定源程序的文件名为ABC。
DATA SEGMENTBUF DB 23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FHCN EQU $-BUFDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: PUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV BX,OFFSET BUFMOV CX,CNDEC CXMOV AL,[BX]INC BXLP: CMP AL,[BX]JBE NEXTMOV AL,[BX]NEXT: INC BXDEC CXJNZ LPMOV AH,4CHINT 21HCODE ENDSEND START键入以下命令:C:\>EDIT ABC.ASM此时屏幕的显示状态如图1所示。
图1 用EDIT编辑ABC.ASM程序窗口程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。
2.将源程序文件汇编成目标程序文件一般情况下,MASM汇编程序的主要功能有以下3点:(1)检查源程序中存在的语法错误,并给出错误信息。
(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。
(3)若程序中使用了宏指令,则汇编程序将展开宏指令。
源程序建立以后,在DOS状态下,采用宏汇编程序MASM对源程序文件进行汇编,其操作过程如图2所示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
现代微机原理与接口技术(汇编部分)实验报告学号:09008123 姓名:郭晨成绩:东南大学计算机科学与工程学院二〇一〇年十二月目录实验20 (3)实验23 (4)实验22 (6)实验13 (8)13_1 (8)13_2 (9)13_3 (11)13_4 (13)实验14 (15)实验24 (17)实验201.实验题目编写完整程序,利用DOS系统功能调用,从键盘输入一个字符串,将其从屏幕上换行后输出。
2.解题思路缓冲区的第3个字节开始存放输入的字符,前2个字节位置分别放缓冲区长度和字符串实际字符数。
3.程序清单DATA SEGMENTN EQU 20MAXLEN DB NACTLEN DB ?STRING DB N DUP(?)CR DB 0AH,0DH,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AH,0AHMOV DX,OFFSET MAXLENINT 21HMOV BL, ACTLENMOV BH,0MOV STRING[BX],'$'MOV DX,OFFSET CRMOV AH,09HINT 21HMOV DX,OFFSET STRINGMOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START4.结果截屏实验231.题目假设CX:BX中存放了4位非压缩型BCD码表示的十进制数4386,请编写完整程序将这个数转换为二进制数放到DI寄存器中。
2.解题思路先将CX:BX中的非压缩BCD码转换成压缩BCD码放入SI,将SI从高位开始每次移出4位放入DI,然后AX乘以10,将DI加到AX中,这样就把压缩BCD码的每一位分离出来并表示成二进制数。
最后把AX中的内容放入DI。
3.程序清单CODE SEGMENTASSUME CS:CODESTART:MOV CX,0403HMOV BX,0806HXOR AX,AXMOV CL,4SHL CH,CLADD AH,CHADD AH,CLSHL BH,CLADD AL,BHADD AL,BLMOV SI,AXXOR AX,AXMOV CX,4 AGAIN1:MOV DI,0PUSH CXMOV CX,4 AGAIN2:SHL SI,1RCL DI,1LOOP AGAIN2MOV CX,10MUL CXADD AX, DIPOP CXLOOP AGAIN1MOV DI,AXMOV AH,4CHINT 21H CODE ENDSEND START 4.结果截屏实验221.题目已知数据段有以下定义:NUM DW 3750STRING DB 5 DUP(20H),'$' ; 20H为空格的ASCII码在屏幕上以十进制的形式将NUM这个数打印出来,可以借助STRING字符串。
2.解题思路将NUM存入AX中,然后不断除以10,分离出余数,余数加上30H后变为ASCII码从后往前存入STRING中,然后将STRING打印出来。
3.程序清单DATA SEGMENTNUM DW 3750STRING DB 5 DUP(20H),'$' ; 20H为空格的ASCII码DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AX,NUMMOV SI,OFFSET STRINGADD SI,4AGAIN:MOV DX,0MOV BX,10DIV BXADD DL,30HMOV [SI],DLDEC SICMP AX,0JZ PRINTLOOP AGAIN PRINT:MOV DX,OFFSET STRINGMOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START4.结果截屏实验1313_11.题目请编写完整程序在一个升序字节数组中查找N,找到后将此数从数组中删除,并使得CF=0;没找到返回CF=1。
数组的首地址和末地址为A_HEAD和A_END。
2.解题思路初始化置CF=1,从数组的第一个元素开始扫描,如果等于待查找的数据,则置CF=0,然后从这个元素的后一个元素开始,每个元素往前移一位,这样就删除了找到的这个元素。
若扫描到最后一个元素仍为找到N,则程序结束。
3.程序清单DATA SEGMENTARRAY DB 0,1,2,3,4,5,6,7,8,9COUNT EQU $-ARRAYA_HEAD EQU ARRAYA_END EQU ARRAY+COUNTDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV SI,OFFSET ARRAYMOV DX,COUNTMOV BL,6STCAGAIN:MOV AL,ARRAY[SI]INC SICMP AL,BLJZ DONECMP SI,DXJZ EXITJMP AGAINDONE:CLCMOV DI,SIDEC A_ENDDEL:MOV AL,ARRAY[DI]MOV ARRAY[DI-1],ALCMP DI,DXJZ EXITINC DIJMP DELETEXIT:MOV AH,4CHINT 21HCODE ENDSEND START4.结果截屏程序刚开始,数据段1473:0000 – 1473:000AH的数据为0 1 2 3 4 5 6 7 8 9;待查找的数是5,程序结束时,该数据段的数据变为0 1 2 3 4 6 7 8 9:13_21.题目已知字符串string包含有256BYTE的内容,将其中所有'$'替换成空格(‘’)。
2.解题思路以SI作为寻址指针对该字符串逐个扫描,与‘$’比较,如果相等则替换为空格。
当SI 等于256时退出。
3.程序清单DATA SEGMENTSTRING DB 32 DUP('AB$CD$E$')DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AL,'$'MOV AH,' 'MOV SI,OFFSET STRINGMOV CX,256SCAN:CMP [SI],ALJNZ NEXTMOV [SI],AHNEXT:CMP SI,CXJZ EXITINC SIJNZ SCANEXIT:MOV AH,4CHINT 21HCODE ENDSEND START4.结果截屏13_31.题目现在有一字符串STRING,包含有16个字节的内容,请编写程序段,判断该字符串其是否为回文字符串。
2.解题思路SI和DI分别从字符串的串首和串尾逐个扫描并比较字符,若发现不相等则打印“No”并退出;直到SI小于或等于DI时,打印“Yes”并退出。
3.程序清单DATA SEGMENTSTRING DB 'live on time , emit no evil'MSG1 DB 'NO','$'MSG2 DB 'YES','$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV SI,0MOV DI,OFFSET MSG1SUB DI,OFFSET STRINGDEC DISCAN:MOV AL,STRING[SI]MOV AH,STRING[DI]CMP AL,AHJNZ S1INC SIDEC DICMP SI,DIJA S2JMP SCANS1: MOV DX,OFFSET MSG1MOV AH,09HINT 21HJMP EXITS2: MOV DX,OFFSET MSG2MOV AH,09HINT 21HJMP EXITEXIT:MOV AH,4CHINT 21HCODE ENDSEND START4.结果截屏13_41.题目统计以‘$’字符结束的字符串string的字符个数。
2.解题思路从串首开始逐个扫描并计数,直到遇到‘$’结束。
最后把统计到的数字转换为ASCII码写在字符串的后面。
3.程序清单DATA SEGMENTSTRING DB 'GUOCHEN$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV SI,OFFSET STRINGMOV AL,'$'MOV CX,0SCAN:CMP [SI],ALJZ DONEINC SIINC CXJMP SCANDONE:MOV AX,CXADD AL,30HMOV AH,0EHINT 10HMOV AH,4CHINT 21HCODE ENDSEND START4.结果截屏实验141.题目请编写完整程序从键盘读取字符,如果是十进制的‘0’-‘9’则在屏幕上输出该数的8位二进制码,并将数字依次放到BUF开头的数组中,如果读入的字符时‘Q’或者‘q’,则程序退出,其它情况在屏幕上打印“You must input 0~9, or ‘q’ or ‘Q’”。
2.解题思路键盘读取的ASCII经判断后,若是0~9则减30H,然后不断除以2,将其转换为二进制存于BUF中,并在屏幕上打印出来。
3.程序清单DATA SEGMENTMSG DB 'You must input 0~9, or "q" or "Q"','$'BUF DB ' ',8 DUP('0'),'$'DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AH,01HINT 21HCMP AL,'Q'JZ EXITCMP AL,'q'JZ EXITCMP AL,'0'JB ERRCMP AL,'9'JA ERRMOV SI,OFFSET BUFADD SI,8MOV BL,2SUB AL,30HBIN:MOV AH,0DIV BLADD AH,30HMOV BYTE PTR[SI],AHDEC SICMP AL,0JNZ BINMOV DX,OFFSET BUFMOV AH,09HINT 21HJMP EXITERR:MOV DX,OFFSET MSGMOV AH,09HINT 21HEXIT:MOV AH,4CHINT 21HCODE ENDSEND START4.结果截屏实验241.题目利用递归程序,计算N!。