资源描述:
《汇编语言实验2数据转换实验.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、程序如下所示:DATASEGMENTBUFDB5DUP(?);预留5单元空间D0DW2A5HDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDI,OFFSETD0;将DI指向BUF的下一单元MOVAX,D0;取要用来变十进制数的数到AXMOVBX,10;准备除以10MOVCX,0;准备统计余数的个数CHANGE10:DECDI;准备存放余数,往前倒存INCCXMOVDX,0;将除数的高16位(在DX中)清0,DX也将用来存
2、放余数DIVBX;DX,AX除以BX(BX=10)ADDDL,30H;余数变为ASCII码值MOVBYTEPTR[DI],DL;存储十进制数CMPAX,0;是否为0?JNZCHANGE10;不为0转CHANGE10CHANGE11:MOVDL,BYTEPTR[DI];取出存放在BUF中的十进制数到DL供显示MOVAH,2;显示1个字符INT21HINCDILOOPCHANGE11MOVAH,4CH;程序结束并返回DOSINT21HCODEENDSENDSTART(1)请改变第三行的3A5H改变为4A3FH、
3、0ABH、0A37BH后分别说明运行结果,并做解释。不做修改改3A5H为4A3FH改3A5H为0ABH改3A5H为0A37BH(2)分析其中INC与DEC语句的作用是什么,用”;”号屏蔽这二句后运行结果又是什么?请解释。(3)将MOVBX,10;准备除以10中的10改为8,结果如何?意义是什么?4A3FH0A37BH(4)如果改为16,结果如何,试分析为什么是这样的结果?0A37BH0ABH4A3FH2.ASCII码表示的十进制数转换为二进制数并显示将SI指向的缓冲区BUF中保存的五位ASCII码十进制数(
4、0-65535)转换成对应的二进制数并存放在DX中,再以二进制形式显示。DATASEGMENTBUFDB'25092'CDB'B',0DH,0AH,'$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUF;将BUF的地址放到SI中MOVDX,0;清DX为0;MOVCX,5;置循环次数为5MOVBX,10GET_ASC:MOVAL,[SI];取出一个字符CMPAL,'0';必须保证5个数都是十进制数(0
5、-9)JBEXITCMPAL,'9'JAEXIT;判断是否是“0”-“9”DEC_BIN:SUBAL,30H;减30H变二进制数MOVAH,0PUSHAX;转换为对应的数并置于AX中,转存堆栈MOVAX,DXMULBX;AX内容乘10MOVDX,AXPOPAXADDDX,AX;(DX)←(DX)*10+(AX)INCSI;使指针SI指向下一个字符DECCXJNZGET_ASCMOVBX,DX;取要显示的字符到BL中MOVCL,16;移16次,最大数64000NEXT:MOVDX,0SALBX,1RCLDX,
6、1ADDDX,30HMOVAH,2INT21HDECCLJNENEXTLEADX,C;取C的地址,以便显示单位B与回车换行MOVAH,9INT21HEXIT:MOVAH,4CHINT21HCODEENDSENDSTART(1)与上次实验中用二进制数显示一个字符的ASCII码程序的代码进行比较,那些地方是一致的?(2)将第二行的’25092’改为以下5个数:32H,35H,30H,39H,32H后(BUFDB'25092'改为:BUFDB32H,35H,30H,39H,32H)说明运行结果,并做解释。(3)为
7、什么要使用堆栈,如果不使用会出现什么结果?3.二进制数到十六进制数的转换二进制整数转换为ASCII码十六进制数的基数为16,显示时注意从9到A,ASCII码跳了7!其他类似于例4.8。其程序代码如下:DATASEGMENTBUFDB5DUP(?);预留5单元空间D0DW1000100110100011BDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDI,OFFSETD0;将DI指向BUF的下一单元MOVCX,0MOVAX
8、,D0;取要用来变十六进制数的数到AXMOVBX,16;准备除以16CBUF10:DECDI;准备存放余数,往前倒存INCCXMOVDX,0;将除数的高16位(在DX中)清0,DX也将用来存放余数DIVBX;DX,AX除以BX(BX=16)ADDDL,30H;余数变为ASCII码值MOVBYTEPTR[DI],DL;存储十六进制数CMPAX,0;是否为0?JNZCBUF10;不为0转CBUF10CHANGE11: