合肥工业大学汇编语言实验报告
合肥工业大学编译原理实验

宣城校区实验报告课程名称编译原理专业班级计算机0001班学生姓名及学号赵保飞 2015216768 指导教师李芒宏实验地点计算机中心楼第四机房2017 ~2018 学年第一学期《编译原理》课程实验报告实验名称词法分析设计姓名赵保飞系院专业计算机科学与技术班级计算机01班学号2015216768实验日期2017.10.18 指导教师李芒宏成绩一、实验目的和要求通过本实验的编程实践,使学生了解词法分析的任务,掌握词法分析程序设计的原理和构造方法,使学生对编译的基本概念、原理和方法有完整的和清楚的理解,并能正确地、熟练地运用。
二、实验原理(1)实验数据结构说明K[]String数组-关键字表;s[]char数组—分界符;m[]char数组—算术运算符;r[]String数组—关系运算符;ArrayList型String数组ci—常数;ArrayList型String数组id—标识符(2)实验算法描述(3)算法流程图三、源程序代码和测试结果package lexicalAnalysis;import java.util.*;import java.io.*;public class lexicalAnalysis{static Stringk[]={"for","main","if","while","void","public","static","printf","scanf","asm","do","return","typedef","auto","double","break", "short","using","default","long"};//关键字static char s[]={',',';','(',')','[',']','{','}'};//2分界符static char m[]={'+','-','*','/'};//3算术运算符static String r[]={"<","<=","=",">",">=","<>"};//4关系运算符ArrayList<String>ci=new ArrayList<String>();//5常数ArrayList<String>id=new ArrayList<String>();//6标识符String tempToken="";//临时存放组成一个“词”单位串int pint,row=1,line=1;//当前指针指示,行数,列数char ch;//存放最新读入源程序字符String instring;//存放输入de源程序代码public static void main(String[]args)throws Exception{// TODO Auto-generated method stublexicalAnalysis one=new lexicalAnalysis();System.out.println("单词"+"\t二元序列"+"\t类型"+"\t位置(行,列)");one.readtext();}boolean isdigit(char c){//判断所读字符是否为数字,是则返回ture,否则返回falseif(c>=48&&c<=57)return true;elsereturn false;}boolean isletter(char c){//判断所读字符是否为字母,是则返回true,否则返回falseif((c>64&&c<91)||(c>96&&c<123))return true;elsereturn false;}boolean isline(char c){//判断字符c是否是下划线"_"if(c=='_')return true;elsereturn false;}boolean remove(){//用于在判断关系运算符时,判断是否是要再读一个字符char b=instring.charAt(pint+1);//string类charAt() 方法用于返回指定索引处的字符。
汇编语言实验报告

汇编语言实验报告实验一实验目的:1. 掌握程序结构2. 掌握七种寻址方式3. 掌握三种类型指令(传送指令,算术指令,逻辑指令)4. 掌握数据定义方式及存储方式5. 掌握不同进制,正负数值,字符的表示实验要求:1. 编制完整顺序结构程序2. 包含上述七种寻址方式3. 至少三种以上数据定义4. 调试每条指令的执行结果,做好记录5. 记录内存地址分配和变化结果实验结果:1.部分代码及分析;=======================数据段=============D1 SEGMENTA1 DW 1122HA2 DB 5A3 DW 3344HA4 DW?COUNT EQU 6COUNT1 DW 0COUNT2 DW 0M DB 13,10,'MASM for Windows1213243524365 MASM for WINDOWS 121',13,10,'$'L DB50 DUP(0)N DW50D1 ENDS;代码段;=====A1+A2结果存放到AX中=====MOV AX,A1MOV BX,A3ADD AX,BX;=======七种寻址方式=====MOV BX,A4 ;立即数寻址,将a4的值赋到bx中mov AX,BX 将BX的值传送到AX,;MOV BX,[2000] ;直接寻址,bx的值由ds和所给的偏移地址确定SUB AX,BX ;AX-BX并将结果存入AX中MOV BX,AX ;寄存器寻址,将AX中的操作数赋值到BX中ADD AX,BX ;将BX于AX的值相加,并将结果存入AX中。
MOV CX,AX ;将AX的值赋到CX中。
MOV AX,[BX] ;寄存器间接寻址,操作数的物理地址由堆栈段寄存器SS与BX中的偏移地址构成;SUB AX,CX ;AX-CX并将结果存入AX中MOV BX,COUNT[BP]; 基址寻址,偏移地址是指令中给定的偏移量count和基数指针BP的内容之和。
汇编语言实验报告

实验一汇编程序的汇编及运行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的值为多少?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)编写源程序。
汇编语言编程实验报告

