满意答案

CODE  SEGMENT

ASSUME    CS:CODE

ORG       100H

START:  PUSH      CS

POP       DS

PUSH      CS

POP       ES

MOV       DI,0

MOV       SI,0

MOV       BX,10

@MAIN1:  MOV       CX,BX

CALL      FACT

ADD       SI,AX

ADC       DI,DX

DEC       BX

JNZ       @MAIN1

MOV       AX,SI

MOV       DX,DI

CALL      DISPDXAX

MOV       AH,4CH

INT       21H

; cx中存放要求阶乘的数

; 阶乘结果在dx、ax中

FACT  PROC      NEAR

PUSH      BX

PUSH      SI

PUSH      DI

PUSHF

MOV       DX,0

MOV       AX,1

@FACT1:  MOV       BX,CX

CALL      MULT

LOOP      @FACT1

POPF

POP       DI

POP       SI

POP       BX

RET

FACT  ENDP

; 将要显示的无符号数置于 ax 中

DISPAX  PROC      NEAR

PUSH      BX

PUSH      CX

PUSH      DX

PUSH      SI

PUSH      DS

PUSH      CS

POP       DS

MOV       BYTE PTR NZ,0

PUSH      AX

LEA       SI,DIVARR

MOV       CX,5

@1:

POP       AX

MOV       DX,0

MOV       BX,[SI]

DIV       BX

PUSH      DX

CMP       AL,0

JNE       @2

CMP       BYTE PTR NZ,1

JE        @2

CMP       CX,1

JE        @2

MOV       DL,20H

JMP       @3

@2:

ADD       AL,30H

MOV       DL,AL

MOV       BYTE PTR NZ,1

@3:

MOV       AH,2

INT       21H

INC       SI

INC       SI

LOOP      @1

POP       DX

POP       DS

POP       SI

POP       DX

POP       CX

POP       BX

RET

DIVARR  DW        10000,1000,100,10,1

NZ  DB        0

DISPAX  ENDP

; 无符号乘法子程序 (mul指令只能实现16位乘16位,本子程序实现32位乘16位--限定数的大小,结果仍为32位)

; 被乘数放置于dx,ax 中, 乘数放置于 bx中

; 结果放置于dx,ax中(dx为高16位,ax为低16位)

MULT  PROC      NEAR

PUSH      CX

PUSH      SI

PUSH      DI

PUSHF

MOV       SI,0

MOV       DI,0

CMP       BX,0

JE        @MULTEXIT

@MULT1:  SHR       BX,1

JNC       @MULT2

ADD       SI,AX

ADC       DI,DX

@MULT2:  SHL       AX,1

RCL       DX,1

CMP       BX,0

JNE       @MULT1

MOV       DX,DI

MOV       AX,SI

POPF

POP       DI

POP       SI

POP       CX

RET

@MULTEXIT:

MOV       AX,0

MOV       DX,0

POPF

POP       DI

POP       SI

POP       CX

RET

MULT  ENDP

; 将要显示的32位无符号数置于dx、ax中

DISPDXAX  PROC      NEAR

MOV       WORD PTR [Y],AX

MOV       WORD PTR [Y+2],DX

; 以下将 Y (16进制)转为10进制串并输出

MOV       AX,WORD PTR [Y]         ;=====

MOV       DX,WORD PTR [Y+2]       ;=====

MOV       BX,WORD PTR [Z]         ;=====  这一段是关键,加上后不会出现除法溢出

MOV       CX,WORD PTR [Z+2]       ;=====

MOV       WORD PTR N,0            ;=====

MM0:  INC       WORD PTR N  ;=====

SUB       AX,BX       ; 不停地减 10万 ,得到被10万除的商,放在 n 中

SBB       DX,CX       ;=====

JNC       MM0         ;=====

DEC       WORD PTR N  ;  保存 高5位

ADD       AX,BX       ;=====

ADC       DX,CX       ;=====

MOV       WORD PTR[Y],AX          ;=====

MOV       WORD PTR[Y+2],DX        ;=====

;==============

MM1:  LEA       DI,CC

ADD       DI,9

M2:

MOV       AX,WORD PTR [Y]

MOV       DX,WORD PTR [Y+2]

MOV       BX,10000

DIV       BX          ; 这里是发生溢出之处

PUSH      AX

PUSH      DX

; ============

; 以下转换10进制的低4位

POP       DX

MOV       CX,4

MOV       AX,DX

M3:  MOV       DX,0

MOV       BX,10

DIV       BX

ADD       DL,30H

MOV       [DI],DL

DEC       DI

LOOP      M3

; ===========

; 以下转换10进制的高万位

POP       AX

MOV       CX,1

M4:  MOV       DX,0

MOV       BX,10

DIV       BX

ADD       DL,30H

MOV       [DI],DL

DEC       DI

LOOP      M4

;=============

MOV       AX,WORD PTR N

MOV       CX,5

M5:  MOV       DX,0

MOV       BX,10

DIV       BX

ADD       DL,30H

MOV       [DI],DL

DEC       DI

LOOP      M5

; ============

; 输出换行回车

LEA       DX,LFCR

MOV       AH,9

INT       21H

; ============

; 输出两数的和的10进制串

LEA       DX,CC

MOV       AH,9

INT       21H

RET

Y  DD        ?

CC  DB        10 DUP(' '),10,13,'$'

LFCR  DB        10,13,'$'

Z  DD        100000

N  DW        0

DISPDXAX  ENDP

CODE  ENDS

END       START

00分享举报

