实验1-1——多字节数的运算⑴、两个长度为3个字节(3B)的二进制无符号数,分别存放在首地址为buf1和buf2的连续内存单元中,编程求这两者之和,并将结果放在起始地址为res的内存单元中。例如,这两个数据为888888H、456789H,则其和应为[1]345671H。源代码如下:.:movax,***@datamovds,ax movax,wordptrbuf1;取buf1的低16位 addax,wordptrbuf2;取buf2的低16位+buf1的低16位 movwordptrres,ax;相加结果存入res movax,wordptrbuf1+2;取buf1的高16位 adcax,wordptrbuf2+2;取buf2的高16位+buf1的高16位+CF movwordptrres+2,ax;相加结果存入res ;输出 movcx,3;置循环初值 movsi,2again:movdl,byteptrres[si];依次取res的两个字节,由高到低pushcx;保护循环值cxmovcl,4shrdl,cl;将dl高四位移到低四位popcxordl,30h;将dl高四位转化为ASCIIcmpdl,39h;判断是否大于10jbenext1adddl,7;加7转化为A到E字母输出next1:movah,2int21hmovdl,byteptrres[si]anddl,0fh;将dl高四位清零ordl,30h;;将dl低四位转化为ASCIIcmpdl,39hjbenext2adddl,7next2:movah,2int21hdecsiloopagain movax,4c00h int21h endstart运行结果截图⑵、将两数改为3B的压缩BCD码,重复以上实验过程。例如,这两个数据为888888H、456789H,则其和应为[1]345677H(表示[1]345677)。源代码如下:.:movax,***@datamovds,ax moval,byteptrbuf1;取buf1的低8位 addal,byteptrbuf2;取buf2的低8位+buf1的低8位 daa;调整为十进制 movbyteptrres,al;相加结果存入res moval,byteptrbuf1+1;取buf1的中间8位 adcal,byteptrbuf2+1;取buf2的中间8位+buf1的中间8位+CF daa;调整为十进制 movbyteptrres+1,al;相加结果存入res moval,byteptrbuf1+2;取buf1的高8位 adcal,byteptrbuf2+2;取buf2的高8位+buf1的高8位+CF daa;调整为十进制 movbyteptrres+2,al;相加结果存入res ;输出 movcx,3;置循环初值 movsi,2again:movdl,byteptrres[si];依次取res的两个字节,由高到低pushcx;保护循环值cxmovcl,4shrdl,cl;将dl高四位移到低四位popcxordl,30h;将dl高四位转化为ASCIIcmpdl,39h;判断是否大于10jbenext1adddl,7;加7转化为A到E字母输出next1:movah,2int21hmovdl,byteptrres[si]anddl,0fh;将dl高四位清零ordl,30h;;将dl低四位转化为ASCIIcmpdl,39hjbenext2adddl,7next2:movah,2int21hdecsiloopagain movax,4c00h int21h endstart运行结果截图:实验1-2——BCD码操作⑴、将存放在首地址为buf的5B的压缩BCD码分离为10B的非压缩BCD码,并存于首地址为res的单元中原代码如下:..;resdt?.codestart:movax,***@datamovds,axmovcx,5xorsi,si;置循环次数leadi,buf;取其地址again:movdl,[di];取两个字节先保存低四位后保存高四位anddl,0fh;置高四位为零movbyteptrres[si],dl;保存到res单元movdl,[di]pushcx;保护循环次数movcl,4shrdl,cl;高四位移到第四位,并置高四位为零popcxincsimovbyteptrre
汇编程序 来自淘豆网www.taodocs.com转载请标明出处.