正文

乘法代码(汇编)2007-06-22 19:04:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/lingdlz/27021.html

分享到:

;计算 a * b,其中a b的位数可以在 1 - 2^8 之间,默认位数为 50;注意 a,b 必须为正数否则结果不正确;****************************************************************** .model small.const MAX equ 50    ;乘数的最大位数.data  a db MAX,MAX dup(0)  b db MAX,MAX dup(0)  r db MAX+MAX+1 dup(0)  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 ;准备从 a 中取数  mov si,offset a  inc si mov ax,0  mov al,byte ptr[si] mov byte ptr[si],0dh ;设置哨兵  add si,ax ;准备从 b 中取数  mov di,offset b  inc di mov dx,0  mov dl,byte ptr[di] mov byte ptr[di],0dh ;设置哨兵  add di,dx ;初始化结果 r mov bx,offset r add bx,ax add bx,dx inc bx mov byte ptr[bx],'$' dec bx  ;开始计算 mov ch,10scana:  mov cl,byte ptr[si] dec si cmp cl,0dh jz  putout sub cl,30h push di push bx mov dx,0scanb:  mov al,byte ptr[di] dec di cmp al,0dh jz  next sub al,30h mul cl add ax,dx add al,byte ptr[bx] div ch   ;ch 里存的是10 计算时 ch 不变 mov dl,al  ;商在 al 里作为下次计算的进位 mov byte ptr[bx],ah dec bx jmp scanb ; 最后的进位处理next:   cmp dl,0 jz  dlzero mov al,dl mov byte ptr[bx],al jmp dlnotzerodlzero: inc bxdlnotzero:mov dx,bx pop bx pop di dec bx jmp scana putout: mov bx,dx push bx ; 将结果转换为 ascii 码形式nextr: mov al,byte ptr[bx] cmp al,'$' jz  printr add al,30h mov byte ptr[bx],al inc bx jmp nextr ; 输出结果printr: pop bx mov dx,offset result mov ah,09h int 21h mov dx,bx  mov ah,09h  int 21h  ; 返回 DOS   mov ah,4ch  int 21hmain  endp  end main  

阅读(4378) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册