⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmn.asm

📁 汇编写的求组合数的程序
💻 ASM
字号:
data segment
  m_v dw 5
  n_v dw 2
  result dw ?
  str_result db 5 dup(30h)
  ask db 10,13,'DO Cmn,please input m,n:  m=','$'
  answer db 10,13,'The result is:','$'
data ends
stack segment
  dw 128 dup(0)
  tos label word
stack ends
code1 segment
 main proc far
  assume cs:code1,ds:data,ss:stack
 start:
  mov ax,stack
  mov ss,ax
  mov sp,offset tos
  push ds
  sub ax,ax
  push ax
  mov ax,data
  mov ds,ax
 ;****MAIN PART****
  mov ah,9
  mov dx,offset ask
  int 21h
  mov ah,1
  int 21h
  sub al,030h
  mov ah,0
  mov m_v,ax
  mov bx,ax
  mov ah,2
  mov dl,','
  int 21h
  mov dl,'n'
  int 21h
  mov dl,'='
  int 21h
  mov ah,1
  int 21h
  sub al,030h
  mov ah,0
  mov n_v,ax
  mov cx,ax
  mov dx,offset result
  push dx
  push cx
  push bx
  call far ptr fact
  mov ax,result
  mov bx,10
  mov si,offset str_result
  add si,4
  mov byte ptr[si],'$'
  dec si
  mov cx,4
 continue:
  mov dx,0     ;一定要先将dx置0, div是把ax作被除数的低位,把dx作被除数的高位
  div bx       ;不能直接div 10 
  add dl,030h
  mov byte ptr[si],dl  
  dec si
  dec cx
  cmp cx,0
  jne continue
 print:
  mov ah,9
  mov dx,offset answer
  int 21h
  mov dx,offset str_result
  int 21h 
  ret
 main endp
code1 ends

code segment
  frame struc
        save_bp dw ?
        save_cs_ip dw 2 dup(?)
        m dw ?
        n dw ?
        result_addr dw ?
  frame ends
  assume cs:code
 fact proc far
  push bp
  mov bp,sp
  cmp cx,1
  je done
  mov si,[bp].result_addr
  push si
  dec cx
  dec bx
  push cx
  push bx
  call fact
  mov si,[bp].result_addr
  mov ax,word ptr[si]     ;此处一定不能用dx,即mov ax,word ptr[dx]
  mul [bp].m
  div [bp].n
  jmp short return
 done:mov ax,[bp].m
      mov si,[bp].result_addr
 return:
  mov word ptr[si],ax
  pop bp
  ret 6         ;注意 ret x 中x以字节为单位
 fact endp
code ends
  end start

  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -