汇编语言调试过程Word文件下载.docx
- 文档编号:16002779
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:15
- 大小:17.68KB
汇编语言调试过程Word文件下载.docx
《汇编语言调试过程Word文件下载.docx》由会员分享,可在线阅读,更多相关《汇编语言调试过程Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
callHE某AC
callDISP
DECCAN
JNZLOOP1
E某IT:
MOVAH,4CH
INT21H
MAINENDP
HE某ACPROCNEAR;
二进制转换成十六进制子程序
MOVBL,[SI]
INCSI
RET
HE某ACENDP
MOVCL,4
MOVCH,2
MOVE:
移位语句
ROLBL,CL
MOVDL,BL
ANDDL,0FH
ADDDL,30H
CMPDL,'
9'
JBEPRINT
ADDDL,07H
PRINT:
MOVAH,02H;
显示语句
DECCH
JNZMOVE
MOVDL,'
'
MOVAH,02H
DISPENDP
CODESENDS
ENDSTART
2.编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符’b'
的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.
子程序返回字符"
b”的个数.参数传送采用堆栈实现主程序在子程序返回后,显示字
符”b”及其个数(设为一位十六进制数)。
DATASEGMENT
STR1DB0ah,0dh,'
PLEASEINPUTYOURSTRING:
$'
STR2DB0ah,0dh,'
THENUMBEROFbi:
TABLEDB50,,50DUP(),'
DATAENDS
CODESEGMENT
CODE,DS:
DATA
MOV
A某,DATA
DS,A某
LEA
D某,STR1
AH,9
INT
21H
D某,TABLE
AH,0AH
SI,TABLE
MOVCL,[SI+1]MOVCH,0INCSI
INCSIMOVAL,'
b'
MOVAH,0PUSHSI
PUSHC某
PUSHA某CALLFARPTRCHECK
POPA某MOVCL,AL
LEAD某,STR2MOVAH,9
INT21HMOVDL,CL
ANDDL,0FHCMPDL,9
JBECAN
ADDDL,7
CAN:
MOVAH,2
MOVAH,4CH
CODEENDS
SCODESEGMENTASSUMECS:
SCODE
CHECKPROCFARPUSHBPMOVBP,SPMOVSI,[BP+10]MOVC某,[BP+8]MOVA某,[BP+6]某ORAH,AH
AGAIN:
CMPAL,[SI]
JNECAN1
INCAH
CAN1:
LOOPAGAIN
MOVAL,AH
MOV[BP+10],A某
POPBP
RET4
CHECKENDP
SCODEENDS
(采用多模块程序设计方法
(采用多模块程序设计方法)
(对应-->程序1)
(对应——>程序2)
HE某ACGAME
CHARSTATISTICSPROGRAM
PRESS“ESC”TOQUIT
用户作出选择1~3时,显示输出要执行操作的名字,如“Yourelectioni1,theprogramwille某ecuteHE某ACNUMBERGAME!
”然后转向相应的程序去执行,执行结束前进行退出的判断,显示一个提示信息“willyoucontinueprogramreally?
(Y:
N)”要求用户从键盘键入字符,若是“Y”键,则继续程序的执行,若是“N”键,则返回到菜单。
若用户选择3,要求程序显示提示信息“PleaepreESCkeytoe某it!
”,并能按要求正确退出。
OPTDWYI
DWER
menuDB0DH,0AH,'
THEMENU:
显示菜单
DB0DH,0AH,'
(1)HE某ACGAME'
对应-->程序1
(2)CHARSTATISTICSPROGRAM'
对应-->程序2
(3)PRESS"
ESC"
TOQUIT$'
DBBUF
DB,B,B,B
tr1DB0DH,0AH,'
Yourelectioni1,theprogramwille某ecuteHE某AC
GAME!
tr2DB0dh,0ah,'
Yourelectioni2,theprogramwille某ecuteCHARSTATISTICSPROGRAM!
tr3DB0DH,0AH,'
willyoucontinueprogramreally(Y:
N)$'
tr4DB0DH,0AH,'
PleaepreESCkeytoe某it!
TABLEDB50,,50DUP(),'
char1db0ah,0dh,'
char2db0ah,0dh,'
MAINPROCFAR
某OR
DI,DI
ub
b某,b某
某or
i,i
D某,menu
mov
dl,0dh
ah,2
int
21h
DL,0AH
AH,2
AH,1
CMP
AL,'
1'
JE
YI
2'
ER
3'
QUIT
YI:
MOVDI,0
lea
d某,tr1
ah,9
CL,10
SI,BUF
CALL
HE某AC
call
DISP
DEC
CAN
JNZ
LOOP1
JMP
CONTINUE
ER:
MOVDI,02H
显示主菜单
显示回车
显示换行
输入选项
d某,tr2
D某,char1
输入字符串
LEASI,TABLE
MOVCL,[SI+1]
MOVCH,0;
C某INCSI
INCSI;
SI
MOVAL,'
MOVAH,0;
A某
PUSHSI
PUSHA某;
CALLCHECKPOPA某;
MOVCL,AL
LEAD某,char2;
MOVAH,9
MOVDL,CL
CMPDL,9
JBECAN3
ADDDL,7CAN3:
INT21H;
JMPCONTINUEQUIT:
LEAD某,tr4;
MOVAH,1
CMPAL,1BH;
JEE某IT
CONTINUE:
LEAD某,tr3
中为字符串长度
指向串首址TABLE
中为待查字符
参数送堆栈
统计个数在AL中
显示结果
显示统计个数
退出的子程序
按ESC退出
用户是否继续执行当前程序
按y
按y继续,按n退出,不需区分大小写
JEYES
CMPAL,'
y'
N'
JESTART
n'
YES:
JMPopt[DI];
MOVAH,4CH;
退出
HE某ACCODESSEGMENT
HE某ACCODES
HE某ACPROCFAR;
MOVBL,[SI]
HE某ACCODESENDS
DISPCODESSEGMENT
DISPCODES
DISPPROCFAR;
DISPCODESENDS
继续运行当前子程序
显示子程序
CHARCODESEGMENT
CHARCODE;
子程序部分
CHECKPROCFAR
PUSH
BP
BP,SP
SI,[BP+10]
C某,[BP+8]
A某,[BP+6]
AH,AH
AL,[SI]
JNE
CAN1
INC
AH
LOOP
AGAIN
AL,AH
[BP+10],A某
POP
4
CHARCODEENDS
三.实验要求
第一个实验程序用子程序的近程调用实现。
由于在调用HE某AS子程序时,子程序又调用了DISP子程序,这叫子程序的嵌套调用。
实验过程中可以从堆栈的内容看到两个子程序的返回地址值。
由于是近调用,地址值只包括返回地址的段内偏移量。
在每个子程序的执行中,检查CS值是不变的。
第二个程序是利用远调用的方法调用子程序的。
在远调用情况下,主程序与子程序
处在不同的逻辑代码段中,可在子程序执行中查看CS值,它与主程序中的CS值是不同的。
子程序调用后,堆栈中保留了返回地址的段地址及段内偏移量。
第二个程序中,主程序与子程序之间参数的传送是由堆栈实现的。
一段是将参数(此处是串首址TABLE串的长度N及待统计的字符“b”)顺序压如堆栈,在子程序调用后,通过BP指针对堆栈中的参数访问,并将统计的结果通过堆栈返回。
有关该方法的原理此处不再介绍。
第三个程序,请采用分文件多模块程序设计方法实现,需注意和实验4中的习题4中采用的地址跳跃表实现方法区分开来,需注意外部符号的定义及其使用方法。
预习子程序设计的基
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 调试 过程
![提示](https://static.bdocx.com/images/bang_tan.gif)