汇编语言编程实验报告学号:姓名:成绩:目录一、实验一: ................................................... 错误!未定义书签。
二、实验二: (4)三、实验三: (8)四、实验四: (10)五、实验五: ................................................... 错误!未定义书签。
六、实验六: (19)七、汇编实验总结 (23)实验一一.实验题目【汇编语言补充作业T20】编写完整程序,利用DOS系统功能调用,从键盘输入一个字符串,并将该字符串从屏幕上换行后并输出。
二.程序流程及思路实现字符串输入,需要分成三个步骤:1、在数据段中定义一个缓存区为存放字符串做准备;2、DOS系统功能调用0AH号子功能,(DS:DX)= 输入缓冲区首址;3、在输入的字符串尾加上‘$’字符,以作为输出结束条件。
实现字符串输出,则需要注意的问题是:1、缓冲区第三个字节才开始存放输入的字符,前两个字节分别存放缓冲区长度和字符串实际字符数;2、输出回车换行可利用字符串:CR DB 0AH,0DH,’$’。
三.源程序清单DATA SEGMENTN EQU 50MAXLEN DB N ;缓冲区字符的最大长度ACTLEN DB ? ;实际字符个数STRING DB N DUP(?) ;字符空间CR DB 0AH,0DH,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXLEA DX,MAXLENMOV AH,0AHINT 21H ;字符串输入MOV AH,09HLEA DX,CRINT 21H ;回车换行MOV BL,MAXLEN+1 ;取实际的字符长度MOV BH,0LEA SI,MAXLEN+2 ;取字符开始的首地址MOV BYTE PTR [SI+BX],'$' ;输出结尾要加上$MOV DX,SI ;把开始存放字符的首地址赋给DX MOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START四.结果拷屏实验二一. 实验题目【汇编语言补充作业T23】假设CX:BX中存放了4为非压缩的BCD码表示的十进制数4386,请编写完整程序将这个数转化成2进制数并存放到DI寄存器中。
计算机汇编语言实验报告

计算机汇编语言实验报告一、实验目的本实验旨在通过编写计算机汇编语言程序,加强对计算机组成原理和汇编语言的理解,同时熟悉实际编写和调试过程。
二、实验内容1.用汇编语言编写一个简单的计算器程序,实现加法和减法操作。
2.编译并运行程序,测试其功能的正确性。
3.运用调试工具进行程序的调试,检查代码的运行流程。
三、实验步骤1.确定程序功能和设计思路:本次实验的目标是编写一个计算器程序,能够对两个数进行加法和减法操作。
我们可以通过定义一些操作码来表示不同的操作,再通过输入不同的操作码来执行相应的操作。
2.编写汇编语言程序:首先,需要定义一些变量和常量来存储输入的数和操作码。
然后,使用汇编语言的运算指令和控制指令来实现加法和减法操作,并将结果存储到指定的变量中。
最后,使用输出指令来显示结果。
3.编译并运行程序:将汇编语言程序编译为机器码,并通过计算机的指令集执行程序。
4.调试程序:利用调试工具,逐步执行程序,检查代码的运行流程和结果的正确性。
如有错误,进行适当的修改和调试。
5.测试功能和性能:使用不同的数和操作码进行测试,验证程序的功能和正确性。
四、实验结果经过编写、编译和调试,我们成功实现了一个简单的计算器程序。
程序能够根据输入的操作码,对两个数进行加法和减法操作,并将结果显示出来。
经过多次测试,程序的功能、正确性和性能都符合预期要求。
五、实验感想通过本次实验,我们对计算机组成原理和汇编语言有了更深入的理解。
在编写程序的过程中,我们发现汇编语言相比高级语言更加底层,需要考虑更多的细节和机器指令的使用。
同时,我们也意识到了调试的重要性,调试工具能够帮助我们分析和修正代码的错误,提高程序的质量。
六、实验总结通过本次实验,我们对计算机汇编语言的应用有了更深入的了解。
我们掌握了汇编语言程序的基本结构和语法规则,学会了使用汇编语言指令进行计算和控制。
同时,我们也提升了调试和测试的能力,加深了对计算机组成原理和汇编语言的理解。
汇编语言实验报告

汇编语言实验报告实验一汇编语言的源程序的输入一、实验目的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. 掌握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命令检查键入的程序及对应的机器码。
(完整版)汇编语言实验报告5574277

