IBM-PC汇编语言程序实验报告

合集下载

汇编语言实验报告

汇编语言实验报告

实验一汇编程序的汇编及运行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.txt,保留在MASM文件夹下。

生成LST文件,(没必要连接、运行)用EDIT查看1.LST文件。

试回答:DA1,DA2的偏移量别离是多少?COUNT的值为多少?DATA SEGMENTORG 20HNUM1=8NUM2=NUM1+10HDA1 DB ‘IBM PC’DA2 DB 0AH, 0DHCOUNT EQU $-DA1DATA ENDSEND2、输入有错误的文件,修改错误语句。

(MASM没有显现错误即可。

没必要连接、运行。

)DATA SEGMENTVAR1 DB 0, 25, ODH, 300VAR2 DB 12H, A4H, 6BHVAR3 DB ’ABCDEF’VAR4 DW 1234H, 5678HVAR5 DW 10H DUP(?)DATA ENDSCODE SEGMENTASSUME CS: CODE, DE: DATA BEING MOV AX, DATAMOV DS, AXLEA SI, VAR5MOV BX, OFFSET VAR2MOV [SI], 0ABHMOV AX, VAR1+2MOV [BX], [SI]MOV VAR5+4, VAR4MOV AH, 4CHINT 21HCODE ENDSEND START3、输入正确的程序,汇编、连接、运行STACKS SEGMENT STACKDW 128 DUP(?)STACKS ENDSDATAS SEGMENTSTRING DB ‘WELCOME!’, 13, 10, ‘$’DATAS ENDSCODES SEGMENTASSUME CS: CODES, DS: DATASSTART:MOV AX, DATASMOV DS, AXLEA DX, STRINGMOV AH, 9INT 21HMOV AH, 4CHINT 21HCODES ENDSEND START4.算法描述及实验步骤(1)编写源程序。

实验1 IBM-PC寻址方式及DEBUG的使用

实验1 IBM-PC寻址方式及DEBUG的使用

宁德师范学院计算机系实验报告(2013 —2014 学年第1学期)课程名称汇编语言程序设计实验名称实验一IBM-PC寻址方式及DEBUG的使用专业计本(1)年级11级学号姓名指导教师实验日期2013年10月1日实验步骤、实验结果及分析:1、(1)、在DOS或Windows的命令行窗口执行命令Debug.exe,进入Debug程序环境.用-r查询各初始值,结果如下:(2)用E命令键人上述机器语言程序和数据段的初值。

—E DS:000 23 01 25 00—E DS:006 2A 2A 2A (2A为*,是为便于查看数据段内容而设置)—E CS:100 A1 00 00 03 06 02 00—E CS:107 A3 04 00 CB(3)用D命令检查数据段、代码段内容。

—D DS:0—D CS:100 结果如下:(4)用T命令逐条执行上述程序,注意观察每条指令执行后相应寄存器的变化。

(5)用U命令反汇编本程序。

—U 100 10A(6)用R命令修改IP的内容为0100重新执行上述程序。

—R IP显示:输入0100(7)用G命令运行程序。

—G =CS:0100 107观察:IP=0107 AX=0148—G =CS:0100 10A观察:IP=010A AX= 01482.自己试着写段程序:-A 100↙16C6:0100 DB‘1234567890‘↙16C6:010A CLD↙16C6:010B MOV SI,100↙16C6:010E MOV DI,200↙16C6:0111 MOV CX,A↙16C6:0114 REP MOVSB↙16C6:0116↙-G =10A 116↙;运行上述程序(起始地址10AH,结束地址116H)。

-D 100 10A↙;显示DS:100开始10个字节内容-D ES:200 20A↙显示ES:100开始10个字节内容实验分析:DEBUG命令使用含义及格式如下:-A:编辑和汇编源程序。

《汇编语言》实验报告

《汇编语言》实验报告

《汇编语言》实验报告实验名称:汇编语言实验报告实验目的:通过实验了解汇编语言的基本概念、语法结构和程序设计方法,掌握汇编语言的编写方法。

实验时间:2024年1月1日实验地点:实验室一、实验背景汇编语言是计算机硬件和软件之间的桥梁,通过汇编语言可以直接操作计算机的底层硬件。

汇编语言是一种低级语言,使用汇编语言可以实现对计算机内存、寄存器等硬件资源的直接操作,从而实现程序的功能。

本实验通过编写汇编语言程序,加深对汇编语言的理解。

二、实验过程1. 确定实验环境:使用DOSBox模拟DOS环境进行汇编程序编写和调试。

