汇编语言上机实验指导书Word文件下载.docx
- 文档编号:19638574
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:28
- 大小:30.55KB
汇编语言上机实验指导书Word文件下载.docx
《汇编语言上机实验指导书Word文件下载.docx》由会员分享,可在线阅读,更多相关《汇编语言上机实验指导书Word文件下载.docx(28页珍藏版)》请在冰豆网上搜索。
实验准备
仔细阅读有关DEBUG命令的内容,对有关命令,都要事先准备好使用的例子。
作为例子,准备用A命令,输入在显示器上显示字符“S”的系统调用程序段。
阅读将AX左移9位的程序段。
4.
实验步骤
在DOS提示符下,进入DEBUG程序。
在DOS目录下启动DEBUG。
详细记录每一步所用的命令,以及查看结果的方法和具体结果。
5.
实验报告要求
如何启动和退出DEBUG程序。
整理每个DEBUG命令使用的方法,实际示例及执行结果。
启动DEBUG后,要装入某一个.EXE文件,应通过什么方法实现?
实验二分支程序实验(必做)
掌握分支程序的设计方法
掌握利用DEBUG修改参数、检查结果的方法。
掌握汇编语言源程序的编辑、汇编、连接及调试过程。
编写一个程序,显示AL寄存器中的两位十六进制数
编写一个程序,判别键盘上输入的字符;
若是1-9字符,则显示之;
若为A-Z或a-z字符,均显示“c”;
若是回车字符<
CR>
(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。
编写实验内容要求的两个程序。
写出调试以上程序,即修改程序参数,检查结果的操作方法。
熟悉源程序汇编、连接命令的使用方法即要回答的内容。
用EDIT或其它编辑软件,编写.ASM源程序,例如HEXASC.ASM及DSPKEY.ASM。
对其进行汇编及连接,产生.EXE文件。
对.EXE文件进行调试运行。
a.
用DEBUG调试运行,学会修改AL内容的方法。
b.
对DSPKEY.EXE键入不同的字符,分别进行调试。
c.
在MS-DOS下运行这两个.EXE文件。
画出两个程序的流程图,若要独立编写程序,应列出相应的程序清单。
说明本实验是如何利用DEBUG进行调试的。
6.
参考程序清单
显示AL中两位十六进制数程序:
;
DISPHEX.ASM
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAL,3EH
MOVBL,AL
MOVDL,AL
MOVCL,4
SHRDL,CL
CMPDL,9
JBENEXT1
ADDDL,7
NEXT1:
ADDDL,30H
MOVAH,2
INT21H;
显示高位ASCII码
MOVDL,BL
ANDDL,0FH
JBENEXT2
NEXT2:
显示低位ASCII码
MOVAH,4CH
INT21H
CODEENDS;
返回DOS
ENDSTART
显示键入字符程序
;
DISPKEY.ASM
CODESEGEMENT
MOVAH,1
等待键入字符,送AL
CMPAL,0DH;
是否是回车符?
JZDONE;
是则转DONE退出程序
CMPAL,’0’
JBNEXT
CMPAL,’9’
JACHARUP
JMPSTART
CHARUP:
CMPAL,41H
CMPAL,5AH
JACHRDN
DISPC:
MOVDL,’C’
NEXT:
CHRDN:
CMPAL,61H
CMPAL,7AH
JANEXT
JMPDISPC
DONE:
CODE:
ENDS
实验三循环程序实验(必做)
掌握循环程序的设计方法
进一步熟悉利用DEBUG程序修改参数的方法,并检查和验证结果的正确性。
学会针对不同的问题,选用不同的组织循环的方法。
说明本实验是如何利用DEBUG进行调试的
实验四子程序实验
(一)(必做)
本实验的目的在于让读者掌握同一模块调用的方法。
1.
实验目的
掌握主程序与子程序之间的调用关系及调用方法。
掌握子程序调用过程中近程调用与远程调用的区别。
掌握通过堆栈转送参数的方法。
2.
将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。
要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示.
编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符’b’的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符"b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数).
3.
实验说明
第一个实验程序用子程序的近程调用实现。
由于在调用HEXASC子程序时,子程序又调用了DISP子程序,这叫子程序的嵌套调用。
实验过程中可以从堆栈的内容看到两个子程序的返回地址值。
由于是近调用,地址值只包括返回地址的段内偏移量。
在每个子程序的执行中,检查CS值是不变的。
第二个程序是利用远调用的方法调用子程序的。
在远调用情况下,主程序与子程序处在不同的逻辑代码段中,可在子程序执行中查看CS值,它与主程序中的CS值是不同的。
子程序调用后,堆栈中保留了返回地址的段地址及段内偏移量。
第二个程序中,主程序与子程序之间参数的传送是由堆栈实现的。
一段是将参数(此处是串首址TABLE,串的长度N及待统计的字符“b”)顺序压如堆栈,在子程序调用后,通过BP指针对堆栈中的参数访问,并将统计的结果通过堆栈返回。
有关该方法的原理此处不再介绍。
4.
预习子程序设计的基本方法,根据实验内容要求,画出子程序及主程序的流程图。
熟悉键盘键入字符串及用堆栈传送参数的程序段编制方法。
5.
编辑、汇编两个源程序,生成相应的可执行文件(。
EXE)
用DEBUG的R命令,T命令或G命令和D命令检查远程调用及近程调用时堆栈的变化。
特别是通过堆栈传送的参数和子程序取出的参数是返回参数的详细过程。
检查程序执行的结果是否正确。
6.
实验报告要求
分析远程调用与近程调用的区别,在用DEBUG有关命令观察时,执行过程有何不同。
说明用堆栈传送参数的过程及其具体方法。
分析实验结果及所遇到问题,并说明解决的方法。
7.参考程序清单
(1)码型转换程序清单:
CONV.ASN
DATASEGMENT
BUFDB0ABH,0CDH,0DEH,01H,02H,03H
DB3AH,4BH,5CH,6FH
DATAENDS
CODE,DS:
DATA
MOVAX,DATA
MOVDS,AX
MOVCX,10
LEABX,BUF
AGAIN:
MOVAL,[BX]
CALLHEXASC
INCBX
LOOPAGAIN
HEXASCPROCNEAR
MOVDL,AL
PUSHCX
MOVCL,4
SHRDL,CL
POPCX
CALLDISP;
显示高位HEX数
ANDDL,0FH
CALLDISP
RET
HEXASCENDP
DISPPROP
JBENEXT
显示
RET
DISPENDP
CODEENDS
(2)统计并显示某键入字符的个数的程序:
:
COUNTER.ASM
CHARDB‘b’
BUFDB50H,?
50HDUP(?
)
DATAENDS
MCODESEGMENT
MCODE,DS:
DATA
LEADX,BUF
MOVAH,0ah
]INT21H
LEASIBUF
MOVCL,[SI+1]
MOVCH,0;
CX中为字符串长度
INCSI
INCSI;
SI指向串首址TABLE
MOVAL,CHAR
MOVAH,0;
AX中为待查字符
PUSHSI
PUSHCX
PUSHAX;
参数送堆栈
CALLCHECK
POPAX:
统计个数在AL中
MOVDL,CHAR
ANDDL,0FH
MOVAH,2
显示统计个数
MCODEENDS
SCODESEGMENT
SCODE
CHECKPROCFAR
PUSHBP
MOVBP,SP
MOVSI,[BP+10]
MOVCX,[BP+8]
MOVAX,[BP+6]
XORAH,AH
CMPAL.[SI]
JNENEXT1
INCAH
INCSI
MOVAL,AH
MOV[BP+10],AX
POPBP
RET4
CHECKENDP
实验五
子程序实验
(二)(选做)
本程序的目的在于使读者掌握模块间调用子程序的编写方法.
1.实验目的
了解多模块程序设计方法.
学会使用PUBLEC和EXTRN伪指令解决模块间的符号(如变量名,标号等)通信问题.
实验内容
(1)编写一个子程序,将主程序设定的内存中字符串的小写字母转换成大写字母并显示出来.主程序用另一个模块编写.
(2)编写一个子程序,将主程序指定的字符所在的地址返回给主程序,字符串与主程序在同一个模块.
3.实验准备
(1)仔细阅读教材中有关模块间通信的方法及模块程序设计的方法.
(2)弄清伪指令PUBLIC及EXTRN的功能及用法.
4.实验步骤
(1)分别对实验1和实验2的主、子模块进行汇编,在连接时,将它们装配成一个以.EXE为扩展名的可执行文件.观察汇编及连接过程中有无错误.
(2)对.EXE文件进行调试及运行.
(3)将实验1中的原字符串改为由键盘输入,然后由子模块将源串中的小写字母转换为大写字母,并将源串与转换后的两个字串分两行显示出来(设键入字串长度小于80个字符).
5.实验报告要求
(1)对源程序清单,画出相应的程序流程图.
(2)扼要总结多模块程序的特点和编写方法.
6.参考程序清单
转换字符串小写字母为大写字母的程序清单:
EXCHAR.ASM为主模块的文件名
EXCHAR.DNTOUP:
FAR
PUBLIC
STRING1,STRING2
DATA
SEGMENT
STRING1
DB‘THISISABOOK’,‘$’
STRING2
DB
80DUP(?
CODE
ASSUMECS:
CODE,DS:
START
MOV
AX,DATA
DS,AX
CALL
DNTOUP
AH,4CH
INT
21H
END
START
:
DNTOUP。
ASM为子模块的文件名
EXTRN
STRING1:
BYTE,STRING2:
BYTE
DNTOUP
PROC
FAR
BX,0
CYCLE:
AL,STRING1[BX]
CMP
AL,24H
;
是否是STRING1结尾
JZ
DONE
是“$”,转DONE
CMP
AL,61H
是小写字母么?
JB
NEXT
不是转NEXT
AL,7AH
JA
NEXT
SUB
AL,20H
转为大写字母
NEXT:
STRING2[BX],AL
INC
BX
JMPCYCLE
DONE:
AL。
‘$’
STRING2[BX],AL
;
不一个$
DL,0DH
AH,2
DL,0AH
21H
显示回车,换行
LEA
DX,STRING1
AH,9
INT
显示源串内容
DL,OAH
AH,2
回车换行
DX,OFFSETSTRING2
AH,9
显示转换后的大写串
RET
ENDP
END
(2)找指定字符,并返回地址植的程序清单
MAING。
ASM为主模块程序名
FINDC:
STRN
STRN
DB‘LINKDISPLAYSUBROUTING$’
ADDR
DW?
START:
MOVAX,DATA
MOVDS,AX
AH,1
FINDC
MOV
ADDR,DI
FINDC。
ASM为子模块程序名
STRN:
DI,STRN
AGAIN:
CMPBYTE
PTR[DI],‘$’
DONE
AL,[DI]
JNZ
DONE1:
DI
JMP
AGAIN
DI,0FFFFH
找不到返回0FFFFH
DONE1
FINDC
(3)如由键盘输入字符串,则可在程序1的主模块DATA段中加一行提示信息IMAGE:
IMAGE
DB‘INPUTASTRINGPLEASE:
$’然后在主模块的CALL指令前插入以下程序段
DX,IMAGE
DX,STRING2+1
MOVAH,0AH
将键入串存入STRING2
SI,STRING2+2
CL,0
DI,STRING1
AL,[SI]
[DI],AL
SI
MOVBYTEPTR[DI],‘$’
补一个$
说明:
此处先将键入字串存入STRING2,然后再将其字串部分传送到STRING1中,当然在定义STRING2时,应为:
80,?
80DUP(?
)。
实验六
字符处理程序实验(必做)
1.实验目的
(1)熟悉串操作指令的功能与应用
(2)掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序。
2.实验内容
(1)字符串统计。
自STRN开始的存储区中,有一个字符串,统计其中含有小写字母的个数,将统计结果以两位十进制数显示在屏幕上。
(2)在给定的字符串中,删除重复的字符,其余的字符向前递补。
3.实验准备
(1)熟悉字符处理的方法和字符处理程序的设计;
(2)认真预习有关串操作的指令极其寻址方式的特点,能够正确使用串操作指令,并准备好数据。
(3)按正常的方法将删除字符程序编成子程序,规定子程序的入口和出口参数。
4.实验步骤
(1)用1号系统调用从键盘键入一个字符串,然后统计其中小写字母的个数。
程序每次执行,都能得到不同的结果。
(2)实验2可参考教材第五章练习10的解法,但要编写一个在同一个字符串
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 上机 实验 指导书
![提示](https://static.bdocx.com/images/bang_tan.gif)