1、assume cs:code,ds:datadata segmentNA dw 0F321H,09AFCHNB dw 08818H,0301DH;-第一个字是等待相乘的数的高 16位,第二个是低十六位T1 dw 0,0,0T2 dw 0,0,0;-32位数乘以16位数不可能大于48位,所以分配3个字R dw 0,0,0,0;-32位数乘以32位数不可能大于64位,所以为结果分配4个字data endscode segmentstart:mov ax,datamov ds,ax;-初始化段寄存器Step1:mov ax,NA+2mov bx,NB+2mul bxmov T1+4,axmov cx
2、,dx;-Number A 的低16位乘以 Number B 的低十六位,结果存入 T1+4;进位存入 CXmov ax,NAmov bx,NB+2mul bxmov T1+2,axadd T1+2,cxadc T1,dx;-Number A 的高16位乘以 Number B 的低十六位,结果存入 T1+4;结果存入 T1+2,将 T1+2与上一次相乘的进位相加存入 T1+2;将第二次相乘的进位带符号相加入 T1(前一位的相加可能产生进位)Step2:mov ax,NA+2mov bx,NBmul bxmov T2+4,axmov cx,dx;-同理mov ax,NAmov bx,NBmul
3、bxmov T2+2,axadd T2+2,cxadc T2,dx;-同理SUM:mov ax,T1+4mov R+6,axmov ax,T2+4add T1+2,axmov ax,T1+2mov R+4,axmov ax,T2+2adc T1,axmov ax,T1mov R+2,axmov ax,T2adc R,ax;-错位相加mov ax,4C00Hint 21Hcode endsend start原理图:NA NA+2 NB NB+2T1 T1+2 T1+4 T2 T2+2 T2+4R R+2 R+4 R+6 编写一个程序,从键盘上连续输入多个字符,遇到“$”时终止,然后以与输入相反的
4、顺序将该字符串以大写的形式在屏幕上显示出来要求: 用“先进后出”的设计思路,使用堆栈技术,结合 DOS 的中断调用,实现输入字符串的倒序显示CODE SEGMENT ;作业ASSUME CS:CODE,ds:codeorg 100hSTART:push cspop dscldlea dx,msgmov ah,9int 21h ;提示xor cx,cxt0:mov ah,1int 21h ;接收数据cmp al,$ ;$结束程序jz showcmp al,ajb y1cmp al,zja y1sub al,20h ;小写转大写y1:inc cxpush axjmp t0jcxz quitshow:mov al,0dhinc cxpush axmov al,0ahinc cxpush ax ;字符串倒序输出mov cx,cxnext:pop dxmov ah,2int 21hloop nextquit:mov ah,1int 21h ;等待MOV AX,4C00HINT 21Hmsg db 09,Input a string.,0dh,0ah,$CODE ENDSEND START