2. 编写第一个汇编程序:编写一个简单的汇编程序,将字符串“Hello, World!”输出到屏幕上。

3.程序分析:a.定义要输出的字符串,将字符串存储在数据段中。

b.设置段寄存器,将数据段地址加载到DS寄存器中。

c.设置显示模式和光标位置。

d.将字符串逐个字符输出到屏幕上。

e.关闭显示模式。

4. 编译运行:使用汇编语言的编译器将汇编程序转换成机器码,并在DOSBox中运行程序。

5.调试程序:根据程序运行结果和分析,调试程序中存在的错误,并进行改正。

三、实验结果与分析经过多次编写和调试,我们成功实现了将字符串“Hello, World!”输出到屏幕上的功能。

通过程序分析和调试过程,加深了对汇编语言的理解和掌握。

四、实验总结通过本次实验,我们深入了解了汇编语言的基本概念、语法结构和程序设计方法。

通过实际编写汇编语言程序,对汇编语言的编写方法有了更加深入的认识。

同时,通过调试程序的过程,我们也提高了自身的问题解决能力和分析能力。

在今后的学习和工作中,我们将继续学习和深入研究汇编语言,提高自己的编程能力和创新思维能力。

总体而言,本次实验给我们带来了很大的收获,我们以后将更加努力地学习汇编语言,提高自己的编程水平,为以后的学习和工作做好充分的准备。

微机原理与接口技术实验报告1- 汇编语言程序设计

微机原理与接口技术实验报告1- 汇编语言程序设计

西安交通大学实验报告成绩第页共页课程微机原理与接口技术实验系别生物医学工程实验日期年月日专业班级组别交报告日期年月日姓名学号报告退发 (订正、重做) 同组者教师审批签字实验名称汇编语言程序设计一、实验目的1.掌握Lab6000p实验教学系统基本操作;2.掌握8088/8086汇编语言的基本语法结构;3.熟悉8088/8086汇编语言程序设计基本方法。

二、实验设备b6000p实验教学系统;2.IBM-PC机三、实验内容1.有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。

编程并显示结果:1)如果数组是无符号数,求出最大值,并显示;2)如果数组是有符号数,求出最大值,并显示。

2.将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:”3.将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII是:”4.两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。

在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子程序)5.键盘输入一个小写字母(a~z),转换成大写字母显示:请输入一个小写字母(a~z):转换后的大写字母是:6.实现4字节无符号数加法程序,并显示结果,如99223344H + 99223344H= xxxxxxxxH四、实验结果1.有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。

编程并显示结果:(1)如果数组是无符号数,求出最大值,并显示;(2)如果数组是有符号数,求出最大值,并显示。