合肥工业大学计算机与信息学院实验报告课程:汇编语言程序设计专业班级:学号:姓名:实验一Debug程序的使用一.实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。
2、掌握8086/8088的寻址方式及多字节数据的处理方法。
二.实验内容1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。
2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。
要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。
三.实验过程和程序1.e ds:0200 78 56 34 12e ds:0204 98 BA DC FE2.直接寻址:mov 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,[si+2]add ax,[di]adc dx,[di+2]mov [bx],axmov [bx+2],dx附加题1e ds:0000 1c 02e ds:0002 01 00e ds:0004 FF FFe ds:0006 38 04e ds:0008 00 00Microsoft Windows [???? 6.1.7600]???????? (c) 2009 Microsoft Corporation???????????????? C:\Users\Administrator>debug-e ds:0000 1c 02-e ds:0002 01 00-e ds:0004 FF FF-e ds:0006 38 04-e ds:0008 00 00-a13B3:0100 mov ax,[0000]13B3:0103 mov bx,[0002]13B3:0107 imul bx13B3:0109 mov cx,ax13B3:010B mov bx,dx13B3:010D mov ax,[0004]13B3:0110 cwd13B3:0111 add cx,ax13B3:0113 adc bx,dx13B3:0115 sub cx,21c13B3:0119 sbb bx,013B3:011C mov ax,[0006]13B3:011F cwd13B3:0120 sub ax,cx13B3:0122 sbb dx,bx13B3:0124 mov bx,[0000]13B3:0128 idiv bx13B3:012A mov [0008],ax13B3:012D-g =0100 012dAX=0002 BX=021C CX=FFFF DX=0001 SP=FFEE BP=0000 SI=0000 DI=0000DS=13B3 ES=13B3 SS=13B3 CS=13B3 IP=012D NV UP EI PLZR AC PE CY13B3:012D 0000ADD [BX+SI],AL DS:021C=00-四.实验结果1.利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Mov bx,y
Imul bx
Mov cx,ax Mov bx,dx Mov ax,z Cwd Add cx,ax Adc bx,dx Sub cx,720 Sbb bx,0 Mov ax,v Cwd Sub ax,cx Sbb dx,bx Mov bx,x Idiv bx Mov sum1,ax Mov sum2,dx
mov dl,23h ;"#"
mov ah,2 int 21h
mov bx,sum2 mov ch,4 mov cl,4 again1: rol bx,cl mov dl,bl and dl,0fh cmp dl,0ah jl next1 add dl,37h ;"A"-"F" jmp down1 next1: add dl,30h ;"0"-"9" down1: mov ah,2 int 21h dec ch jnz again1
mov dl,23h ;"#"分开不同数据 mov ah,2 int 21h
mov bl,avg2 ;平均值的余数 call sub
mov dl,23h ;"#"分开不同数据 mov ah,2 int 21h
mov bl,max ;最大值 call sub
mov dl,23h ;"#"分开不同数据 mov ah,2 int 21h
–G =100 0116 ↙ 9、再用“D”命令观察 DS:0200H~DS:020BH 字节单元中的内容
–D 200 20B↙ 10、用“T”单步操作命令对源程序单步执行,观察 AX、BX、CS、IP 寄存器内容的变
化,并与预计的结果相比较。
四. 实验结果(包括必要的截图)
五. 实验体会 这次的实验让我学会了 DEBUG 的运用,了解到了 DEBUG 对于程序的调试
mov bl,min ;最小值 call sub
mov ax,4c00h int 21h
sub proc
mov ch,2 mov cl,4 again2: rol bl,cl mov al,bl and al,0fh
cmp al,0ah jl next2 add al,37h ;"A"-"F" jmp down1 next2: add al,30h ;"0"-"9" down1: mov dl,al mov ah,2 int 21h dec ch jnz again2 ret sub endp code ends end start
合肥工业大学 计算机与信息学院
实验报告
课 程:汇编语言程序设计 专业班级:计算机科学与技术 13-1 班 学 号:梁壮壮 姓 名: 2013211622
实验一 Debug 程序的使用
一. 实验目的 1、熟悉 DEBUG 程序中的命令,学会在 DEBUG 下调试运行汇编语言源程序。 2、掌握 8086/8088 的寻址方式及多字节数据的处理方法。
start: mov ax,data
mov ds,ax
lea dx,buf
;输入字符串
mov ah,10
int 21h
lea dx,crlf
;输出换行
mov ah,9
int 21h
mov bl,buf+1 mov bh,0 mov byte ptr buf+2[bx], '$' lea dx,buf+2 mov ah,9 ;输出字符串 int 21h
6、程序未执行前,用“R”命令观察,相关寄存器的内容。 –R↙
如:(AX)= ,(BX)= ,(SI)= , (DI)= ,(CS)= ,(IP)= 。
7、在程序未执行前,用“D”命令观察 DS:0200H,DS:0204H、DS:0208H 单元的内 容
–D 200 20B ↙ 8、用“G”命令运行源程序
3. data segment buf db 50 ;定义缓冲区 db 40 db 40 dup(0) crlf db 0dh,0ah,'$' ;回车换行 data ends
stack segment stack db 100 dup(0) stack ends
code segment
assume ds:data, ss:stack, cs:code
三. 实验过程和程序
程序:
1.
Data segment
X dw 1
Y dw 720
Z dw -1
V dw 1
Sum1 dw ?
Sum2 dw ?
Data ends
Code segment
Assume cs:code ds:data
Start:
mov ax,data
Mov ds,ax
Mov ax,x
;x*y
;计算字符串实际字符个数 ;在串尾补入'$'
mov ah,4ch int 21h code ends
end start
四. 实验结果(包括必要的截图) 第 1 题截图
第 2 题截图
第 3 题截图
五. 实验体会 在这一次的实验中用到 CBW 和 CWD 命令来扩展符号位,解决处理数据的
时候数据类型不匹配的问题。同时也学到了从键盘上读取字符以及打印字符的 方法。
二. 实验内容 1、利用 DEBUG 程序中的“E”命令,将两个多字节数“003F1AE7H”和 “006BE5C4H”分别送入起始地址为 DS:0200H 和 DS:0204H 两个单元中。 2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将 DS:0200H 单元和 DS:0204H 单元中的数据相加,并将运算结果存放在 DS:0208H 单元中。 要求:
功能。
实验二 汇编语言程序设计(顺序、循环)
一. 实验目的
1、掌握顺序和循环程序结构和设计方法; 2、熟悉在 PC 机上建立、汇编、连接、调试和运行 8086/8088 汇编语言程序的过程。
二. 实验内容 1、X、Y、Z、V 均为字变量,在 X、Y、Z、V 字单元中存放是 16 位带符号数。 试编写汇编语言程序完成以下功能: ①计算表达式值(V–(X*Y+Z-720))/X; ②将上述表达式运算结果整数放在 SUM1 单元,余数放在 SUM2 单元。 2、求一个班 50 名学生成绩的平均值(附加题:最大值和最小值,并将结果显示 出来) 3、从键盘读入一个字符串,以 Enter 结束,字符串不超过 50 个字符,并打印 该字符串(附加题:查找中间是否有‘asm’子串。如果有,输出‘Yes’;否则, 输出‘No’)。
本次实验的内容均在 DEBUG 下完成,实现数据的装入、修改、显示;汇编 语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。
三. 实验过程和程序
1、启动 DOS 操作系统 2、运行 程序(若当前盘为 C)
C:>DEBUG↙ – ;(“–”为 DEBUG 提示符,仅当屏幕出现该提示符后,才可输入 DEBUG 命令) 4、用“A”命令编辑和汇编源程序 –A ↙ 186E:0100 MOV AX,[0200]↙ 186E:0103 MOV BX,[0202]↙ 186E:0107 ADD AX,[0204]↙ 186E:010B ADC BX,[0206]↙ 186E:010F MOV [0208],AX↙ 186E:0112 MOV [020A],BX↙ 186E:0116 ↙ 5、用“U”命令反汇编验证源程序 –U CS:0100↙ 186E:0100 A10002 MOV AX,[0200] 186E:0103 8B1E0202 MOV BX,[0202] 186E:0107 03060402 ADD AX,[0204] 186E:010B 131E0602 ADC BX,[0206] 186E:010F A30802 MOV [0208],AX 186E:0112 891E0A02 MOV [020A],BX 186E:0116 –
;------循环开始-------MOV CX, 8 GOGO: SHL AL,1 ;-------跳转------------JC EXIT add dx,3 LOOP GOGO ;************************ EXIT: MOV AH,9 LEA SI,JMPTABLE ADD SI,DX JMP SI JMPTABLE: JMP NEAR PTR L1 JMP NEAR PTR L2 JMP NEAR PTR L3 JMP NEAR PTR L4 JMP NEAR PTR L5 JMP NEAR PTR L6 JMP NEAR PTR L7 JMP NEAR PTR L8 L1: LEA DX,S1 JMP DONE L2: LEA DX,S2 JMP DONE L3: LEA DX,S3 JMP DONE L4: LEA DX,S4 JMP DONE L5:
;x*y+z
;x*y+z-720 ;v-(x*y+z-720) ;(v-(x*y+z-720))/x ;sum1 存商,sum2 存余数
mov bx,sum1 mov ch,4 mov cl,4 again: rol bx,cl mov dl,bl and dl,0fh cmp dl,0ah jl next add dl,37h ;"A"-"F" jmp down next: add dl,30h ;"0"-"9" down: mov ah,2 int 21h dec ch jnz again
mov si,0;找最小值 mov cx,50 mov al,grade[0] again1: cmp al,grade[si] jna next1 mov al,grade[si] next1: inc si loop again1 mov min,al