c语言与汇编语言子程序,用汇编语言设计程序实现10!,并用调用子程序的方法实现1!+2!+3!+…...相关推荐

  1. 【汇编语言】by王爽 | 实验10:编写子程序

    前言:本实验为王爽老师的<汇编语言>第三版中的实验10(p206) 实验环境:DOSBox 0.74-3 实验任务: 1.显示字符串 问题         显示字符串是现实工作中经常要用到 ...

  2. 汇编语言上机考试三星题——根据键盘输入调用子程序显示子程序的入口地址

    在多模块设计中,主模块中调用内部模块buf1,buf2,buf3,buf4.主模块根据键盘输入的指令(如:a,b,c,d)调用上述对应的子程序,每个子程序的任务是显示其入口地址.调用后继续等待调用,若 ...

  3. 怎么用汇编语言转换c语言程序设计,C语言是如何转换成汇编语言的6个步骤带你解析...

    大家都知道计算机只能处理和识别二进制指令,而我们利用各种高级编程语言所编写的程序,要经过一些列的处理步骤,最终转变为汇编指令,再最后转变为机器指令. C语言 以上这些转变是如何发生的就属于大名鼎鼎的& ...

  4. (十六)《汇编语言(王爽)》 | 实验 10:编写子程序

    文章目录 1. 预备知识 2. 实验任务 1:显示字符串 3. 实验任务 2:解决除法溢出的问题 4. 实验任务 3:数值显示 5. 总结 1. 预备知识 call 标号 将当前 IP 的内容入栈,并 ...

  5. c语言汇编6,C语言是如何转换成汇编语言的6个步骤带你解析

    大家都知道计算机只能处理和识别二进制指令,而我们利用各种高级编程语言所编写的程序,要经过一些列的处理步骤,最终转变为汇编指令,再最后转变为机器指令. C语言 以上这些转变是如何发生的就属于大名鼎鼎的& ...

  6. 从编译原理的角度看C语言是如何转换成汇编语言的?

    大家都知道计算机只能处理和识别二进制指令,而我们利用各种高级编程语言所编写的程序,要经过一些列的处理步骤,最终转变为汇编指令,再最后转变为机器指令. 以上这些转变是如何发生的就属于大名鼎鼎的" ...

  7. 实验二、80C51汇编语言编程实验:编写3字节二进制加法子程序,并用主程序调用不同的加数和被加数来检测该子程序的正确性。需考虑有进位和无进位情况。

    实验二.80C51汇编语言编程实验:编写3字节二进制加法子程序,并用主程序调用不同的加数和被加数来检测该子程序的正确性.需考虑有进位和无进位情况. 报价 200 文章目录 实验二.80C51汇编语言编 ...

  8. c语言 subl 指令,linux 之 汇编语言 的mov和movl sub 和subl add 和addl 的区别??

    AT&T汇编语言(Assembly Language)是UNIX下惯用的汇编语言(Assembly Language)各式 l,w,b是ATT汇编语言(Assembly Language)中用 ...

  9. AX寄存器中存放着16位二进制数。试编写一个汇编语言程序,将这4位十六进制数分别转换为相应的ASCⅡ码,并依次存放到PLUS数组的4个字节中去,要求用调用子程序的方法实现

    [微机原理]-汇编题 AX寄存器中存放着16位二进制数.试编写一个汇编语言程序,将这4位十六进制数分别转换为相应的ASCⅡ码,并依次存放到PLUS数组的4个字节中去,要求用调用子程序的方法实现. 方法 ...

最新文章

  1. iOS开发中didSelectRowAtIndexPath tap事件响应延迟
  2. 物流设计大赛优秀作品_独家!亲历全国大学生物流设计大赛,队员、老师、专家这样说...
  3. (教程)2020最新windows10/anaconda/pytorch-gpu环境配置(附CUDA/cuDNN配置)
  4. php限制ip访问次数 并发_PHP实现redis限制单ip、单用户的访问次数功能示例
  5. Mac上关于shell使用Python3和C++11声明
  6. django模型sqlserver_SQLServer数据库入门之django如何连接SQLServer
  7. 15 年经验专家解读 IIoT 的挑战及应对思路!
  8. matlab连续时间系统复频域分析,实验五连续时间信号与系统的复频域分析的MATLAB实现.doc...
  9. ASP.NET中 CompareValidator(比较验证)的使用
  10. error: ‘for‘ loop initial declarations are only allowed in C99 mode
  11. 解决ios微信小程序弹框点击穿透问题
  12. SPSS调节效应分析插件 v1.1.1
  13. PERT公式(附详细计算法)
  14. 计算机的ps快捷键,【教程】如何设置ps的快捷键?
  15. 安卓模拟器最优选择+抖音检测全绕过简述
  16. 大数据扫黄,是怎样发现你的?
  17. 输入法不见了,咋办?输入法不能开机启动咋办?
  18. 线上软文自媒体推广怎么做,软文推广有什么好处?
  19. 台式计算机DNS地址配置无法保存,电脑设置不了DNS地址怎么办
  20. JavaWeb项目中出现faceted project problem问题是什么原因?

热门文章

  1. [附源码]计算机毕业设计Node.js茶叶销售网站(程序+LW)
  2. Android 判断真机与模拟器
  3. 苹果手机关闭自动更新_苹果手机耗电快?可能和这4个设置有关,建议关闭宜早不宜迟...
  4. iphone6微信连接到服务器,为什么苹果6手机微信总是连接不了网络?
  5. 计算机中各种数制间的转化(10进制与2、8、16进制之间的快速转化)
  6. 阿里物联网云平台bone web框架开发简单项目介绍
  7. mysql 建表 日期格式_MySQL建表时,日期时间类型选择
  8. arcgis js 4 使用pixi.js 构建火焰粒子
  9. 第一次世界大战 重要词汇与短语
  10. Office2019 没有阅读模式的解决办法