程序:(1)无符号数#make_COM#; COM file is loaded at CS:0100hORG 100hJMP STARTABC DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8HMAIN PROC FARSTART: MOV SI,0MOV AL,ABC[SI]A1: INC SICMP SI,9JNC EXITMOV BL,ABC[SI]CMP AL,BLJC A2JMP A1A2: XCHG BL,ALJMP A1EXIT: MOV CL,16DIV CLMOV DX,AXMOV CL,9CMP DL,CLJA E1ADD DL,30HMOV AH,2INT 21HE1: ADD DL,37HMOV AH,2INT 21HMOV DL,DHCMP DL,9JA E2ADD DL,30HMOV AH,2INT 21HE2: ADD DL,37HMOV AH,2INT 21HMOV DL,'H'MOV AH,2INT 21HRETMAIN ENDPEND START结果:(2)有符号数#make_COM#; COM file is loaded at CS:0100hORG 100hJMP STARTSHUZU DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H MAIN PROC FARSTART: MOV SI,0MOV AL,SHUZU[SI]L1: INC SICMP SI,9JNC NEXTMOV BL,SHUZU[SI]CMP AL,BLJL L2 ;带符号数比较 JMP L1L2: XCHG BL,ALJMP L1NEXT: MOV CL,16DIV CLMOV DX,AXMOV CL,9CMP DL,CLJA L3 ;无符号数比较 ADD DL,30HMOV AH,2INT 21HJMP L4L3: ADD DL,37HMOV AH,2INT 21HL4: MOV DL,DH ;ASCII码转换 CMP DL,9JA L5ADD DL,30HMOV AH,2INT 21HJMP L5L5: ADD DL,37HMOV AH,2INT 21HL6: MOV DL,'H'MOV AH,2INT 21HHLTMAIN ENDPEND START2.将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:”程序:#make_COM#; COM file is loaded at CS:0100hORG 100hJMP START;DATA SEGMENTSHUCHU DB 'BCD IS $'ABC DB 15 DUP(?);DATA ENDSMAIN PROC FARSTART: MOV DX,OFFSET SHUCHUMOV AH,9INT 21HMOV AX,OFFSET ABCMOV DX,AXMOV AX,500H ;分离出各位数,分别进行BCD码转换SUB DX,DXMOV CX,1000DIV CXXCHG DX,AX ;商在DX中,余数在AX中MOV BX,AXADD DL,30HMOV AH,2INT 21H ;千位转换并输出MOV AX,BXMOV CL,100DIV CLMOV DX,AXADD DL,30HMOV AH,2INT 21H ;百位转换并输出MOV AL,DHSUB AH,AHMOV CL,10DIV CLMOV BX,AXMOV DL,BLADD DL,30HMOV AH,2INT 21H ;个位转换并输出MOV DL,BHADD DL,30HMOV AH,2INT 21HRETMAIN ENDPEND START结果:3.将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII 是:”程序:#make_COM#; COM file is loaded at CS:0100hORG 100hJMP START;DATA SEGMENTSHUCHU DB 'ASCII IS $'ABC DB 20 DUP(?);DATA ENDSMAIN PROC FARSTART: MOV DX,OFFSET SHUCHUMOV AH,9INT 21HMOV CH,4MOV AX,OFFSET ABCMOV DX,AXMOV BX,7693HEXIT: MOV CL,4ROL BX,CLMOV AL,BLAND AL,0FH ;与运算分离出最高位MOV AH,0ADD AL,30HMOV CL,16DIV CL ;分离出高位和低位MOV DH,AHMOV DL,ALADD DL,30HMOV AH,2INT 21HMOV DL,DHADD DL,30HMOV AH,2INT 21H ;分别输出高低位DEC CHJNZ EXIT ;进行循环HLTMAIN ENDPEND START结果:4.两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。

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

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

汇编语言程序设计实验报告汇编语言程序设计实验报告引言汇编语言是一种低级语言,用于编写计算机的底层程序。

在计算机科学与技术领域,汇编语言程序设计是一门重要的课程。

本篇实验报告将介绍我在汇编语言程序设计实验中所学到的知识和经验。

实验目的本次实验的目的是通过编写汇编语言程序,加深对计算机底层原理的理解,并掌握汇编语言的基本语法和编程技巧。

实验环境在实验中,我使用了一台运行Windows操作系统的计算机,并安装了MASM 汇编语言开发工具。

实验内容1. 汇编语言基础知识在实验开始前,我先学习了汇编语言的基础知识。

汇编语言使用助记符来代表机器指令,与机器指令一一对应。

了解了寄存器、内存和指令的概念,并学会了如何使用它们来编写汇编程序。

2. 汇编语言程序设计在实验中,我编写了一些简单的汇编语言程序,以加深对汇编语言的理解和应用。

例如,我编写了一个计算两个数之和的程序,通过将两个数存储在寄存器中,并使用加法指令进行运算,最后将结果保存到指定的内存位置。

3. 汇编语言程序调试在编写汇编语言程序时,我遇到了一些错误和问题。

为了解决这些问题,我学会了使用调试工具来定位错误。

通过逐步执行程序,并观察寄存器和内存的变化,我能够找到程序中的错误并进行修正。

4. 汇编语言程序优化在实验中,我也尝试了对汇编语言程序进行优化,以提高程序的性能和效率。

通过减少指令的数量和使用更高效的算法,我成功地改进了程序的执行速度。

实验心得通过本次实验,我深刻体会到了汇编语言程序设计的重要性和挑战性。

汇编语言虽然复杂,但它能够直接操作计算机的硬件,提供了更高的灵活性和效率。

通过编写汇编语言程序,我不仅加深了对计算机底层原理的理解,还提高了问题解决和调试能力。

总结汇编语言程序设计实验是一门重要的课程,它为我们提供了学习计算机底层原理和编程技巧的机会。

通过实验,我掌握了汇编语言的基本知识和技巧,并成功编写和优化了汇编语言程序。

这次实验不仅加深了我的理论知识,还培养了我的实际操作能力。

IBM_PC汇编语言程序设计汇编程序

IBM_PC汇编语言程序设计汇编程序

