汇编语言程序设计.ppt
- 文档编号:2641850
- 上传时间:2022-11-04
- 格式:PPT
- 页数:100
- 大小:455KB
汇编语言程序设计.ppt
《汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计.ppt(100页珍藏版)》请在冰豆网上搜索。
应用程序示例应用程序示例代码转换代码转换代码转换是程序设计中的常见问题。
代码转换是程序设计中的常见问题。
由于涉及到键盘输入、屏幕显示、打印机输出由于涉及到键盘输入、屏幕显示、打印机输出等等I/O操作往往都是处理字符的操作往往都是处理字符的ASCII码值码值;作为对比:
在计算机内部,指令运算的对象和作为对比:
在计算机内部,指令运算的对象和结果都是二进制编码:
结果都是二进制编码:
一串一串0、1代码代码。
输出显示的格式可能是二进制数、十进制数或输出显示的格式可能是二进制数、十进制数或者十六进制数,所以很多场合都要进行者十六进制数,所以很多场合都要进行代码转代码转换换。
例例把键盘上输入的一位十进制数把键盘上输入的一位十进制数(ASCII码码)以二进制以二进制方式显示方式显示(ASCII码码)。
EXE格式程序清单格式程序清单DATASEGMENTUSE16MESG1DBPleaseEnter!
0DH,0AH,$MESG2DB-Error!
$DATAENDSCODESEGMENTUSE16ASSUMECS:
CODE,DS:
DATABEG:
MOVAX,DATAMOVDS,AXMOVAH,9MOVDX,OFFSETMESG1INT21HMOVAH,1INT21H;输入一个字符输入一个字符CMPAL,39HJAERROR;如果大于如果大于39H则出错则出错CMPAL,30HJBERROR;或或JC:
如果小于如果小于30H同样出错同样出错SUBAL,30H;或或ANDAL,0FHMOVBL,ALMOVAH,2MOVDL,=INT21HCALLDISPMOVAH,2MOVDL,BINT21HJMPEXITERROR:
MOVAH,9MOVDX,OFFSETMESG2INT21HEXIT:
MOVAH,4CHINT21HDISPPROCMOVCX,8LAST:
MOVDL,0RCLBL,1JNCNEXTMOVDL,1NEXT:
MOVAH,2INT21HLOOPLASTRETDISPENDPCODEENDSENDBEGCOM格式程序清单格式程序清单.486CODESEGMENTUSE16ASSUMECS:
CODEORG100HSTART:
JMPBEGMESG1DBPleaseEnter!
0DH,0AH,$MESG2DB-Error!
$BEG:
MOVAH,9MOVDX,OFFSETMESG1INT21HMOVAH,1INT21HCMPAL,39HJAERRORCMPAL,30HJBERRORSUBAL,30HMOVBL,ALMOVAH,2MOVDL,=INT21HCALLDISPMOVAH,2MOVDL,BINT21HJMPEXITERROR:
MOVAH,9MOVDX,OFFSETMESG2INT21HEXIT:
MOVAH,4CHINT21H;-DISPPROCMOVCX,8LAST:
MOVDL,0RCLBL,1JNCNEXTMOVDL,1NEXT:
MOVAH,2INT21HLOOPLASTRETDISPENDPCODEENDSENDSTART就本例而言,就本例而言,COM文件体积为文件体积为110个字节,而个字节,而EXE文件为文件为625个字节。
个字节。
显然,显然,COM文件比文件比EXE文件大大节省了空间。
文件大大节省了空间。
例例把两个字节存储单元把两个字节存储单元X和和X+1中中低低4位位存储的两个存储的两个0到到9之之间的数间的数(非压缩非压缩BCD码码)合并成一个合并成一个压缩压缩BCD码码,结果存放到,结果存放到字节单元字节单元Y中。
中。
解解:
程序如下程序如下:
DATASEGMENT;数据段数据段XDB5,7YDB?
DATAENDSCODESEGMENT;代码段代码段ASSUMECS:
CODE,DS:
DATASTARTPROCFAR;定义定义FAR类型过程类型过程PUSHDS;预留返回预留返回DOS地址地址MOVAX,0PUSHAXMOVAX,DATA;初始化初始化DSMOVDS,AXMOVAL,X;取取BCD码的高码的高4位数位数MOVCL,4SHLAL,CLMOVBL,X+1;取取BCD码的低码的低4位位ANDBL,0FHORAL,BL;合并结果合并结果;能否改为能否改为XOR或或ADDMOVY,AL;存存BCD码到码到Y单元单元RETSTARTENDPCODEENDSENDSTART;源程序结束源程序结束例例把一个字单元的把一个字单元的4位位BCD码转换成二进制数。
码转换成二进制数。
CODESEGMENTUSE16ASSUMECS:
CODEBCD_NUMDW4567H;4567H=7+10*(6+10*(5+10*(4+10*0)BEG:
MOVCX,4MOVAX,0;存放中间结果存放中间结果AGAIN:
ROLBCD_NUM,4MOVBX,BCD_NUMANDBX,000FH;依次取出依次取出BCD_NUM的千、百、的千、百、十、个位的十、个位的BCD码码CALLMUL10LOOPAGAINDISP:
MOVBP,AXMOVCX,16LAST:
MOVAL,0RCLBP,1ADCAL,0MOVAH,0EHINT10HLOOPLASTMOVAH,4CHINT21HMUL10PROCMOVDX,10MULDXADDAX,BX;乘积的高乘积的高16位存放在位存放在DX,始终为始终为0RETMUL10ENDPCODEENDSENDBEG特例:
一个不大于特例:
一个不大于99的的BCD数可以直接用数可以直接用AAD指令求出等值的二进制数。
指令求出等值的二进制数。
MOVAX,0908HAAD进制转换进制转换进制转换过程中经常利用代码转换。
进制转换过程中经常利用代码转换。
例例把一个把一个16位二进制数转换成位二进制数转换成十六十六进制数显示。
进制数显示。
.486DATASEGMENTUSE16NUMDW0001101000101011B;1A2BHBUFDB4DUP(?
),H$DATAENDSCODESEGMENTUSE16ASSUMECS:
CODE,DS:
DATABEG:
MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUF;存放转换后的存放转换后的16进制数进制数ASCII码码MOVDX,NUM;取出二进制数取出二进制数SALEDX,16MOVCX,4;一个一个16位二进制数包括位二进制数包括4位位16进制数进制数LP:
ROLEDX,4;图示图示EDX/DX/DL变化变化ANDDL,0FH;DL低低4位二进制必定位二进制必定介于介于015CMPDL,10JBNEXTNEXT:
ADDDL,30H;09的的ASCII介于介于30H39H、与数值、与数值09相差相差30HMOVSI,DLINCSILOOPLPMOVDX,NUM;取出二进制数取出二进制数SALEDX,16MOVCX,4;一个一个16位二进制数包括位二进制数包括4位位16进制数进制数LP:
ROLEDX,4;图示图示EDX/DX/DL变化变化ANDDL,0FH;DL低低4位二进制必定位二进制必定介于介于015CMPDL,10JBNEXTADDDL,7;A的的ASCII与与10相差相差:
37HNEXT:
ADDDL,30H;09的的ASCII介于介于30H39H、与数值、与数值09相差相差30HMOVSI,DLINCSILOOPLPMOVAH,9MOVDX,OFFSETBUFINT21HMOVAH,4CHINT21HCODEENDSENDBEG例例二进制数转换成十进制数显示。
二进制数转换成十进制数显示。
二进制数转换成十进制数有多种方法,即比较二进制数转换成十进制数有多种方法,即比较法、恢复余数法和除法求余。
法、恢复余数法和除法求余。
8位位二进制数转换二进制数转换比较法比较法程序清单程序清单思路:
需要注意:
必须事先确定:
操作数的思路:
需要注意:
必须事先确定:
操作数的字字长长!
CMPDISPMACRONNLOCALLAST,NEXTMOVDL,0LAST:
CMPBEN,NNJCNEXTINCDLSUBBEN,NNJMPLASTNEXT:
ADDDL,30HMOVAH,2INT21HENDMCODESEGMENTUSE16ASSUMECS:
CODEBENDB10101110B;等于十进制数等于十进制数174BEG:
CMPDISP100;求求百位百位上的数字上的数字CMPDISP10;求求十位十位上的数字上的数字CMPDISP1;求求个位个位上的数字上的数字MOVAH,4CHINT21HCODEENDSENDBEG特例:
一个不大于特例:
一个不大于99的二进制数,转换成十进制的二进制数,转换成十进制数显示更简单。
数显示更简单。
MOVAX,01100010B;AH=0,AL=98AAM;AH=09H,AL=08HADDAX,3030H;AH-39H,AL=38HPUSHAXROLAX,8;AH=38H,AL=39HMOVAH,0EHINT10H;0E号号10H的的BIOS调用等价调用等价与与2号号DOS功能调用,显示一个字符功能调用,显示一个字符(其其ASCII码放码放在在AL中中)POPAXMOVAH,0EHINT10H除法求余法除法求余法。
把一个。
把一个32位二进制数转换成位二进制数转换成十进制十进制数、并显示数、并显示在显示器上。
在显示器上。
.486CODESEGMENTUSE16ASSUMECS:
CODENUM32DD3456789000BEG:
MOVEAX,NUM32MOVEBX,10;除数是除数是32位位10,能否视为能否视为16位的位的10?
;注意:
注意:
必须把必须把10视为视为32位数位数!
如果把除数!
如果把除数10视为视为16位位,则商用,则商用16位放不下。
位放不下。
MOVCX,0;动态统计动态统计:
将要显示将要显示的十进制数的位数!
的十进制数的位数!
高位的高位的0无需显示,但如果无需显示,但如果32位数是全位数是全0则要显示唯一的一位则要显示唯一的一位0;因此因此CX至少为至少为1LAST:
MOVEDX,0;被除数被除数64位、高半部分为位、高半部分为0DIVEBX;除法结果的除法结果的余数余数在在EDXPUSHDX;保存余数保存余数;余数本来存放在余数本来存放在32位的位的EDX;;因为余数因为余数h?
折半查找算法的流程折半查找算法的流程=例在例在有序表有序表中用中用折半查找折半查找法法(二分法二分法)查找指查找指定元素定元素a(关键字关键字)。
STACKSGSEGMENTSTACKSDW64DUP(ST)STACKSGENDSDATASEGMENTBUFDB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,42H,43H,44H,45H;有序表有序表COUNTEQU$-BUF;表项数表项数CHARDB?
;要查找的关键字要查找的关键字MARKDW0;查找次数查找次数PROMPTDBNOFOUND$;未找到:
提示信息未找到:
提示信息D
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计
![提示](https://static.bdocx.com/images/bang_tan.gif)