汇编实验报告(安工大纪平老师)
汇编语言程序设计实验报告
汇编语言程序设计实验报告汇编语言程序设计实验报告引言:汇编语言是计算机中最基本的语言,通常用于处理硬件相关问题。
在这个实验中,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
以下是我们的实验报告。
正文:1. 实验环境我们使用的实验环境是Intel 8086微处理器与高级汇编语言。
微处理器使用的是PCB-512主板,而高级汇编语言是MASM。
2. 实验目的我们的实验目的主要是学习汇编语言的基础知识和编程技巧,包括了汇编语言的寄存器、指令、内存管理等方面的知识。
我们的另一个目的是掌握汇编语言的常用编程技巧,能够独立完成一些简单的汇编程序。
3. 实验内容我们的实验内容主要包括以下几点:(1)学习汇编语言的基础知识,包括寄存器、指令、内存管理等方面的知识。
(2)掌握汇编语言的常用编程技巧,包括数据输入输出、运算、跳转等基本操作。
(3)实践用汇编语言编写程序,如计算器、菜单等实用程序。
(4)了解8086微处理器的结构和原理。
4. 实验过程在这个实验过程中,我们完成了以下几个程序:(1)计算器计算器是一个简单的程序,主要用于实现两个数之间的加、减、乘、除等基本运算。
我们通过输入输出指令、存储指令等指令实现了这个程序的功能。
(2)菜单菜单是一个实用程序,主要用于展示一个简单的菜单并实现用户选择相关功能的功能。
我们使用了汇编语言中的跳转指令、输入输出指令等实现了这个程序。
5. 实验结果在我们的实验中,我们成功完成了上述两个程序。
我们通过输入输出指令、存储指令等指令实现了这个程序的功能。
6. 实验总结在这个实验过程中,我们学习汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
我们通过编写计算器和菜单等简单实用程序,加深了对汇编语言的理解和认识。
我们认为这个实验对我们今后的学习和工作都有很大的帮助。
结论:通过这个实验,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
汇编实验报告
《汇编实验报告》摘要:DX,NUM1,AX,NUM1,AH,2实验三算术运算与代码转换程序设计一、实验目的1)掌握算术运算程序的设计方法。
2)掌握代码转换程序的设计方法。
3)进一步掌握各种程序结构。
4)熟练掌握和使用用 DEBUG 调试程序。
二、实验内容1 1 )编制两个多字节整数加法和减法程序,并将结果按十六进制形式显示在屏幕上。
2)编制程序实现二进制定点数与十进制数的 ASCII 码串之间转换,并将结果显示在屏幕上。
3)编写程序计算从键盘输入两个不超过四位的十进制数的和、差、积、商,并以十进制形式输出。
4)写程序把从键盘输入的四位十六进制数转换为压缩的 BCD 码,并显示输出。
5)编写一通用过程用来将十进制数(从键盘输入)转换为 P(从键盘输入)进制数。
三、实验设备PC 机一台四、实验步骤1) 按程序流程图编制实验程序。
2) 输入源程序。
3) 汇编、连接程序,执行程序,检查结果。
4) 程序的执行可用 DEBUG 的 G 命令,也可用 T 命令单步跟踪执行。
5) 用 D 命令检查执行结果。
六、源程序实验一 DATA SEGMENT NUM1 DB 22H,33H,44H,55H,66H,77H NUM1L DB 6HNUM2 DB 22H,22H,22H,22HNUM2L DB 4HOUTCOME1 DB 10H DUP(0) OUTCOME2 DB 10H DUP(0)N DB 0HDATA ENDSSTACK1 SEGMENT PARA STACKDW 20H DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1 START:MOV AX,DATAMOV 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 OUTCOME1 LOP1:MOV AL,[DI] PUSH CXMOV CL,[SI]ADC CL,ALMOV [BX],CLINC BXINC SIINC DIPOP CXLOOP LOP1MOV CL,AHJCXZ LOP3LOP2:PUSH CXMOV CL, BYTE PTR [SI] ADC CL,0MOV [BX],CLPOP CXINC BXINC SILOOP LOP2LOP3:MOV CH,0MOV SI,OFFSET NUM1 MOV DI,OFFSET NUM2 MOV AH,NUM1LMOV AL,NUM2LCMP AH,ALJAE CHA1XCHG SI,DIXCHG AH,ALCHA1:SUB AH,ALMOV CL,ALCLCMOV BX,OFFSET OUTCOME2 LOP11:MOV AL,[DI]PUSH CXMOV CL,[SI]SBB CL,ALMOV [BX],CLINC BXINC SIINC DIPOP CXLOOP LOP11MOV CL,AH JCXZ LOP7LOP21:PUSH CXMOV CL, BYTE PTR [SI]SBB CL,0MOV [BX],CLPOP CXINC BXINC SILOOP LOP21LOP7:MOV DI,OFFSET OUTCOME1 ADD DI,10HMOV CX,11HLOP4: MOV DL,[DI] DEC DICMP N,0HJNE LOP5CMP DL,0HJE LOP9LOP5:PUSH DX PUSH CXMOV CL,4HSHR DL,CLPOP CXCMP DL,9HJBE LOP6ADD DL,7HLOP6:ADD DL,30H MOV AH,2INT 21HMOV N,1HPOP DXAND DX,0FH CMP DL,9HADD DL,7HLOP8:ADD DL,30HMOV AH,2INT 21HMOV DL,"H"MOV AH,2INT 21HLOP9:LOOP LOP4MOV N,0MOV DI,OFFSET OUTCOME2 ADD DI,10H MOV CX,11HLOP14: MOV DL,[DI]DEC DICMP N,0HJNE LOP15CMP DL,0HJE LOP19LOP15:PUSH DXPUSH CXMOV CL,4HPOP CXCMP DL,9HJBE LOP16ADD DL,7HLOP16:ADD DL,30H MOV AH,2INT 21HMOV N,1HPOP DXAND DX,0FHCMP DL,9HJBE LOP18ADD DL,7HLOP18:ADD DL,30H MOV AH,2INT 21HMOV DL,"H"MOV AH,2INT 21HLOP19:LOOP LOP14MOV AH,4CHINT 21HCODE ENDSEND START验实验 2DATA 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 0HN DB 0HN1 DB 4HDATA ENDSSTACK1 SEGMENT STACK DW 30H DUP(0)STACK1 ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATA START:MOV AX,DATA MOV DS,AXMOV DX,OFFSET TISHI1 MOV AH,09HINT 21HLOOP2:MOV AX,NUM1 MUL 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 21H MOV DX,OFFSET TISHI2 MOV AH,09HINT 21HLOOP1:MOV AX,NUM2 MUL B MOV 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,0DH MOV AH,2INT 21HMOV N,0MOV DX,NUM1 MOV F,DXLOP6:MOV DX,0H MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOP7MOV F,AXJMP LOP6LOP7:MOV CL,NLOP16:POP DX ADD DX,30HMOV AH,2INT 21HLOOP LOP16MOV DX,NUM2 MOV F,DXMOV N,0MOV DX,OFFSET JIA MOV AH,09HINT 21HLOOOP6:MOV DX,0H MOV AX,F DIV B PUSH DXINC NCMP AX,0HJE LOOOP7MOV F,AXJMP LOOOP6 LOOOP7:MOV CL,NLOOOP16:POP DX ADD DX,30HMOV AH,2INT 21HLOOP LOOOP16 MOV DX,OFFSET DENG MOV AH,09HINT 21HMOV N,0LOOP3:MOV AX,NUM1 ADD AX,NUM2MOV F,AXLOOP4:MOV DX,0H MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOP5MOV F,AXLOOP5: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,0 MOV DX,NUM1 MOV F,DXLOP61:MOV DX,0H MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOP71MOV F,AXJMP LOP61LOP71:MOV CL,N MOV CH,0LOP161:POP DX ADD DX,30HMOV AH,2INT 21HLOOP LOP161MOV DX,NUM2 MOV F,DXMOV N,0MOV DX,OFFSET JIAN MOV AH,09HINT 21HLOOOP61:MOV DX,0H MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOOP71MOV F,AXJMP LOOOP61 LOOOP71:MOV CL,N MOV CH,0LOOOP161:POP DX ADD DX,30HMOV AH,2INT 21HLOOP LOOOP161 MOV DX,OFFSET DENG MOV AH,09HINT 21HMOV N,0 MOV N,0 MOV AX,NUM1SUB AX,NUM2MOV F,AXAND AX,10000000BCMP AX,10000000B JNE LOOP6NEG FLOOP6:MOV DX,0 MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOP7MOV F,AXJMP LOOP6 LOOP7:MOV CL,N MOV CH,0LOOP16:POP DX ADD DX,30H MOV AH,2INT 21HLOOP LOOP16 MOV DL,0AH输出换行和回车INT 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,0 LOP162:POP DX ADD DX,30HMOV AH,2LOOP LOP162MOV DX,NUM2MOV F,DXMOV N,0MOV DX,OFFSET CHENG MOV AH,09HINT 21HLOOOP62:MOV DX,0H MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOOP72MOV F,AXJMP LOOOP62 LOOOP72:MOV CL,N MOV CH,0LOOOP162:POP DX ADD DX,30HINT 21HLOOP LOOOP162 MOV DX,OFFSET DENG MOV AH,09HINT 21HMOV N,0MOV AX,NUM1MUL NUM2DIV CPUSH DXMOV F,AXMOV N,0LOOP8:MOV DX,0 MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOP9MOV F,AXLOOP9:MOV CL,N MOV CH,0LOOP17:POP DX ADD DX,30HMOV AH,2INT 21HLOOP LOOP17 MOV N,0POP FLOOP10:MOV DX,0H MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOP11MOV F,AXJMP LOOP10 LOOP11:MOV AL,N CMP AL,4HMOV AL,4HSUB AL,NMOV CL,ALMOV CH,0LOOP19:MOV DX,"0" MOV AH,2INT 21HLOOP LOOP19 LOOP20:MOV CL,N MOV CH,0LOOP18:POP DX ADD DX,30HMOV AH,2INT 21HLOOP LOOP18 MOV DL,0AH输出换行和回车MOV AH,2INT 21HMOV DL,0DHINT 21H MOV N,0 MOV DX,NUM1 MOV F,DXLOP64:MOV DX,0H MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOP74MOV F,AXJMP LOP64LOP74:MOV CL,N MOV CH,0LOP164:POP DX ADD DX,30H MOV AH,2INT 21HLOOP LOP164 MOV DX,NUM2MOV N,0MOV DX,OFFSET chu MOV AH,09HINT 21HLOOOP64:MOV DX,0H MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOOP74MOV F,AXJMP LOOOP64 LOOOP74:MOV CL,N MOV CH,0LOOOP164:POP DX ADD DX,30HMOV AH,2INT 21HLOOP LOOOP164MOV DX,OFFSET DENG MOV AH,09HINT 21HMOV N,0 MOV AX,NUM1 MOV DX,0DIV NUM2PUSH DXMOV F,AXMOV N,0LOOP15:MOV DX,0 MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOP12MOV F,AXJMP LOOP15LOOP12:MOV CL,N MOV CH,0LOOP21:POP DXADD DX,30HMOV AH,2INT 21HLOOP LOOP21 MOV DX,OFFSET YU MOV AH,09HINT 21HPOP FMOV N,0LOOP13:MOV DX,0 MOV AX,FDIV BPUSH DXINC NCMP AX,0HJE LOOP14MOV F,AXJMP LOOP13 LOOP14:MOV CL,N MOV CH,0H LOOP22:POP DXADD DX,30H MOV AH,2INT 21HLOOP LOOP22MOV AH,4CHINT 21HCODES ENDSEND START实验五输入输出程序设计一、实验目的1) 掌握输入输出程序的编写方法。
汇编综合性实验报告
实验报告一、实验目的《汇编语言程序设计》是计算机专业的重要的专业基础课,通过本综合性、设计性实验使学生进一步巩固课堂所学,全面熟悉、掌握8088宏汇编语言程序设计的基本方法和技巧,进一步提高编写程序、阅读分析程序及上机操作、调试程序的能力。
二、实验要求用键盘选择计算机演奏乐曲,程序运行时首先在屏幕上显示出乐曲名单,当从键盘上输入乐曲的序号时,计算机则演奏所选择的乐曲,当键盘上按下Q键时,演奏结束。
三、实验原理分析(一)发音原理计算机有两种产生声音的方法,一种方法是通过I/O指令向设备寄存器(端口地址为61H)的第1位交替送1和0,使与第1位相连的扬声器脉冲门产生连续的脉冲电流,驱动扬声器发出声音。
另一种方法是利用8254(系统定时器)中的2号定时器向扬声器发送不同频率的脉冲,使之产生音调高低不同的声音,这种产生声音的方法可使计算机演奏出各种乐曲。
本程序选用定时器产生声音。
ROM BIOS中的BEEP子程序能根据BL中给出的时间计数值控制8254定时器,产生持续时间为1个或几个0.5秒、频率为896HZ的声音。
通过对BEEP的修改,可以使其产生任一频率的声音。
用汇编语言编写的程序GENSOUND,能使PC机发出指定频率和指定延迟时间的声音,它是一个很好的通用发声程序。
组成乐曲的每个音符的频率值和持续时间是乐曲发声程序所必须的两组数据,知道了音调及频率的关系后,就可以按照乐曲的乐谱将每个音符的频率和持续时间定义成两个数据表,然后编程依次取出表中的频率值和时间值,调用GENSOUND程序发出各种声音。
但GENSOUND程序产生的声音不仅与输入频率有关,而且与CPU有关。
如果80X86的工作频率为8MHZ(如IBM PS/ 2-25型),则T=125ns(1 /8MHz=125ns),那么上面程序产生的时间延迟就要短的多。
在80286中,LOOP指令只需8个执行周期,而不是17个执行周期,这也会使延迟时间缩短很多。
安工大汇编语言实验报告(纪平)
《汇编语言》试验报告班级学号姓名指导教师实验一汇编语言运行环境及方法、简单程序设计一、实验目的:1、熟悉汇编语言运行环境和方法2、了解如何使用汇编语言的编制程序。
3、熟悉DEBUG有关命令的使用方法。
4、利用DEBUG掌握有关指令的功能。
5、利用DEBUG运行简单的程序段。
二、实验内容:编写一程序:比较两个字符串string1和string2所含的字符是否相同。
若相同则显示‘match’,否则‘No match’。
三、实验步骤:1、建立程序所需要的ASM文件,并将实验指导书中的范例程序编写好。
2、用汇编程序MASM对源文件汇编产生目标文件OBJ。
3、用链接程序LINK产生执行文件EXE。
4、执行程序。
5、使用DEBUG调试程序。
分别体会g命令、r命令、t命令、u命令、d命令以及q 命令的用法。
用-g命令来用运行程序,用-u命令来显示程序,用-d 命令来查看数据段的情况,用-e或-f 命令来修改需要改正的部分,用-t指令来逐步执行程序,用-r指令来查看寄存器和修改寄存器的值,-q命令用来退出debug程序。
在这些命令的后面加上地址,可以将命令执行到相应的地方。
在Debug中用-g运行:用-u命令显示程序:-g0b 将断点设置在指令LEA SI;之前根据其中指示的ds寄存器内容查看数据段情况:用e命令修改数据段字符串:再次运行结果:用q命令退出debug:四、程序代码:;PROGRAM TITLE GOES HERE--Compare string;****************************************************** datarea segment ;define data segmentstring1 db 'Move the cursor backward.'string2 db 'Move the cursor backward.';mess1 db 'Match.',13,10,'$'mess2 db 'No match!',13,10,'$'datarea ends;****************************************************** prognam segment ;define code segment;------------------------------------------------------mainproc farassume cs:prognam,ds:datarea,es:datareastart:;starting execution address;set up stack for returnpush ds ;save old data segmentsub ax,ax ;put zero in AXpush ax ;save it on stack;set DS register to current data segmentmov ax,datarea ;datarea segment addrmov ds,ax ;into DS registermov es,ax ;into ES register;MAIN PART OF PROGARM GOES HERElea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx,mess1disp:mov ah,09int 21hret ;return to DOSmainendp ;end of main part of program;-------------------------------------------------------prognam ends ;end od code segment;******************************************************** end start ;end assembly实验二用DEBUG编程:使用堆栈段将AX和BX的内容进行交换等一、实验目的:1、熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
汇编(循环、分支、子程序)实验报告
分别为十个成绩、成绩总个数、分段的5个区间申请内存单元,初始化数据段;将AX,BX,CX压栈,保留原始数据。选取第一个成绩,存入AX中,该数据除以10,得到商存入BX,判断商的所属区间,给所属区间加1,继续下一个,循环直到十个全部判断结束,pop出栈,得到属于各区间的成绩个数,程序结束。
2.源程序清单
2.源程序清单
datasegment
xdw 1ah
ydw 0ah
zdw 01h
maxdw ?
dataends ;数据段定义
codesegment
assume ds: data, cs: code
start:
mov ax, data
mov ds, ax ;初始化数据段
mov ax, x
cmp ax, y
《汇编语言程序设计》实验报告
实验名循环、分支、子程序设计实验室实验楼实验日期2014-06-09
一、实验目的及要求
1.熟悉命令格式,功能,加强对指令系统的理解
2.编写简单循环、选择、子程序的结构程序
3.单步跟踪调试,观察寄存器的变化和指令执行的结果
二、实验环境
硬件环境:一台微型计算机
软件环境:windows xp,debug环境,masm
2.源程序清单
datarea segment;定义数据段
buffer db 80 dup(?) ;预申请了以buffer为首地址的内存单元
flag db ?
datarea ends
prognam segment;定义编码段
main proc far
assume cs:prognam,ds:datarea
(5).初始数据段
(6).分别将AX,BX,CX,SI压栈,保留初始数据,
汇编语言程序设计实验报告
二、实验内容
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位带符号数。
汇编课程设计实验报告
汇编语言程序设计实验报告专业:班级:学号:姓名:日期:湖南科技大学实验报告一实验题目:有两个数(字数据)DATA1和DATA2,把两数之和放在DA TA3中,两数之差放在DA TA4中。
实验目的:1.熟练掌握汇编语言的程序结构,学会如何使用数据定义、符号定义、模块定义等常用的批示性语句。
2.熟悉汇编语言的工作环境;学会使用汇编语言的编辑、汇编、和连接装配程序的方法;熟悉汇编语言程序的编辑-汇编-连接-运行-调试的过程3.熟练掌握用DEBUG来调试程序,掌握调试程序的反汇编、读写寄存器或存储单元、运行程序等简单的调试命令。
4.熟悉汇编语言指令,学会使用数据传送,算术逻辑运算,处理器控制等简单指令。
实验主要原理:先用数据传送指令将DATA1,DA TA2放入AX和BX两个寄存器中,分别用ADD和SUB 两个指令来计算两数之和与两数之差,再用数据传送指令将两数之和放入DA TA3中,将两数之差放入DATA4中。
最后用ret指令返回DOS程序流程图:源程序:datarea segmentDA TA1 dw 5 ;数据定义DA TA2 dw 4DA TA3 dw ?DA TA4 dw ?datarea endsprognam segmentmain proc farassume cs:prognam,ds:datareastart: push ds ;准备工作sub ax,axpush axmov ax,datareamov ds,axmov ax,DATA1mov bx,DATA2add ax,bx ;做加法mov DATA3,axmov ax,DATA1sub ax,bx ;做减法mov DATA4,axretmain endpprognam endsend startDEBUG调试关键步骤:执行mov ax,DATA1(AX)=5,传送成功执行add ax,bx(AX)=9,加法成功执行到最后ret时,查看数据段内容分别为5, 4,9,1 说明加法,减法都成功执行运行结果:(DATA3)=9(DA TA4)=1实验报告二实验题目:数据段中有一个字符串DATA1,串长为3,内容为‘CDE’,还有另一个字符串为DATA2,长度为4,内容为‘ABCD’。
汇编实验一 实验报告
实验一查看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显示中是低位至高位的显示,而我们需要的是高位至低位的显示方式,所以在操作时对于双字节的读取,需要将前后字节地址内容互换。
《汇编语言》课内实验报告(3)
《汇编语言》课内实验报告学生姓名:及学号:学院:理学院班级:课程名称:汇编语言实验题目:80X86指令系统指导教师刘力实验师姓名及职称:方向实验师2012年5月23日一、实验题目:80X86指令系统二、实验目的:1. 8086/8088系统中数据在内存中的存放方式和内存操作数的几种寻址方式。
2. 8086/8088指令:INC,DEC,LOOP,INT 20H(程序终止),寄存器SI,DI。
3. 8086/8088汇编语言伪操作:BYTE PTR,WORD PTR。
4. 求多字节加法程序。
三、实验内容:1.内存操作数及各种寻址方式使用:内容:MOV AX,1234HMOV AX,[1000H]MOV BX,1002HMOV BYTE PTR[BX],20HMOV DL,39HINC BXMOV [BX],DLDEC DLMOV SI,3MOV [BX+SI],DLMOV [BX+SI+1],DLMOV WORD PTR[BX+SI+2],2846H步骤:1)用A命令键入上述程序,并用T命令逐条运行。
2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。
思考:有关指令中BYTE PTR及WORD PTR伪操作不加行不行?试一试。
2.多字节加法程序。
程序:MOV DI,1000HMOV CX,8MOV SI,2000HCLCLOP: MOV AL,[SI]ADC [DI],ALINC SIINC DILOOP LOPINT 20H步骤:1)用A命令键入此程序2)用E命令在1000H开始处键入一个8字节被加数,在2000H开始处键入一个8字节加数,均为低字节在前面。
例如:被加数是十六进制01234567887654 32,加数是010*******abcdef.都是八字节。
D:\>debug-e10000B5F:1000 00.32 22.54 00.76 00.88 59.67 E2.45 E5.2359.01-e20000B5F:2000 74.ef 15.cd 45.ab 6E.05 74.04 65.03 72.0220.013)用G命令运行此程序,并用D命令检查其结果(存放在哪里?),是否正确?-d10000B5F:1000 32 54 76 88 67 45 23 01-d20000B5F:2000 EF CD AB 05 04 03 02 01四、实验结果:图1 使用a输入命令图2 执行第一步,查看初始内存内容,立即数寻址图3 执行第二步,查看当前内存内容,直接寻址图4 执行第三步,查看修改前的内存内容,立即数寻址图5 执行第四步,查看修改后的内存内容,基址变址寻址图6 执行第五步,立即数寻址,执行第六步,寄存器寻址,执行第七步,基址变址寻址,查看修改后的内存内容图7 执行第八步,寄存器寻址,执行第九步,立即数寻址,执行第十步,基址变址寻址,查看修改后的内存内容图8 执行第十一步,查看修改后的内存内容,相对基址变址寻址图9 执行第十二步,查看修改前后的内存内容,基址变址寻址图10 有关指令中BYTE PTR及WORD PTR伪操作不加不行图11 使用a输入指令图12 用e输入计算的数据图13 用g执行命令得到结果,用d查看结果,结果存放在内存的1000处,不正确五、实验体会或遇到问题:本次实验的步骤比较繁琐,这使我充分认识到汇编语言运行快程序复杂的特点,在这次实验中,我学到了更多汇编知识,并且大大提高了汇编实际编程操作的熟练度,加深了我对汇编语言的理解。
汇编实验一实验报告
汇编实验一实验报告一、实验目的1.了解汇编语言的基本概念和基本语法。
2.掌握常见汇编指令的使用方法。
二、实验器材1.计算机一台。
2.汇编语言开发环境。
三、实验原理和方法1.汇编语言是低级程序语言,是计算机可以直接识别并执行的语言。
2.汇编语言采用助记符表示计算机指令,并且每一条汇编指令都对应一条机器指令。
四、实验过程及结果1.编写一个汇编程序,实现将两个数相加并输出结果的功能。
2.打开汇编语言开发环境,创建一个新的源文件。
3.在源文件中编写汇编程序,并保存。
4.汇编程序的伪指令section .data用于定义数据段,section .text用于定义代码段。
5.使用汇编指令mov将要相加的两个数赋值给寄存器,使用汇编指令add将两个数相加,并将结果保存到一个寄存器中。
6.使用汇编指令mov将结果从寄存器中取出,并输出到屏幕。
7.编译和运行汇编程序,查看结果是否正确。
五、实验结果分析经过编译和运行,实验程序顺利执行,结果正确输出。
通过这个实验,加深了对汇编语言的理解和掌握。
六、实验总结通过本次实验,我了解了汇编语言的基本概念和基本语法,并掌握了常见汇编指令的使用方法。
在实验过程中,我遇到了一些问题,如如何正确使用汇编指令以及如何调试程序等,但在同学和老师的帮助下,我顺利完成了实验,并且收获了很多。
通过这次实验,我深刻认识到汇编语言是一种非常底层的语言,需要对计算机底层原理有一定的了解,才能编写出正确的汇编程序。
同时,我也意识到汇编语言虽然复杂,但它的执行效率非常高,可以在一些特定场景下发挥出很大的作用。
总而言之,本次实验让我对汇编语言有了更深入的了解,也提高了我的编程能力。
希望在以后的学习中能够深入学习汇编语言,并能够熟练地使用它。
汇编实验报告
实验一汇编程序的汇编及运行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。
汇编语言实验指导书.
汇编语言实验指导书纪平张雷编写安徽工业大学计算机学院二00四年三月目录实验一DEBUG的启动及其基本命令的使用(2实验二内存操作数及寻址方法(6实验三汇编语言程序的调试与运行(8实验四查表程序设计(10实验五系统功能调用(12实验六循环程序设计(13实验七分支程序设计(15实验八子程序设计(18实验九综合程序设计(20附录实验报告(21实验一DEBUG的启动及其基本命令的使用一•实验目的:掌握DEBUG的基本命令及其功能•实验内容:DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
1、D EBUG程序的启动在DOS提示符下,可键入命令:C>DEBUG[d:][path][文件名][参数1][参数2]其中文件名是被调试文件的名称,它须是执行文件(EXE,两个参数是运行被调试文件时所需要的命令参数,在DEBUG程序调入后,出现提示符-”此时,可键入所需的DEBUG命令。
在启动DEBUG时,如果输入了文件名,则DEBUG程序把指定文件装入内存。
用户可以通过DEBUG的命令对指定文件进行修改、显示和执行。
如果没有文件名则是以当前内存的内容工作,或者用命名命令和装入命令把需要的文件装入内存,然后再用DEBUG的命令进行修改、显示和执行。
2、D EBUG的主要命令(1汇编命令A,格式为:-A[地址]该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。
(2反汇编命令U,有两种格式:1-U[地址]该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节2-U范围该命令对指定范围的内存单元进行反汇编,例如:-U 04BA:0100 0108 或-J 04BA:0100 L9此二命令是等效的。
(3运行命令G,格式为:-G [=地址1][地址2[地址3。
汇编器实验报告
汇编器实验报告篇一:汇编实验报告实验一(1)熟悉汇编语言程序调试环境及顺序程序设计一、实验目的及要求:1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。
2.学会使用EDIT、MASM、LINK、DEBUG等软件工具。
3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。
二、熟悉汇编语言程序调试环境1.汇编语言源程序的建立本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。
设定源程序的文件名为ABC。
DATA SEGMENTBUFDB 23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FH CN EQU $-BUFDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START: PUSH DSXOR AX,AXPUSH AXMOVAX,DATAMOV DS,AXMOV BX,OFFSET BUF MOV 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图1 用EDIT编辑ABC.ASM程序窗口程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。
2.将源程序文件汇编成目标程序文件一般情况下,MASM汇编程序的主要功能有以下3点:(1)检查源程序中存在的语法错误,并给出错误信息。
(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。
(3)若程序中使用了宏指令,则汇编程序将展开宏指令。
源程序建立以后,在DOS状态下,采用宏汇编程序MASM 对源程序文件进行汇编,其操作过程如图2所示。
汇编实验报告
MOV DL,ALMOV AH,2INT 21HDEC CHJNZ ROTATERETMAIN ENDPPROGNAM ENDSEND实验结果分析与总结1、程序运行结果:DEBUG调试:2、实验总结:用循环体结构完成,每次循环显示一个十六进制数位,因而循环次数是已知的,计数值为4。
循环体中则应包括从二进制到所显示字符的ASCII之间的转换,以及每个字符的显示,后者可以使用DOS功能调用实现。
由于数字0~9的ASCII为30~39H,而字母的A~F的ASCII为41~46H,所以把4位二进制加上30H后还需要一次判断,如果为字符A~F,则还应加上7才能显示正确的十六进制数。
指导老师评阅意见2、程序运行结果:DEBUG调试:2、实验总结:从第一个数开始依次对相邻的两个数进行比较,如果次序对,则不错任何操作,如果次序不对,则两个数互换位置。
指导老师评阅意见指导老师:年月日实验报告RETBINIHEX ENDPPROGNAM ENDSEND MAIN实验结果分析与总结3、程序运行结果:有匹配字符:无匹配字符:2、实验总结:应该注意数据段的定义和使用。
此外应该注意单个字符时的“边缘”情况因为,这是指针的移动和关键字的长度是一致的,但是这并不意味着,两个字符串匹配。
输出结果采用十六进制输出在《IBM PC汇编语言程序设计》一书中例6.3decihex中的子过程binihex,这里也提醒我要注意积累一些知识,只有这样才能把汇编语言学好。
指导老师评阅意见指导老师:年月日实验报告MOV DL,0CMP BYTE PTR [SI+6],3AHJB A0SUB BYTE PTR [SI+6],10MOV DL,1A7:ADD BYTE PTR [SI+7],DLMOV DL,0CMP BYTE PTR [SI+7],3AHJB A0SUB BYTE PTR [SI+7],10MOV DL,1A8:ADD BYTE PTR [SI+8],DLMOV DL,0CMP BYTE PTR [SI+8],3AHJB A0SUB BYTE PTR [SI+8],10MOV DL,1A9:ADD BYTE PTR [SI+9],DLA0:RETADD65536 ENDPQUIT:MOV AH,4CHINT 21HCODES ENDSEND START实验结果分析与总结4、程序运行结果:2、实验总结:程序接收用户输入的1小于等于50的十进制正整数,存入输入缓冲区后再把它转化为十六进制数,存入内存单元N中。
汇编语言实验报告
xxxxxxx学院计算机工程系《汇编语言》·实验报告
实验一、查看CPU和内存,用机器指令和汇编指令编程2014.09.24实验二、用机器指令和汇编指令编程2014.10.08
实验三、编程、编译、连接、跟踪2014.10.15
实验四、[bx]和loop的使用2014.10.22
实验五、编写、调试具有多个段的程序(一)2014.10.29
实验六、编写、调试具有多个段的程序(二)2014.11.05
实验七、实践课程中的程序2014.11.12
实验八、寻址方式在结构化数据访问中的应用2014.11.19
实验九、分析一个奇怪的程序2014.11.26
实验十、根据材料编程2014.12.3
实验十一、编写子程序2014.12.10
实验十二、综合练习:求无符号字节序列中的最大值和最小值,设有一个字节序列,其存储首地址为3000H,字节数为008H,利用学过的方法编程,求出该序列中的最大值和最小值2014.12.17。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言实验报告学院:计算机学院姓名:学号:班级:软件工程104班实验一汇编运行环境及方法、简单程序设计1.程序说明:本程序用来比较两个字符串string1和string2所含的字符是否相同。
若相同则显示‘Match’,否则显示‘Nomatch’。
在程序的数据段先定义两个字符串string1和string2,再定义两个字符串mess1和mess2,分别代表‘Match’和‘Nomatch’。
再代码段比较字符串string1和string2,通过比较判断是否相同。
若相同则显示‘Match’,否则显示‘Nomatch’。
2.程序代码(比较两字符串):;PROGRAM TITLE GOES HERE--Compare string;************************************************************************** datarea segment ;define data segmentstring1 db 'Move the cursor backward.'string2 db 'Move the cursor backward.';mess1 db 'Match.',13,10,'$'mess2 db 'No match!',13,10,'$'datarea ends;************************************************************************** prognam segment ;define code segment;--------------------------------------------------------------------------main proc farassume cs:prognam,ds:datarea,es:datareastart: ;starting execution address;set up stack for returnpush ds ;save old data segmentsub ax,ax ;put zero in AXpush ax ;save it on stack;set DS register to current data segmentmov ax,datarea ;datarea segment addrmov ds,ax ;into DS registermov es,ax ;into ES register;MAIN PART OF PROGRAM GOES HERElea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx,mess1disp:mov ah,09int 21hret ;return to DOSmain endp ;end of main part of program;-------------------------------------------------------------------------prognam ends ;end of code segment;*************************************************************************end start ;end assembly3.截图:该程序是用来判断两字符串string1和string2是否相同,相同则显示match。
实验二用DEBUG编程:使用堆栈段将AX和BX的内容进行交换等1.程序说明:(1)设堆栈指针SP=2000H,AX=3000H,BX=5000H;编一程序段将AX和BX 的内容进行交换。
请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG 调试程序进行汇编与调试。
(2)设DS=当前段地址,BX=0300H,SI=0002H;请用DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装入0AH,0BH,0CH,0DH,0EH。
在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完毕时,AX中的内容是什么。
2.程序代码:MOV AX,BXMOV AX,0304HMOV AX,[0304H]MOV AX,[BX]MOV AX,0001[BX]MOV AX,[BX][SI]MOV AX,0001[BX][SI]HLT3.截图:先使用-r 设置sp,ax,bx,在使用-a输入指令然后再-t单步调试刚开始ax 3000,bx 5000 debug调试后ax,5000 bx 3000首先用-r设置bx,si 然后再用-e将a,b,c,d,e分配到指定的内存中,-a输入指令最后-t单步调试执行单步调试后ax的值一直变化从000E,0B0A,0C0B,0D0C,0E0D实验三存储器块清零和内存块移动1.程序说明:第一个程序是存储块清零。
程序流程大概为首先设置起始地址,然后设置块长度,然后将当前地址内容清零,地址加1,然后查看是否清除完全,若没有则回到当前地址清零,然后再查看,直到地址内容清除完,结束程序。
第二个程序是内存块移动。
程序流程框图为:首先设置块的源地址,然后设置筷的目的地址,然后再设置移动长度,然后按长度重复传送数据,然后结束。
2.调试及截图:第一个程序进入debug先用-u指令查看程序代码然后-d查看内存的情况再执行-g讲程序执行完在用-d查看内存第二个程序进入debug后先用-u查看程序然后-g运行到指令rep movsd 之前再用–d查看内存的内容-g前-g后实验四将键盘输入的小写字母用大写字母显示出来1.程序说明:本程序用来将小写字母转变为大写,并在屏幕上显示出来。
先利用DOS功能调用INT21H的1号功能从键盘输入字符,然后判断输入的是否是小写字母,若不是小写字母,则显示输入出错,重新输入。
若输入的是小写字母,则通过将其减去20h,从而变为大写字母。
在通过DOS功能调用INT21H的2号功能显示出来。
若输入的是Enter键,则结束程序。
2.程序代码:TITLE SHIY ANCODE SEGMENTASSUME CS:CODESTART:MOV AH,01HINT 21HCMP AL,61HJL STARTSUB AL,20HMOV DL,ALMOV AH,02HINT 21HCODE ENDSEND START3.截图:实验五循环程序设计1.程序说明:第一个程序是用来显示AL寄存器中的两位十六进位制数,通过DOS功能调用INT21H的2号功能显示出来。
第二个程序是用来判别键盘上输入的字符:若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符<CR>,z则结束程序,若为其他字符则不显示,继续等待新的字符输入。
首先输入一个字符,将其和回车字符比较,若是回车字符,则结束程序。
1-9字符,则显示之。
若是若小于0,则重新等待输入。
若大于9,则跳转到和‘A’、Z’比较,若小于’A’,则重新等待输入,若大于’Z’,则跳转到和’a’、’z’比较处,若小于a或大于z,则重新等待输入,否则输出‘c’。
2.程序代码:CODE SEGMENTASSUME CS:CODESTART:MOV AL,3EHPUSH AXMOV DL,ALMOV CL,4SHR DL,CLCMP DL,9JBE NEXT1ADD DL,7NEXT1:ADD DL,30HMOV AH,2INT 21HPOP AXMOV DL,ALAND DL,0FHCMP DL,9JBE NEXT2ADD DL,7NEXT2:ADD DL,30HMOV AH,2INT 21HMOV AH,4CHINT 21HCODE ENDSEND START3.截图:4.程序代码:code segmentassume cs:code start:mov ah,1int 21hcmp al,0dhjz donecmp al,'0'jb nextcmp al,'9'ja charupmov dl,almov ah,2int 21hjmp startcharup:cmp al,41hjb nextcmp al,5ahja chrdn dispc:mov dl,'c'mov ah,2int 21h next:jmp start chrdn:cmp al,61hjb nextcmp al,7ahja nextjmp dispc done:mov ah,4chint 21h code endsend start5.截图:实验六分支程序设计1.程序说明:第一个程序是用来显示AL寄存器中的两位十六进位制数,通过DOS功能调用INT21H的2号功能显示出来。
第二个程序是用来判别键盘上输入的字符:若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符<CR>,z则结束程序,若为其他字符则不显示,继续等待新的字符输入。
首先输入一个字符,将其和回车字符比较,若是回车字符,则结束程序。
1-9字符,则显示之。
若是若小于0,则重新等待输入。
若大于9,则跳转到和‘A’、Z’比较,若小于’A’,则重新等待输入,若大于’Z’,则跳转到和’a’、’z’比较处,若小于a或大于z,则重新等待输入,否则输出‘c’2.程序代码:CODE SEGMENTASSUME CS:CODESTART:MOV AL,3EHPUSH AXMOV DL,ALMOV CL,4SHR DL,CLCMP DL,9JBE NEXT1ADD DL,7NEXT1:ADD DL,30HMOV AH,2INT 21HPOP AXMOV DL,ALAND DL,0FHCMP DL,9JBE NEXT2ADD DL,7NEXT2:ADD DL,30HMOV AH,2INT 21HMOV AH,4CHINT 21HCODE ENDSEND START3.截图:可以对ax的值进行修改为00ad4.程序代码code segmentassume cs:codestart:mov ah,1int 21hcmp al,0dhjz donecmp al,'0'jb nextcmp al,'9'ja charupmov dl,almov ah,2int 21hjmp start charup:cmp al,41hjb nextcmp al,5ahja chrdn dispc:mov dl,'c'mov ah,2int 21h next:jmp start chrdn:cmp al,61hjb nextcmp al,7ahja nextjmp dispc done:mov ah,4chint 21h code endsend start 5.截图:实验七统计不同成绩段学生的人数1.程序说明:本程序用来统计在不同分数段的学生人数并显示出来。