IBM_PC汇编语言程序设计汇编程序实验四顺序程序的设计1.计算(X+(Y*Z-100))/W其中:X,Y,Z,W均为十六位有符号数,其存储形式如下,X DW -13Y DW 30Z DW 24W DW 501.DATA SEGMENTX DW-13Y DW 30Z DW 24W DW 50P DW 2 DUP(?)DATA ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DATASTART:MOV AX, DATAMOV DS, AXMOV AX, YIMUL ZMOV CX, AXMOV BX, DXSUB CX, 100SBB BX, 0MOV AX, XCWDADD AX, CXADC DX, BXIDIV WMOV P, AXMOV P+2, DXMOV AH,4CHINT 21HCSEG ENDSEND START2.设X,Y,Z均为双精度数,他们分别存放在X,X+2,Y,Y+2,Z,Z+2存储单元中,存放时高位子存在高地址,低位字存放在低地址,编写程序实现下面表达式的计算X+(Y-Z)=W2.DATA SEGMENTX DW 01hY DW 02hZ DW 03hw DW 2 DUP(?)DATA ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DATASTART:MOV AX, DATAMOV DS, AXMOV AX, YMOV DX, Y+2SUB AX, ZSBB DX, Z+2ADD AX, XADC DX, X+2MOV W, AXMOV W+2, DXINT 21HCSEG ENDSEND START实验五串操作程序的设计1.编写完整程序,从键盘输入一个字符串STRING,同时,把字符串STRING中的‘&’字符用空格符替代.1.DSEG SEGMENTP DB 10 DUP(?)ABC DW?DSEG ENDSDATA SEGMENTASSUME ES:DSEG,CS:DATASTART: MOV AX,DSEGMOV ES, AXMOV CX, 10MOV DI, 0NEXT: MOV AH, 01HINT 21HMOV ES:P[DI], ALINC DILOOP NEXTLEA DI, PMOV CX, 10CLDMOV AL,'&'REPNZ SCASBMOV AL,' 'MOV ES:P[DI-1],ALMOV SI,0SUB BX, CXMOV ES:ABC, BXMOV CX, 10REST:MOV AH, 02HMOV AL,ES:P[SI]MOV DL, ALINT 21HINC SILOOP RESTADD BX, 30H INT 21HMOV DL, BYTE PTR ABC DATA ENDSMOV AH,02H END STARTINT 21HMOV AH, 4CH2.编写完整程序,从键盘输入两串字符OLDS和NEWS,如果两个字符串相同显示“YES”串,不同显示“NO”串。

汇编语言实验报告

汇编语言实验报告实验一汇编语言的源程序的输入一、实验目的1.通过实验了解和熟悉微机系统的配置2.学习在DEBUG状态下输入汇编源程序的方法3.初步掌握调试(在DEBUG状态下)的过程二、实验原理1.本实验在DEBUG状态下输入汇编源程序,并且用DEBUG命令进行调试,用单步跟踪的方法试验指令的功能;2.以下是给定的参考程序,并在实验时每条指令的“;”等号右边按要求填写指令的分析结果。

