汇编实验报告.docx
- 文档编号:9500036
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:15
- 大小:78.27KB
汇编实验报告.docx
《汇编实验报告.docx》由会员分享,可在线阅读,更多相关《汇编实验报告.docx(15页珍藏版)》请在冰点文库上搜索。
汇编实验报告
汇编实验报告
姓名:
周翔
学院:
数学与计算机学院
班级:
大类1003班
学号:
100511310
指导教师:
黄川
2012年6月8日
实验一:
汇编语言编程环境入门(2学时)
一、实验目的与要求
通过书上82页示例3.1,熟悉Windows环境下,X86汇编语言的编译和调试过程。
二、实验环境
1.WindowsXP操作系统。
2.MASM集成环境,或其它编程工具。
三、实验内容
1.学习如何查找程序的编译错误并改正
2.运行程序,观察结果
3.学习如何调试程序。
四、实验步骤
1输入书上82页示例3.1(有机器同学最好预先输入);
2编译程序,定位和改正编译错误。
3运行程序,观察结果是否和预期复合。
4调试程序,特别需要熟悉以下调试命令:
a)-t:
单步命令
b)-g:
运行至某一指令
c)-q:
结束调试
d)-p:
运行一条语句
e)-d:
查看内存单元
f)-r:
查看寄存器单元
g)-u:
反汇编
具体代码如下:
DATASEGMENT
XDW0E98AH,80AFH,0FD32H,0F68FH
YDW9FD0H,70BAH,3D84H,89FEH
ZDW5DUP(?
)
DATAENDS
STACKSEGMENTPARASTACK'STACK'
DB100HDUP(?
)
STACKENDS
CODESEGMENT'CODE'
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
MAIN:
MOVAX,DATA
MOVDS,AX
MOVCX,4
MOVSI,0
CLC
GOON:
MOVAX,X[SI]
ADCAX,Y[SI]
MOVZ[SI],AX
INCSI
INCSI
LOOPGOON
RCLAX,1
ANDAX,1
MOVZ[SI],AX
MOVAX,4C00H
INT21H
CODEENDS
ENDMAIN
5、实验结果
实验二:
输入输出程序设计(2学时)
一、实验目的与要求
通过上机实验,掌握汇编语言下通过DOS系统调用实现键盘输入和屏幕输出程序的设计,为以后其它程序打下基础。
要求输入一个任意字符串,可以在屏幕上显示出。
二、实验环境
1)WindowsXP操作系统。
2)MASM集成环境,或其它编程工具。
三、实验内容
1.了解DOS系统调用初步用法和分类,熟悉对应系统调用的具体参数设置;
2.通过10号功能调用,把键盘上输入的字符串保存在内存单元中
3.调整输入的字符串格式,通过9号功能调用,在屏幕上输出对应字符串
四、实验步骤
1.按照格式定义对应输入数据缓存,存放输入的字符串。
2.设置参数,调用10号系统调用后,仔细观察输入数据缓存中内存单元各字节的变化。
3.调整格式,在系统实际输入字符串后面附加相应的字符(0DH,0AH,’$’)。
4.设置参数,调用9号系统调用后,观察输出。
具体代码如下:
.MODELSMALL
DATASEGMENT
MESG1DB'PLEASEINPUTORIGINALDATA',CR,LF,'$'
MESG2DB'INPUTCORRECT?
Y/N',CR,LF,'$'
MESG3DB'INPUTERRORAGAIN!
',CR,LF,'$'
BUFFERDB200
DB?
DB200DUP('$')
CREQU0DH
LFEQU0AH
DATAENDS
STACKSEGMENTPARASTACK'STACK'
DB100HDUP(?
)
STACKENDS
CODESEGMENT'CODE'
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
MAIN:
MOVAX,DATA
MOVDS,AX
AGAIN:
MOVDX,OFFSETMESG1
MOVAH,9
INT21H
LEADX,BUFFER
MOVAH,10
INT21H
LEADX,BUFFER+2
MOVAH,9
INT21H
LEADX,MESG2
MOVAH,9
INT21H
MOVAH,1
INT21H
CMPAL,'Y'
JZ@F
LEADX,MESG3
MOVAH,9
INT21H
JMPSHORTAGAIN
@@:
LEADI,BUFFER+2
MOVCL,BUFFER+1
MOVCH,0
PRINT:
MOVDL,[DI]
MOVAH,5
INT21H
INCDI
LOOPPRINT
CODEENDS
ENDMAIN
五、实验结果
实验三:
字符串操作(4学时)
一、实验目的与要求
通过上机实验,开始一个比较复杂的程序设计:
把任意输入字符串中“A”全部删除。
如果输入字符串没有“A”,显示“NOTFOUND”,如果有“A”,分两行显示删除前和删除后的字符串。
二、实验环境
1)WindowsXP操作系统。
2)MASM集成环境,或其它编程工具。
三、实验内容
1.通过字符串查找指令,找到对应字符并删除
2.通过循环指令,反复查找字符,直至没有
3.对应字符并删除实际上是依次把后面字符前移覆盖当前字符。
四、实验步骤
1.画出流程图,检查初步错误
2.编辑并输入程序。
3.编译程序,改正编译错误。
4.调试程序,改正逻辑错误
具体代码如下:
CodeSegment
AssumeCS:
Code,DS:
Code
;-------------------------------------
;功能:
显示指定地址(Str_Addr)的字符串
;入口:
;Str_Addr=字符串地址(要求在数据段)
;用法:
OutputStr_Addr
;用法举例:
OutputPromptStr
OutputMACROStr_Addr
leadx,Str_Addr
movah,9
int21h
EndM
;-------------------------------------
;功能:
显示、输出一个回车、换行
Output_CTLFprocNear
pushax
pushdx
movah,02h
movdl,0dh
int21h
movdl,0ah
int21h
popdx
popax
ret
Output_CTLFEndp
;-------------------------------------
Prompt_Str1db'Pleaseinputastring:
$'
Prompt_Str2db7,13,10,13,10,'NOTFOUND',13,10,13,10,'$'
Prompt_Str3db7,13,10,13,10,'Beforedelete:
$'
Prompt_Str4db7,13,10,'Deleted:
$'
Press_Keydb7,13,10,13,10,'Thecomplated.Pressanykeytoexit...$'
Start:
pushcs
popds
pushcs
popes;使数据段、附加段与代码段同段
Input_Str:
OutputPrompt_Str1;提示输入字符串
leadx,Buffer;字符串输入缓冲区地址
movah,0ah
int21h
leadi,Buffer[2];输入的字符串地址
xorch,ch
movcl,[di-1];实际输入的字符串长度
jcxzExit_Proc;若直接回车,没有输入任何字符,则结束程序
movbx,cx
inccx
moval,'A'
cld
repnzscasb;查找字符串中是否有'A'
jcxzNot_Found
OutputPrompt_Str3;提示显示删除'A'前的字符串
leadi,Buffer[2];输入的字符串地址
movBYTEptr[bx][di],'$';写字符串结束标志符
OutputBuffer[2];显示删除'A'前的字符串
OutputPrompt_Str4;提示显示删除'A'后的字符串
leadi,Buffer[2];输入的字符串地址
movsi,di
movcx,bx
inccx
Delete_A:
lodsb
cmpal,'A'
jz$+3
stosb
loopDelete_A
OutputBuffer[2];显示删除'A'后的字符串
callOutput_CTLF;输出一个回车、换行
callOutput_CTLF
jmpInput_Str;重新输入
Exit_Proc:
OutputPress_Key;提示操作完成,按任意键结束程序
movah,1
int21h
movah,4ch;结束程序
int21h
Not_Found:
OutputPrompt_Str2;提示字符串中没有'A'
jmpInput_Str;重新输入
Bufferdb255;字符串输入缓冲区
CodeENDS
ENDStart;编译到此结束
5、实验结果
实验四:
数值排序操作(4学时)
一实验目的与要求
通过上机实验,对数值进行冒泡法排序。
达到熟练掌握多重循环和子程序的设计。
二实验环境
1)WindowsXP操作系统。
2)MASM集成环境,或其它编程工具。
三实验内容与步骤
1.先不使用输入功能,直接在系统中定义多个0~9之间的数值,进行冒泡法排序。
2.在上一步正确完成情况下,加入键盘输入功能,输入多个0~9之间的数值,使用逗号或者空格分割。
得到输入字符串后,设计一个子程序,把输入字符串转换为多个数值。
3.在上一步正确完成情况下,输入任意10000以下数值,这时需要完成字符串“1234”到数值1234之间的转换。
具体代码如下:
DATASEGMENT;data就是声明变量
DATDB20,-10,80,-5,-70,-9,95,-15,0,40
COUNTDB10,10
dat2db10dup(0);声明一个数组
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVBL,1
LP1:
CMPBL,0
JELP4;相等质指令
XORBL,BL;将bl清零
MOVCL,COUNT
DECCL;减一
PUSHCX;
LEADI,DAT;
LP2:
MOVAL,[DI]
CMPAL,[DI+1];compare比较指令
JLELP3;小于等于就跳转指令
XCHG[DI+1],AL;交换指令
MOV[DI],AL
MOVBL,1
LP3:
INCDI
LOOPLP2;将cx中的值减1,然后判断ecx是否等于0,不为0则跳转到目的地址
POPCX
MOVCOUNT,CL
JMPLP1
LP4:
MOVCL,10
LEADI,DAT
SC:
MOVAX,0
MOVBH,2
MOVAL,[DI]
CMPAL,0
JGENEXT;大于等于指令
NEGAL;取反指令
PUSHAX
MOVAH,02H
MOVDL,'-'
INT21H;dos中断调用
POPAX
NEXT:
XORAH,AH
DIVCOUNT+1
MOVDH,AH
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
MOVAL,DH
XORAH,AH
ADDAX,3030H
MOVDL,AL
OUTP:
MOVAH,2
INT21H
DECBH
JZXT;判断是否为0,等于0的时候转移
MOVDL,BL
JMPOUTP;无条件跳转
XT:
DECCL
JZDONE
INCDI
JMPSC
DONE:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
实验结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 实验 报告