;计算 a + b,其中a b的位数可以在 0 - 2^15 之间,默认位数为 50;注意 a,b 必须为正数否则结果不正确;****************************************************************** .model small .const MAX equ 50 ;加数的最大位数 .data a db MAX,MAX dup(?) b db MAX,MAX dup(?) txta db 'Enter a:$' txtb db 'Enter b:$' result db 'a + b = $' enter db 13,10,'$' .code;------------------------------------------------------------------;子程序,在屏幕上打印回车;------------------------------------------------------------------PtEnter proc near mov dx,offset enter mov ah,09h int 21h retPtEnter endp ;------------------------------------------------------------------;在提示下输入数据,提示信息为 si ,数据输入到 di;------------------------------------------------------------------GetData proc near mov dx,si mov ah,09h int 21h mov dx,di mov ah,0ah int 21h call PtEnter retGetData endp ;------------------------------------------------------------------;主过程;------------------------------------------------------------------main proc far mov ax,@data mov ds,ax mov si,offset txta mov di,offset a call GetData mov si,offset txtb mov di,offset b call GetData mov si,offset a inc si mov byte ptr [si],0dh ;设置哨兵 inc si mov di,offset b inc di mov byte ptr [di],0dh ;设置哨兵 inc di scana: cmp byte ptr [si],0dh jz scanb inc si jmp scana scanb: cmp byte ptr [di],0dh jz scanover inc di jmp scana ;开始计算scanover: mov bx,10 ;bh 用来存每次除10后的商(0,1),bl存10 mov ax,0dh ;堆栈中的‘哨兵’ push ax mov cx,0 ;初始化 ;从 a 中取数存入 dhnext: mov dh,ch cmp ch,0dh jz nextb dec si mov dh,byte ptr [si] ;从 b 中取数存入 dlnextb: mov dl,cl cmp cl,0dh jz calc dec di mov dl,byte ptr [di] ;计算,并将结果存入堆栈中calc: xor ax,ax ;清 0 mov cx,dx ;保存取数的结果 cmp dh,0dh jz overa add al,dh sub al,30h ;ASCLL 码转为 二进制 overa: cmp dl,0dh jz overb add al,dl sub al,30h ;ASCLL 码转为 二进制 overb: add al,bh div bl mov bh,al ;除10后的商 mov al,ah add al,30h mov ah,0 push ax ;除10后的余数(ah)入栈 cmp cx,0d0dh ;是否结束 jnz next ;从堆栈中弹出结果并打印 cmp ax,30h ;检查最后进栈的是否为 0 jnz nocarray pop dxnocarray: mov dx,offset result mov ah,09h int 21h cmp bh,1 ;检查最后计算是否有进位 jnz ptnext mov ax,31h push ax ptnext: pop dx cmp dx,0dh jz exit mov ah,02h int 21h jmp ptnextexit: mov ah,4ch int 21hmain endp end main

评论