三、实验步骤1.开机后进入DOS系统2.用DEBUG的REGISTER命令检查所有寄存器内容,并作记录R[寄存器名]3.用DEBUG的ASSEMBLE命令输入汇编源程序A[内存地址]4.用DEBUG的UNASSEMBLE命令反汇编U[起始地址][终止地址]5.用DEBUG的TRACE命令单步跟踪程序T[起始地址][终止地址]6.用DEBUG的DUMP命令显示存贮器单元的内容四、参考程序及结果MOV AX,2000 ;AL=00MOV DS,AX ;DS=2000NOT AX ;AX=DFFFXOR AX,AX ;AX=0000DEC AX ;AX=FFFFINC AX ;AX=0000MOV BX,2030 ;BH=20MOV SI,BX ;SI=2030MOV [SI],BL ;[2030H]=30MOV WORD PTR[SI],10F ;[2030H]=0F [2030H]=01 MOV DI,SI ;DI=2030MOV [DI+50],BH ;[DI+50]=20MOV BH,[SI] ;BH=0FMOV BL,[DI+50] ;BL=20MOV SP,5000PUSH AX ;AX=0 [SS:4FFEH]=00H [SS:4FFFH]=00H PUSH BX ;BX=0F20 [SS:4FFCH]=20H [SS:4FFDH]=0FH POP AX ;AX=0F20POPF ;F=00000000NEG BX ;BX=F0E0XCHG BX,AX ;BX=0F20STD ;F=01010001STI ;F=01110001CLD ;F=00110001CLI ;F=00010001ADC DI,2050 ;DI=4081 F=00000010ADC SP,DI ;SP=9081 F=10010010ADC AX,1500 ;AX=05E0 F=00000001SUB AX,BX ;AX=F6C0 BX=0F20SHL AH,1 ;AH=ECRCL AX,1 ;AX=D981SHR BX,1 ;BH=07RCR BL,1 ;BL=90MOV CL,4MOV DX,80F0ROL DX,CL ;DX=0F08 CL=04INT 20 ;CS=00A7 IP=1072实验二数据的建立与传送程序一、实验目的1.学习DEBUG命令2.验证指令的功能二、实验原理在DEBUG状态下,输入程序,用G命令进行连续方式执行程序,用DUMP命令查看建立的数据块内容三、参考程序及结果1.在内存1000单元开始,建立00H~0FH~00H 31个数,要求00H~0FH数据逐渐增大,0FH~00H逐渐减小,程序从内存CS:0100H地址开始输入MOV AX ,100HMOV DS ,AXMOV SI,0MOV CL ,0FHXOR AX,AXPPE1: MOV [SI] ;ALINC SI ;INC ALDEC CLJNZ PPE1MOV CX,10HPPE2:MOV[SI],ALINC SIDEC ALLOOP PPE2INT 20H数据块的内容1000:0000:00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 1000:0100:0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 002.把上一程序的执行结果分几种方式传送到以下指定区域(a)该程序从内存CS:0150H开始输入,把数据块传送到15050H 开始的存储区域中MOV AX,1000HMOV DS,AXMOV SI,0MOV DI,5050HMOV CX,1FHPPEA: MOV AL,[SI]MOV [DI],ALINC SIINC DILOOP PPEAINT 20H结果:1000:5050 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 1000:5060 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00(b)用串传送指令MOVSB,把数据块传送到15150H开始的区域,该程序从内存CS:0200H开始输入MOV AX,100HMOV DS,AXMOV ES,AXMOV SI,0MOV DI,5150HMOV CS,1FHCLDPPEB: MOVSBLOOP PPEBINT 20H结果:1000:5150 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 1000:5160 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00(C)用重复串操作指令”REP MOVSB”把数据传送到15250H开始的区域,该程序从CS:250H地址开始输入MOV AX,1000HMOV DS,AXMOV ES,AXMOV SI,0MOV DI,5250HMOV CX,1FHCLDREPZMOVSBINT 20H结果:1000:5250 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 1000:5260 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00(c)用串操作的减量工作方式,把数据传送到25050H开始的区域,该程序从CS:0300H开始输入MOV AX,1000HMOV DS,AXADD AX,AXMOV ES,AXMOV SI,1EHMOV DI,506EHMOV CX,1FHSTDREP MOVSBINT 20H结果:2000:5050 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 2000:5060 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00实验四统计学生成绩程序一、实验目的进一步掌握分支程序和循环程序的编写方法二、实验原理设有10个学生的成绩分别为56,69,84,82,73,88,99,63,100和80分。

汇编语言实验报告

汇编语言实验报告一、实验目的(1)熟悉汇编程序的汇编、连接、执行过程;(2)生成LST文件,查看LST文件;(3)生成OBJ文件,修改语法错误;(4)生成EXE文件;(5)执行程序。

二、实验涉及知识汇编程序从编写到执行的过程编程?.ASM?编译?.OBJ?连接?.EXE?加载?内存中的程序?执行1)编写源程序用EDIT或记事本输入各段,并存储成源程序(保存在MASM目录下),扩展名为ASM。

2)对源程序进行汇编、连接操作如下:(1)在DOS状态下,进入MASM目录;(2)输入命令:MASM 文件名(连同扩展名);(3)在系统出现的提示中输入:object filename[.obj]:按回车键。

Source listling[nul.lst]:输入:文件主名,生成lst文件,也可以不生成,直接按回车键。

Lst文件用于查看编译为目标文件的过程中产生的中间结果。

Cross-reference [nul.crf]:按回车键。

(4)如果系统没有提示出错,那么编译过程就完成了。

如果提示错误则应用edit打开源文件进行修改,然后再重复2和3步骤。

(5)输入:link 文件主名(不要输扩展名,也可以输入扩展名.obj)run file [.exe]:按回车键。

List file [nul.map]:按回车键。

Libraries [.lib]:按回车键。

(6)没有提示错误,汇编过程就结束了,产生了exe可执行文件。

如果出现‘no strack segment’的错误警告,不用理会。

