c语言与汇编语言子程序,用汇编语言设计程序实现10!,并用调用子程序的方法实现1!+2!+3!+…...
满意答案
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!+…...相关推荐
- 【汇编语言】by王爽 | 实验10:编写子程序
前言:本实验为王爽老师的<汇编语言>第三版中的实验10(p206) 实验环境:DOSBox 0.74-3 实验任务: 1.显示字符串 问题 显示字符串是现实工作中经常要用到 ...
- 汇编语言上机考试三星题——根据键盘输入调用子程序显示子程序的入口地址
在多模块设计中,主模块中调用内部模块buf1,buf2,buf3,buf4.主模块根据键盘输入的指令(如:a,b,c,d)调用上述对应的子程序,每个子程序的任务是显示其入口地址.调用后继续等待调用,若 ...
- 怎么用汇编语言转换c语言程序设计,C语言是如何转换成汇编语言的6个步骤带你解析...
大家都知道计算机只能处理和识别二进制指令,而我们利用各种高级编程语言所编写的程序,要经过一些列的处理步骤,最终转变为汇编指令,再最后转变为机器指令. C语言 以上这些转变是如何发生的就属于大名鼎鼎的& ...
- (十六)《汇编语言(王爽)》 | 实验 10:编写子程序
文章目录 1. 预备知识 2. 实验任务 1:显示字符串 3. 实验任务 2:解决除法溢出的问题 4. 实验任务 3:数值显示 5. 总结 1. 预备知识 call 标号 将当前 IP 的内容入栈,并 ...
- c语言汇编6,C语言是如何转换成汇编语言的6个步骤带你解析
大家都知道计算机只能处理和识别二进制指令,而我们利用各种高级编程语言所编写的程序,要经过一些列的处理步骤,最终转变为汇编指令,再最后转变为机器指令. C语言 以上这些转变是如何发生的就属于大名鼎鼎的& ...
- 从编译原理的角度看C语言是如何转换成汇编语言的?
大家都知道计算机只能处理和识别二进制指令,而我们利用各种高级编程语言所编写的程序,要经过一些列的处理步骤,最终转变为汇编指令,再最后转变为机器指令. 以上这些转变是如何发生的就属于大名鼎鼎的" ...
- 实验二、80C51汇编语言编程实验:编写3字节二进制加法子程序,并用主程序调用不同的加数和被加数来检测该子程序的正确性。需考虑有进位和无进位情况。
实验二.80C51汇编语言编程实验:编写3字节二进制加法子程序,并用主程序调用不同的加数和被加数来检测该子程序的正确性.需考虑有进位和无进位情况. 报价 200 文章目录 实验二.80C51汇编语言编 ...
- c语言 subl 指令,linux 之 汇编语言 的mov和movl sub 和subl add 和addl 的区别??
AT&T汇编语言(Assembly Language)是UNIX下惯用的汇编语言(Assembly Language)各式 l,w,b是ATT汇编语言(Assembly Language)中用 ...
- AX寄存器中存放着16位二进制数。试编写一个汇编语言程序,将这4位十六进制数分别转换为相应的ASCⅡ码,并依次存放到PLUS数组的4个字节中去,要求用调用子程序的方法实现
[微机原理]-汇编题 AX寄存器中存放着16位二进制数.试编写一个汇编语言程序,将这4位十六进制数分别转换为相应的ASCⅡ码,并依次存放到PLUS数组的4个字节中去,要求用调用子程序的方法实现. 方法 ...
最新文章
- iOS开发中didSelectRowAtIndexPath tap事件响应延迟
- 物流设计大赛优秀作品_独家!亲历全国大学生物流设计大赛,队员、老师、专家这样说...
- (教程)2020最新windows10/anaconda/pytorch-gpu环境配置(附CUDA/cuDNN配置)
- php限制ip访问次数 并发_PHP实现redis限制单ip、单用户的访问次数功能示例
- Mac上关于shell使用Python3和C++11声明
- django模型sqlserver_SQLServer数据库入门之django如何连接SQLServer
- 15 年经验专家解读 IIoT 的挑战及应对思路!
- matlab连续时间系统复频域分析,实验五连续时间信号与系统的复频域分析的MATLAB实现.doc...
- ASP.NET中 CompareValidator(比较验证)的使用
- error: ‘for‘ loop initial declarations are only allowed in C99 mode
- 解决ios微信小程序弹框点击穿透问题
- SPSS调节效应分析插件 v1.1.1
- PERT公式(附详细计算法)
- 计算机的ps快捷键,【教程】如何设置ps的快捷键?
- 安卓模拟器最优选择+抖音检测全绕过简述
- 大数据扫黄,是怎样发现你的?
- 输入法不见了,咋办?输入法不能开机启动咋办?
- 线上软文自媒体推广怎么做,软文推广有什么好处?
- 台式计算机DNS地址配置无法保存,电脑设置不了DNS地址怎么办
- JavaWeb项目中出现faceted project problem问题是什么原因?
热门文章
- [附源码]计算机毕业设计Node.js茶叶销售网站(程序+LW)
- Android 判断真机与模拟器
- 苹果手机关闭自动更新_苹果手机耗电快?可能和这4个设置有关,建议关闭宜早不宜迟...
- iphone6微信连接到服务器,为什么苹果6手机微信总是连接不了网络?
- 计算机中各种数制间的转化(10进制与2、8、16进制之间的快速转化)
- 阿里物联网云平台bone web框架开发简单项目介绍
- mysql 建表 日期格式_MySQL建表时,日期时间类型选择
- arcgis js 4 使用pixi.js 构建火焰粒子
- 第一次世界大战 重要词汇与短语
- Office2019 没有阅读模式的解决办法