汇编语言实验报告.docx
- 文档编号:17814918
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:32
- 大小:284.38KB
汇编语言实验报告.docx
《汇编语言实验报告.docx》由会员分享,可在线阅读,更多相关《汇编语言实验报告.docx(32页珍藏版)》请在冰点文库上搜索。
汇编语言实验报告
实验报告
实验课程:
IBM-PC汇编语言程序设计
学生姓名:
毛训星
学号:
6100410101
专业班级:
电气信息类III103班
2011年12月17日
南昌大学实验报告
南昌大学实验报告
---(4)汇编语言程序上机过程
学生姓名:
毛训星学号:
6100410101专业班级:
电Ⅲ103班
实验类型:
□验证■综合□设计□创新实验日期:
实验成绩:
一、实验目的
熟练掌握汇编语言程序的编辑、调试和运行的过程和方法。
了解汇编语言程序的汇编、运行环境。
二、实验内容
1.掌握常用的编辑工具软件(如WORD、EDIT)、MASM和LINK的使用;
2.伪指令:
SEGMENT,ENDS,ASSUME,END,OFFSET,DUP;
3.利用的INT21H的1号功能实现键盘输入的方法;
三、实验环境
PC微机
DOS操作系统或Windows操作系统
MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境
四、实验要求
1.仔细阅读有关伪指令SEGMENT,ENDS,ASSUME,END,OFFSET,DUP的内容;
2.了解利用的INT21H的1号功能实现键盘输入的方法,了解.EXE文件和.COM文件的区别及用INT21H4C号功能返回系统的方法;
3.阅读下面程序段。
五、主要实验步骤
程序:
datasegment
messagedb'Thisisasampleprogramofkeyboardanddisply'
db0dh,0ah,'Pleasestrikethekey!
',0dh,0ah,'$'
dataends
stacksegmentparastack'stack'
db50dup(?
)
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
movdx,offsetmessage
movah,9
int21h
again:
movah,1
int21h
cmpal,1bh
jeexit
cmpal,61h
jcnd
cmpal,7ah
jand
andal,11011111b
nd:
movdl,al
movah,2
int21h
jmpagain
exit:
movah,4ch
int21h
codeends
endstart
实验步骤:
1.用用文字编辑工具(记事本或EDIT)将源程序输入,其扩展名为.ASM。
2.用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。
若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。
3.用TYPE命令显示1产生的.LST文件。
4.用LINK将.OBJ文件连接成可执行的.EXE文件。
5.在DOS状态下运行LINK产生的.EXE文件。
即在屏幕上显示标题并提示你按键。
每按一键在屏幕上显示二个相同的字符,但小写字母被改成大写。
按ESC键可返回DOS。
若未出现预期结果,用DEBUG检查程序。
六、思考题
1、若在源程序中把INT21H的'H'省去,会产生什么现象?
代码编译连接均为正常,但是运行时无法输入与输出,也无法退出。
2、把INT21H4CH号功能改为INT20H,行不行?
更改后,编译链接均正常,输入输出也正常,但是按下ESC退出时会出现错误,错误如下:
七、参考资料
《IBM-PC汇编语言程序设计》
《汇编语言实验指导书》
南昌大学实验报告
---(7)子程序实验
学生姓名:
毛训星学号:
6100410101专业班级:
电Ⅲ103班
实验类型:
□验证■综合□设计□创新实验日期:
实验成绩:
一、实验目的
1.掌握主程序与子程序之间的调用关系及调用方法;
2.掌握子程序调用过程中近程调用与远程调用的区别;
3.掌握通过堆栈转送参数的方法。
二、实验内容
1.将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。
要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。
2.编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符”b”的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符”b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。
三、实验环境
PC微机
DOS操作系统或Windows操作系统
MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境
四、实验要求
1.第一个实验程序用子程序的近程调用实现。
由于在调用HEXASC子程序时,子程序又调用了DISP子程序,这叫子程序的嵌套调用。
实验过程中可以从堆栈的内容看到两个子程序的返回地址值。
由于是近调用,地址值只包括返回地址的段内偏移量。
在每个子程序的执行中,检查CS值是不变的。
2.第二个程序是利用远调用的方法调用子程序的。
在远调用情况下,主程序与子程序处在不同的逻辑代码段中,可在子程序执行中查看CS值,它与主程序中的CS值是不同的。
子程序调用后,堆栈中保留了返回地址的段地址及段内偏移量。
3.第二个程序中,主程序与子程序之间参数的传送是由堆栈实现的。
一段是将参数(此处是串首址TABLE,串的长度N及待统计的字符“b”)顺序压如堆栈,在子程序调用后,通过BP指针对堆栈中的参数访问,并将统计的结果通过堆栈返回。
有关该方法的原理此处不再介绍。
4.预习子程序设计的基本方法,根据实验内容要求,画出子程序及主程序的流程图;熟悉键盘键入字符串及用堆栈传送参数的程序段编制方法。
五、主要实验步骤
1.编辑、汇编两个源程序,生成相应的可执行文件(.EXE)
2.用DEBUG的R命令,T命令或G命令和D命令检查远程调用及近程调用时堆栈的变化。
特别是通过堆栈传送的参数和子程序取出的参数是返回参数的详细过程。
3.检查程序执行的结果是否正确。
实验内容1流程图:
主程序子程序HEXASC
子程序DISP
实验内容1结果:
实验内容2流程图:
主程序子程序
实验内容2结果:
实验内容1代码:
DATASEGMENT
BUFDB0ABH,0CDH,0DEH,01H,02H,03H
DB3AH,4BH,5CH,6FH
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEABX,BUF
MOVCX,0AH
LOP:
MOVAL,[BX]
CALLHEXASC
INCBX
LOOPLOP
MOVAH,4CH
INT21H
HEXASCPROCNEAR
PUSHCX
PUSHAX
MOVDL,AL
MOVCL,4
SHRDL,CL
CALLDISP
POPAX
MOVDL,AL
ANDDL,0FH
CALLDISP
POPCX
RET
HEXASCENDP
DISPPROCNEAR
CMPDL,9
JBENEXT
ADDDL,7
NEXT:
ADDDL,30H
MOVAH,2
INT21H
RET
DISPENDP
CODEENDS
ENDSTART
实验内容2代码:
DATASEGMENT
CHARDB'b'
BUFDB50H,?
50HDUP(?
)
DATAENDS
MCODESEGMENT
ASSUMECS:
MCODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEADX,BUF
MOVAH,10
INT21H
MOVDL,0AH
MOVAH,2
INT21H
LEASI,BUF
MOVCL,[SI+1]
MOVCH,0
INCSI
INCSI
MOVAL,CHAR
MOVAH,0
PUSHSI
PUSHCX
PUSHAX
CALLFARPTRCHECK
POPAX
PUSHAX
MOVDL,AL
MOVCL,4
SHRDL,CL
CMPDL,9
JBEJ1
ADDDL,7
J1:
ADDDL,30H
MOVAH,2
INT21H
POPAX
MOVDL,AL
ANDDL,0FH
CMPDL,9
JBEJ2
ADDDL,7
J2:
ADDDL,30H
MOVAH,2
INT21H
MOVAH,4CH
INT21H
MCODEENDS
SCODESEGMENT
ASSUMECS:
SCODE
CHECKPROCFAR
PUSHBP
MOVBP,SP
MOVSI,[BP+10]
MOVCX,[BP+8]
MOVAX,[BP+6]
XORAH,AH
AGAIN:
CMPAL,[SI]
JNENEXT1
INCAH
NEXT1:
INCSI
LOOPAGAIN
MOVAL,AH
MOV[BP+10],AX
POPBP
RET4
CHECKENDP
SCODEENDS
ENDSTART
六、思考题
分析远程调用与近程调用的区别,在用DEBUG有关命令观察时,执行过程有何不同。
答:
在近程调用中CS值不变,而在远程调用中CS值发生改变;近程调用中SP+2,远程调用中SP+4。
七、参考资料
《IBM-PC汇编语言程序设计》
《汇编语言实验指导书》
南昌大学实验报告
---(8)字符处理程序实验
学生姓名:
毛训星学号:
6100410101专业班级:
电Ⅲ103班
实验类型:
□验证■综合□设计□创新实验日期:
实验成绩:
一.实验目的
1.熟悉串操作指令的功能与应用;
2.掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序。
二.实验内容
1.字符串统计。
从键盘最多输入80个字符存放在STR开始的存储区中,统计其中含有小写字母的个数,将统计结果以两位十进制数显示在屏幕上。
2.删除重复字符。
从键盘最多输入80个字符存放在STR开始的存储区中,删除其中重复的字符,输出删除处理后的字符串。
三.实验要求
1.认真预习有关串操作的指令极其寻址方式的特点,能够正确使用串操作指令,并准备好数据。
2.依题意分析给出程序设计算法。
四.实验环境
PC微机
DOS操作系统或Windows操作系统
MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境RADASM
五.实验步骤
1.用1号系统调用从键盘键入一个字符串,然后统计其中小写字母的个数。
程序每次执行,都能得到不同的结果。
2.要求编写一个在同一个字符串中删除字符,并将其余字符向前递补的程序。
六.实验报告要求
1、对照参考程序,画出程序流程图。
2、总结字符串处理的编程方法,提出改进和完善此类程序的设计方案。
七.思考题
1.如果要求以INT21H的10号功能调用来实现字符串的输入,请修改程序;
2.如果要统计输入的数字字符个数,指出程序修改的地方;
3.如果输入的小写字母数小于10(如输入了8个小写字符,这时候参考程序会输出小写字母个数是08)时候,如何修改程序,使得输出小写字母只有一位数而不是两位(如输入小写字母个数为个时输出8而不是08)。
参考程序清单
1.统计小写字母个数的程序清单:
DATASEGMENT
MSG1DB'Inputastring:
',0AH,0DH,'$'
MSG2DB'Thenumberoflowercaseletteris:
$'
STRDB80DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
;输出提示
LEADX,MSG1
MOVAH,9
INT21H
LEADI,STR
MOVCL,0;CL用来记录输入字符数
AGAIN:
MOVAH,1
INT21H
CMPAL,0DH
JZDONE;输入回车键则转DONE
MOV[DI],AL
INCDI
INCCL
JMPAGAIN
DONE:
LEASI,STR
MOVCH,0;CX保存输入字符数
MOVBL,0;BL用来统计小写字符个数
CLD
CYCLE:
LODSB
CMPAL,'a'
JBNEXT
CMPAL,'z'
JANEXT
INCBL
NEXT:
LOOPCYCLE
;回车换行
MOVAH,2
MOVDL,0AH
INT21H
MOVDL,0DH
INT21H
;输出提示
LEADX,MSG2
MOVAH,9
INT21H
;以下显示输入小写字母个数的两位十进制数
MOVAL,BL;小写字符个数送AL
MOVAH,0;AX存放小写字符个数
MOVCL,10
DIVCL;十位数在AL中,个位数在AH中
MOVBX,AX;十位数在BL中,个位数在BH中
MOVDL,BL
MOVAH,2
ORDL,30H
INT21H;输出小写字母个数的十位数字
MOVDL,BH
ORDL,30H
MOVAH,2
INT21H;输出小写字母个数的个位数字
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2.删除字符串中重复字符的源程序清单:
DATASEGMENT
STRDB80DUP(?
)
LENDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX;初始化数据段和附加段为同一段值
LEASI,STR;SI<=输入串的首地址
;从键盘输入字符串
MOVCL,0;CL用来存放输入字符数
AGAIN:
MOVAH,1
INT21H
CMPAL,0DH;回车结束输入
JZIN_DONE
MOV[SI],AL
INCSI
INCCL
JMPAGAIN
IN_DONE:
MOVCH,0;CX存放输入字符数
MOVLEN,CX;将输入字符数保存到LEN
;将输入字符串中重复出现字符替换为0
LEASI,STR;SI<=输入串的首地址
MOVDI,SI
INCDI
AGN:
CMPCX,1
JZOK;只有剩一个字符就结束替换
PUSHCX;保护外层循环计数
MOVAL,[SI]
ANDAL,AL
JZNEXT;当前字符已被替换为0
L1:
CMPAL,[DI]
JNZL2
MOVBYTEPTR[DI],0
L2:
INCDI
LOOPL1;内部循环,扫描当前字符后面是否与当前字符相同,相同则用0替换
NEXT:
INCSI
MOVDI,SI
INCDI
POPCX
LOOPAGN
OK:
;将那些被替换成0的字符去掉
LEASI,STR;SI<=输入串的首地址
MOVCX,LEN
RPT:
ANDCX,CX
JZRTN;CX=0结束子程序
MOVAL,[SI]
ANDAL,AL
JNZNEXT1;当前字符不是被替换为0的字符
PUSHCX
MOVDI,SI
XORBX,BX
CLD
REPZSCASB
JNZL3
POPCX
JMPRTN;后面全是0,不用再继续
L3:
DECDI
MOVAL,[DI]
MOV[SI],AL
MOVBYTEPTR[DI],0
POPCX
NEXT1:
INCSI
DECCX
JMPRPT
RTN:
;回车换行
MOVAH,2
MOVDL,0AH
INT21H
MOVAH,2
MOVDL,0DH
INT21H
;输出结果
LEASI,STR;SI<=输入串的首地址
MOVCX,LEN
MOVAH,2
LOP:
MOVDL,[SI]
CMPDL,0
JZEXIT
INT21H
INCSI
LOOPLOP
EXIT:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
附件:
修改结果参考
1.
DATASEGMENT
BUFDB0ABH,0CDH,0DEH,01H,02H,03H
DB3AH,4BH,5CH,6FH
DATAENDS
STACKSEGMENTSTACK
DW10DUP(?
)
TOSEQUTHISWORD
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVCX,10
LEABX,BUF
AGAIN:
MOVAL,[BX]
CALLHEXASC
INCBX
LOOPAGAIN
MOVAH,4CH
INT21H
HEXASCPROCNEAR
MOVDL,AL
PUSHCX
MOVCL,4
SHRDL,CL
POPCX
CALLDISP;显示高位HEX数
MOVDL,AL
ANDDL,0FH
CALLDISP
RET
HEXASCENDP
DISPPROC
PUSHAX
CMPDL,9
JBENEXT
ADDDL,7
NEXT:
ADDDL,30H
MOVAH,2
INT21H;显示
POPAX
RET
DISPENDP
CODEENDS
ENDSTART
2.
DATASEGMENT
CHARDB'b'
BUFDB50H,?
50HDUP(?
)
DATAENDS
STACKSEGMENTSTACK
DW10DUP(?
)
TOSEQUTHISWORD
STACKENDS
MCODESEGMENT
ASSUMECS:
MCODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVSP,OFFSETTOS
LEADX,BUF
MOVAH,10
INT21H
LEASI,BUF
MOVCL,[SI+1]
MOVCH,0;CX中为字符串长度
INCSI
INCSI;SI指向串首址TABLE
MOVAL,CHAR
MOVAH,0;AX中为待查字符
PUSHSI
PUSHCX
PUSHAX;参数送堆栈
CALLCHECK
MOVAH,2
MOVDL,0AH
INT21H
MOVDL,0DH
INT21H
MOVDL,CHAR
MOVAH,2
INT21H
POPAX;统计个数在AL中
MOVDL,AL
ANDDL,0FH
CMPDL,9
JBENEXT
ADDDL,7
NEXT:
ADDDL,30H
MOVAH,2
INT21H;显示统计个数
MOVAH,4CH
INT21H
MCODEENDS
SCODESEGMENT
ASSUMECS:
SCODE
CHECKPROCFAR
PUSHBP
MOVBP,SP
MOVSI,[BP+10]
MOVCX,[BP+8]
MOVAX,[BP+6]
XORAH,AH
AGAIN:
CMPAL,[SI]
JNENEXT1
INCAH
NEXT1:
INCSI
LOOPAGAIN
MOVAL,AH
MOV[BP+10],AX
POPBP
RET4
CHECKENDP
SCODEENDS
ENDSTART
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 实验 报告