3)执行程序(由DOS中的COMMAND命令将文件加载入内存)在DOS提示符下直接输入文件主名就可以执行文件了。

程序执行后,有的会显示结果,有的可能执行后什么结果都没有,是因为程序中没有显示命令。

三、实验内容1)将下面的数据段输入,取名1.ASM,保存在MASM文件夹下。

生成LST文件,(不必连接、运行)用EDIT查看1.LST文件。

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

中南大学IBM-PC汇编语言程序设计实验报告学生姓名学院专业班级完成时间目录汇编语言实验一 (3)1.实验目的与要求 (3)2.实验内容与实现原理 (3)3.实验具体设计实现及结果 (4)4.源代码 (7)汇编语言实验二 (8)1.实验目的与要求 (8)2.实验内容与实现原理 (8)3.实验具体设计实现及结果 (9)4.源代码 (9)汇编语言实验三求Fibonacci递归数 (11)1.实验目的与要求 (11)2.实验内容与实现原理 (12)3.实验具体设计实现及结果 (12)4.源代码 (12)汇编语言实验四分类统计字符个数 (17)1.实验目的与要求 (17)2.实验内容与实现原理 (17)3.实验具体设计实现及结果 (18)4.源代码 (18)总结 (21)IBM-PC汇编语言程序设计汇编语言实验一1.实验目的与要求【实验目的】学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法,熟悉DEBUG调试程序和DOS功能表的查看,为后续实验打下坚实基础。

【实验要求】通过实验掌握下列知识:1、8086指令: MOV,ADD,ADC,SUB,SBB,DAA,XCHG2、DEBUG命令: A,D,E,F,H,R,T,U。

3、ASCII码及用16进制数表示二进制码的方法。

4、8086寄存器: AX,BX,CX,DX,F,IP。

2.实验内容与实现原理DEBUG 命令:1、打DEBUG 进入DEBUG,显示提示苻'_ '。

2、退出DEBUG命令:Q3、显示内存命令:D 起始地址结束地址4、修改内存命令:E 起始地址,连续修改打空格键。

打回车键退出E命令。

5、检查寄存器命令:R6、修改寄存器命令:R 寄存器名7、小汇编命令:A 起始地址,不输入指令打回车键退出A命令。

8、反汇编命令:U 起始地址结束地址9、文件命名命令:N 盘号:文件名10、读文件命令:L 内存地址11、写文件命令:W 内存地址12、读扇区命令:L 内存地址盘号(0--A:,1--B:) 扇区号扇区数13、写扇区命令:W 内存地址盘号扇区号扇区数14、运行命令:G=起始地址结束(断点)地址15、单步命令:T=起始地址运行指令数,进入子程序内部。

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

目录实验1 利用DEBUG调试汇编语言程序段 (1)实验2 初级程序的编写与调试实验(一) (5)实验3 初级程序的编写与调试实验(二) (14)实验4 汇编语言程序上机过程 (19)实验5 分支程序实验 (22)实验6 循环程序实验 (26)实验7 子程序实验 (30)实验1 利用DEBUG调试汇编语言程序段一.实验目的1.熟悉DEBUG有关命令的使用方法;2.利用DEBUG掌握有关指令的功能;3.利用DEBUG运行简单的程序段。

二.实验环境PC微机DOS操作系统、Windows操作系统三.实验内容1.进入和退出DEBUG程序;1)开始—运行,输入cmd,点确定进入命令窗口2)在命令窗口中输入dubug进入debug程序3)进入debug窗口后,输入q命令退出debug2.学会DEBUG中的1)D命令(显示内存数据D 段地址:偏移地址)-D100 ;显示DS段, 0100开始的128个字节内容-D ;默认段寄存器为DS,当前偏移地址(刚进入debug程序偏移地址为0100H)-D DS:100 ;显示DS段, 0100H开始的128个字节内容-D CS:200 ;显示CS段, 0200H开始的128个字节内容-D 200:100 ;显示DS段, 0200:0100H开始的128个字节内容-D 200 ;显示DS段, 0200H开始的128个字节内容-D 100 L 10 ;显示DS段, 100H开始的100H个字节内容2)E命令(修改指定内存)-E DS:100 F3 ‘AB’ 8D ; 把DS段中0100H开始的四个字节修改为F3 ‘AB’(A和B的ASCII 码) 8D也可以按下面的方式实现3)R命令(显示当前寄存器的内容)4)T命令(设置陷井,单步执行)5)A命令(将指令直接汇编成机器码输入到内存中。

)使用A命令在0100H开始输入指令mov ax, 10 inc cx mov bl, al单步执行上述指令6)G命令等的使用(执行A命中输入的汇编指令)使用A命令在0100H开始输入指令mov ax, 10 inc cx mov bl, al int 3然后使用g命令执行上面的例子设断点在100H处然后用T命令单步执行实验2 初级程序的编写与调试实验(一)一.实验目的1.进一步熟悉DEBUG命令;2.掌握数据在内存中的存放方式和内存操作数的几种寻址方式,段寄存器和物理地址计算;3.熟悉数据传送指令、算术运算指令、逻辑指令、数据串传送程序和数据串传送指令MOVS、STOS及重复前辍REP;4.掌握简单的汇编语言程序编写与调试。

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

