当前位置:文档之家› 合肥工业大学汇编程序设计实验报告完整代码

合肥工业大学汇编程序设计实验报告完整代码

合肥工业大学计算机与信息学院实验报告课程:汇编语言程序设计专业班级:信息安全13-1学号:2013211869姓名:马骏实验一Debug程序的使用一.实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。

2、掌握8086/8088的寻址方式及多字节数据的处理方法。

二.实验内容1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。

2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。

要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。

三.实验过程和程序实验将”12345678H”和”FEDCBA98H”分别送入起始地址为DS:200H和DS:204H 的两个单元中。

还包含两个附加题,一是从DS:0000H 开始的5个16 位带符号数分别记为x,y,z,v,w,E命令初始化为:540,1,-1,1080,0, 试求w=(v-(x*y+z-540))/x,二是统计bx中1的个数四.实验结果(包括必要的截图)将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H 两个单元中。

DS:0204H和直接寻址方式实现数据相加寄存器间接寻址实现数据相加.附加题一:从DS:0000H开始的 5 个16 位带符号数分别记为x,y,z,v,w,用E命令初始化为:540,1,-1,1080,0, 试求w=(v-(x*y+z-540))/x附加题二:完成BX中1 的个数的统计。

五.实验体会通过本次实验,了解了使用debug的各种指令。

同时在debug下进行编程,比较麻烦。

由于是第一次编写汇编程序,还是需要多练习。

实验二汇编语言程序设计(顺序、循环)一.实验目的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')。

三.实验过程和程序1、计算表达式值(V–(X*Y+Z-720))/X;data segmentx dw 021chy dw 0001hz dw 0ffffhv dw 0438hw dw 0000hsum1 dw ?sum2 dw ?data endsassume cs:code,ds:datacode segmentstart:mov ax,datamov ds,axMOV AX,xIMUL Y ; x*yCX, AXMOVMOV BX, DXMOV AX, ZCWDADD CX, AXADC BX, DX ; x*y+zSUB CX, 540 ;?SBB BX, 0 ; x*y+z-540MOV AX, VCWDSUB AX, CXSBB DX, BX ; v-(x*y+z-540)IDIV X ; (v-(x*y+z-540))/x mov sum1,axmov sum2,dxmov ax,4c00hint 21hcode endsend start2、求一个班50名学生成绩的平均值(附加题:最大值和最小值,并将结果显示出来)data segmentdb 7,49 dup(6)max db ?min db ?result db 0data endsassume cs:code,ds:datacode segmentstart: mov ax,datamov ds,axmov ax,0mov cx,50mov di,0again:mov bx,0mov bl,[di]add di,1add ax,bxloop againmov bl,50div blmov result,almov di,50max2:sub di,1mov cx,50mov si,0mov al,[di]max1: cmp al,[si]jb max2add si,1loop max1mov max,almov di,50min2:sub di,1mov cx,50mov si,0mov al,[di]min1: cmp al,[si]jnb min2add si,1loop min1mov min,almov ax,4c00hint 21hcode endsend start3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:查找中间是否有‘asm'子串。

如果有,输出‘Yes';否则,输出‘No')。

data segmentdata2 db 50,?,50 dup('$')string db 'yes$'string1 db 'no$'data endsassume cs:code,ds:datacode segmentstart: mov ax,datamov ds,axmov ah,0ahmov dx,offset data2int 21hmov ah,2hmov dl,0ahint 21hmov ah,2hmov dl,0dhint 21hmov dx,offset data2+2mov ah,09hint 21hmov ah,2hmov dl,0ahint 21hmov ah,2hmov dl,0dhint 21hmov al,0hmov cx,47mov di,0again: mov al,[di+2]cmp al,61hjnz nextmov al,[di+3]cmp al,73hjnz nextmov al,[di+4]cmp al,6dhjnz nextjmp yesnext: add di,1loop againmov dx,offset string1mov ah,09hint 21hjmp endcodeyes:mov dx,offset stringmov ah,09hint 21hendcode: mov ax,4c00h int 21hcode endsend start四.实验结果(包括必要的截图)1、计算表达式值(V–(X*Y+Z-720))/X;2、求一个班50名学生成绩的平均值(附加题:最大值和最小值,并将结果显示出来)0030地址为平均值的商0032地址为最大值0034地址为最小值3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:查找中间是否有‘asm'子串。

如果有,输出‘Yes';否则,输出‘No')。

五.实验体会通过此次试验,了解了符号扩展指令的使用。

第二程序中,以及在输出时,输入的字符串末尾要注意加结束标志'$',还有在输出字符串前要先输出个回车换行,否则回车后看不到输出结果。

实验三汇编语言子程序设计(分支、子程序)一.实验目的1、掌握分支和子程序结构和设计方法;2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

3、通过汇编语言了解高级语言的参数传递等知识。

二.实验内容1、BL中的只有一位为1。

编写程序测试,并输出提示信息“The X Bit is 1”,要求:地址表和转移表。

2. 编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。

要求通过堆栈(寄存器、内存)传送所有参数。

3. 实践C?Asm的转换过程。

三.实验过程和程序1、BL中的只有一位为1。

编写程序测试,并输出提示信息“The X Bit is 1”,要求:地址表和转移表。

;bl have one 1 cout<<The X Bit is 1data segmentaddres dw fun8,fun7,fun6,fun5,fun4,fun3,fun2,fun1string8 db 'The 8 Bit is 1$'string7 db 'The 7 Bit is 1$'string6 db 'The 6 Bit is 1$'string5 db 'The 5 Bit is 1$'string4 db 'The 4 Bit is 1$'string3 db 'The 3 Bit is 1$'string2 db 'The 2 Bit is 1$'string1 db 'The 1 Bit is 1$'data endsassume ds:data,cs:code code segmentstart:mov ax,data mov ds,axmov bl,10hmov ax,0000hmov cx,8math: shl bl,1jc rightjmp nextright:mov dl,02hmul dlmov bp,axjmp addres[bp] next: inc axloop mathfun8:mov dx,offset string8 jmp coutfun7:mov dx,offset string7 jmp coutfun6:mov dx,offset string6 jmp coutfun5:mov dx,offset string5 jmp coutfun4:mov dx,offset string4 jmp coutfun3:mov dx,offset string3 jmp coutfun2:mov dx,offset string2 jmp coutfun1:mov dx,offset string1 jmp coutcout:mov ah,09hint 21hmov ah,4chint 21hcode endsend start2. 编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。

相关主题