汇编语言 大小写与进制转换文档格式.docx
《汇编语言 大小写与进制转换文档格式.docx》由会员分享,可在线阅读,更多相关《汇编语言 大小写与进制转换文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
STR13DB0AH,0DH,'
PleaseconfirmyoujustinputedisaLetter'
STR2DB0AH,0DH,'
Pleaseinputthebinarystring,Entertoconfirm'
0AH,0DH,'
STR21DB0AH,0DH,'
ThestringHexadecimalis:
STR3DB0AH,0DH,'
PleaseinputtheHexadecimalstring,Entertoconfirm'
STR31DB0AH,0DH,'
changetobinaryis:
STR4DB0AH,0DH,'
changetoDecimalis:
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
;
宏定义字符输入
charinMACRO;
宏定义无参数的字符输入功能
MOVAH,01H;
系统调用输入一个字符用于功能选择
INT21H;
字符默认输入到AL中
ENDM
宏定义数字输入数字输入到AL中
numinMACRO
charin
SUBAL,48
宏定义字符串输入
strinMACROSTRINGIN;
将字符串输入到字符串STRINGIN中
LEADX,STRINGIN;
将STRINGIN的偏移地址送到DX寄存器
MOVAH,0AH;
0AH字符串输入功能
调用系统中断
ENDM
宏定义字符输出
charoutMACROoutchar;
宏定义将字符outchar输出
PUSHAX
PUSHDX
MOVDL,outchar
MOVAH,02H;
系统调用输出字符outchar
调用系统中断调用过程中会改变AL中的值,故将AX中的值入栈保存
POPDX
POPAX
宏定义数字输出
numoutMACROoutnum
MOVDL,outnum
ADDDL,48;
将数值转换为对应得数值字符
宏定义字符串输出
stroutMACROSTRINGOUT;
将字符串STRINGOUT输出
LEADX,STRINGOUT;
将STRIN的偏移地址送到DX寄存器
MOVAH,9;
09H字符串输出功能
宏定义换行
endlMACRO;
宏定义换行
PUSHBX
PUSHCX
MOVDL,0AH;
先输出垂直Tab键
MOVAH,2
调用系统中断实现输出
MOVDL,0DH;
再将输出输出调至段首
POPCX
POPBX
宏定义以baseNum进制输出AX中的数值
outAXMACRObaseNum;
MOVBX,baseNum;
将要转换成的进制存入BX作为除数
CALLoutAXp;
调用进制输出过程
过程定义以baseNum进制形式输出存放在AX中的数值过程
outAXpPROC
MOVDX,0;
初始化DX配合AX一起进行处罚操作
MOVCX,0;
用CX计数取得个余数个数
outAXp_Circle:
CMPAX,0;
判断AX中的值是否为0
JEoutAXp_NEXT;
是则跳转
DIVBX;
不是则进行除10运算商保存在AX中余数保存在DX中
PUSHDX;
将对10取到的余数入栈保存
将DX中的余数清空以便下一步对AX中的数进行除10运算
INCCX;
计数循环取得的余数个数
JMPoutAXp_Circle
outAXp_NEXT:
;
循环输出取得的余数
CMPAL,10;
当余数小于10时,直接将数值输出
JBnout
ADDAL,55;
否则将余数转化为对应的字符10对应字符'
A'
charoutAL
JMPcout
nout:
numoutAL
cout:
LOOPoutAXp_NEXT
RET
outAXpENDP
宏定义以baseNum进制输入数据串到AX中,可输入2-37进制
inAXMACRObaseNum;
MOVCX,baseNum;
CALLinAXp;
调用进制输入过程
inAXpPROC
MOVAX,0
inAXp0:
PUSHAX
inAXp1:
charin;
逐个字符进行输入,结果存放到AX中
CMPAL,13
JEinAXE;
当按下Enter键后跳转AX的输出
CMPAL,'
0'
JBinAXp1;
当输入字符小于'
时,跳转inAXp1,跳转重新进行字符输入
9'
JAinAXnext1;
当输入字符大于'
时,跳转inAXnext1进一步进行比较
SUBAL,48;
当字符在'
-'
之间时,将字符转化为对应的数值
JMPinAXnum;
跳转数值输入
inAXnext1:
时,跳转重新进行字符输入
Z'
JAinAXnext2;
时,跳转inAXnext2进一步进行比较
SUBAL,55;
之间时,将字符转化为对应的数值,并跳转到数值输入
JMPinAXnum
inAXnext2:
a'
z'
JAinAXp1;
SUBAL,87;
inAXnum:
MOVBH,0;
将数值送到AX中
MOVBL,AL
当AX中的数值为0时,跳过乘法操作
JEinAXadd
MULCX;
乘以CX中的进制基数
inAXadd:
ADDAX,BX
JMPinAXp0
inAXE:
POPAX;
将计算得到的数值出栈到AX中
inAXpENDP
START:
MOVAX,DATAS;
将数据段地址送到AX中
MOVDS,AX;
由AX转送到送到DS
P0:
stroutmenu;
字符串输出宏调用输出menu的提示菜单
charin;
宏调用字符输入选择相应功能
1'
JEP1
2'
JEP2
3'
JEP3
4'
JEP4
q'
JEPq
Q'
JMPP0
P1:
endl
stroutSTR1
输入字母到AL中
JBoutrange;
当字符小于'
时超出范围,给出提示信息
JAcmpNext;
当字符大于'
时进一步进行范围的确定
ADDAL,32;
输入的字符范围在'
之间时转换为小写字母
stroutSTR12;
输出AL中的字符前给出提示信息
JMPoutAL
cmpNext:
JAoutrange;
SUBAL,32;
stroutSTR11;
输出AL中的字符前给出提示信息
outAL:
charoutAL
outrange:
stroutSTR13;
超出范围,给出提示信息
JMPP0
P2:
stroutSTR2
inAX2;
以2进制输入数据串到到AX中
endl
stroutSTR21
outAX16;
以16进制的形式输出AX中的数值
P3:
stroutSTR3
inAX16;
以16进制输入数据串到到AX中
stroutSTR31
outAX2;
以二进制的形式输出AX中的数据
P4:
stroutSTR4
outAX10;
Pq:
MOVAH,4CH;
调用系统结束
INT21H
CODESENDS
ENDSTART