华北电力大学实验报告名称:汇编语言程序设计综合实验院系:信息工程系班级:网络工程10k1 学号:学生姓名:指导教师:设计天数:成绩:日期:年月日实验一用表格形式显示ASCII字符一、实验说明:按15行X16列的表格显示表示ASCII码为10H—100H的所有字符,即以行为主的顺序及ASCII码递增的次序一次显示对应的字符。

每16个字符为一行,每行中的相邻来那个字符之间用空白(ASCII为0)隔开。

(1)显示每个字符可使用功能号为02的现实输出功能调用,使用方法如下:mov ah,02hmov dl,输出字符的ASCII码int 21h本题中可把dl初始化为10H,然后不断使其加1(用INC指令)以取得下一个字符的ASCII码。

(2)显示空白符时,用其ASCII码置入dl寄存器。

每行结束时,用显示回车(ASCII为0dh)和换行符(ASCII为0ah)来结束本行并开始下一行。

(3)由于逐个显示相继的ASCII字符时,需要保存并不断修改dl寄存器的内容,而现实空白、回车、换行符时也需要使用dl寄存器,为此可使用堆栈来保存相机的ASCII字符。

具体使用方法:在显示空白或回车、换行符前用指令push dx把dl的内容保存到堆栈中去。

在现实空白或回车、换行符后用指令pop dx恢复dl寄存器的原始内容。

二、程序代码:code segmentassume cs:codestart:mov dx,0010h ;初值为10hnext:mov cx,0010h ;16列loop1:mov ah,02h;int 21h ;显示输出dl字符inc dx ;dx加1push dx ;把dx推进栈保存mov dl,0 ;显示空白符int 21hpop dx ;把dx之前的数取回来loop loop1 ;当cx=0时会自动跳出loop1循环push dx ;保存dx的数,即为了保存ascii码mov dl,0ah ;显示回车int 21h ;02的显示输出功能调用mov dl,0dh ;显示换行符int 21hpop dx ;把dx之前的数取回来cmp dx,100h ;最后的字符的ascii码为100h,相比较jb next ;小于时就跳会nextmov ah,4ch ;带返回码终止int 21hcode endsend start三、运行结果实验二查找匹配字符串一、实验说明程序接受用户键入的一个关键字以及一个句子。

如果句子中不含关键字则显示‘no match’;如果句子中包含关键字则显示‘match’,且把该字在句子中的位置用十六进制数显示出来。

1)采用0AH功能调用将关键字和一个句子分别存入相应的缓冲区。

2)关键字的查找。

关键字和句子中相应字段的比较可使用串比较指令,因此定义附加段,附加段和数据段定义为同一段;相应寄存器内容如下:SI寄存器:关键字首指针;DI寄存器:句子中正相比较的字符指针;CX寄存器(数据段的COUNT变量):关键字的字母个数。

3)关键字在句子中位置的判断。

[DI-COUNT]即为关键字在句子中的地址,LEA DXSENTENCE;SUB DI,DX;DEC DI;此时DI中存放关键字的位置。

4)十六进制显示,采用循环移位,每次输出四个二进制位对应的十六进制字符。

二、程序代码datas segmentkeyword db 10h,?,10h dup(?)match db 0ah,0dh,"match at location:$"nomatch db 0ah,0dh,"no match$"msg3 db 0ah,0dh,"enter keyword:$"sentence db 50h,?,50h dup(?)msg4 db 0ah,0dh,"enter sentence:$" msg5 db"h of the sentence!$"count db?datas endscodes segment main proc far assumestart:push dssub ax,axsub cx,cxsub bx,bxpush axmov ax,datas mov ds,axmov es,axmov ch,0lea dx,msg3mov ah,09hint 21hlea dx,keyword mov ah,0ahint 21h;输入关键字again:lea dx,msg4mov ah,09hint 21h;输出msg4 lea dx,sentence mov ah,0ahint 21h;输入句子lea di,sentence lea si,keyword mov al,[di+1] mov cl,[si+1] mov count,clmov bl,alsub bl,cladd bl,2add bx,dicmp al,cljb nomatch1add di,2sign1:mov cl,countlea si,keywordadd si,2cldrepz cmpsbjz match1cmp di,bxjbe sign1nomatch1:lea dx,nomatchmov ah,09hint 21hjmp againmatch1:lea dx,matchmov ah,09hint 21hlea dx,sentencesub di,dxmov cl,countsub di,cxdec dimov bx,dicall displayjmp again;子程序display,用于将二进制数转换成十六进制数display proc nearmov ch,2rotate:mov cl,4rol bl,clmov al,bland al,0fhadd al,30hcmp al,3ahjl printitadd al,7hprintit:mov dl,almov ah,2int 21hdec chjnz rotatelea dx,msg5mov ah,09hint 21hretdisplay endpexit:retmain endpcodes endsend start实验2.程序运行结果实验三分类统计字符个数一、实验说明:程序接收用户键入的一行字符(用回车符结束),并按字母,数字及其他字符分类计数,然后将结果存入以letter,digit和other为名的存储单元中。

1)程序采用0AH功能调用把键入字符直接送到缓冲区,然后再逐个取出,比较字符的ASCⅡ码,分类计数。

2)程序需进入debug运行并查看计数结果。

3)十进制显示输出,数值存放在AL中,运用MOV BL,10;DIV BL;分别将十位和个位输出。

二、程序代码:datas segmentstring db 80,?,80 dup(?)letter1 db 0ah,0dh,"letter:$"digit1 db 0ah,0dh,"digit:$"other1 db 0ah,0dh,"other:$"letter db 0digit db 0other db 0datas endscodes segmentmain proc farassume cs:codes, ds:datas start:mov ax, datasmov ds, axlea dx, stringmov ah, 0ahint 21hlea di, string + 2mov cl, string + 1add dx, 2again:mov al,[di]cmp al,0dhjz exitcmp al,30hjb other2;其他cmp al,39hjbe digital2;数字cmp al,41hjb other2;其他cmp al,5ahjbe letter2;字母cmp al,61hjb other2;其他cmp al,7ahjb letter2;字母other2:inc otherjmp againdigital2:inc digitinc dijmp againletter2:inc letterinc dijmp againexit:call crlflea dx,letter1mov ah,09int 21hxor ax, axmov al, lettercall displaycall crlflea dx,digit1mov ah,09int 21hxor ax, axmov al, digitcall displaycall crlflea dx,other1mov ah,09int 21hxor ax, axmov al, othercall displaymov ah,4chint 21hmain endp;子程序display,用于将二进制数转换成十进制数display proc nearmov bl, 10div blpush axmov dl, aladd dl, 30hmov ah, 2int 21hmov dl, ahadd dl, 30hmov ah, 2int 21hretdisplay endpcrlf proc nearmov ah, 02mov dl, 0dh int 21hmov dl, 0ah int 21hretcrlf endpcodes endsend start流程图实验四查找电话号码一、实验要求(1)要求程序建立一个可存放50项的电话号码表,每项包括人名及电话号码两部分;(2)程序可接受输入人名及相应的电话号码,并把它们加入电话号码表中;(3)凡有新的输入后,程序可按人名对电话号码表重新排序;(4)程序可接受需要查询电话号码的人名,并从电话号码表中查出其电话号码,再在屏幕上以如下格式显示出来。

Name tel××××××××二、设计说明(1)显示提示符’Input name:’;(2)调用子程序 input_name 接收人名;(3)调用子程序 stor_name 把人名存入电话号码表 tel_tab 中:(4)显示提示符’Input a telephone number:’;(5)调用子程序 inphone 接收电话号码,并把它存入电话号码表tel_tab中;(6)如输入已结束则调用 name_sort 子程序对电话号码表接人名排序;(7)显示提示符’Do you want a telephone number ?(Y/N)’;(8)回答N收退出程序;(9)回答Y则再显示提示符’name ?’;(10)调用子程序 input_name接收人名;(11)调用子程序 name_search 在电话号码表中查找所要的电话号码;(12)调用子程序 printline 按要求格式显示人名及电话号码;(13)重复查号提示符直至用户不要求查号为止。

相关文档
最新文档