汇编语言-计算1-199的奇数和,并按十进制形式输出
2023-12-31 04:15:22
问题描述
????编写完整的汇编程序,实现:S=1+3+5+7+...+199,并将运算结果以十进制形式输出。
算法简单阐述
????将16进制数除以10,保存所得余数(0也要保存),若商不为0,则再将商作为新的被除数,直到商为0。下面以16进制数“B”的转换为例:
? ? 首先,先将B除以10,得到的商 = 1和余数?= 1,这个商(1)就作为下一次除法的被除数,余数就是转换后十进制的第0位。
? ? 然后,再将上次得到的商(1)作为新的被除数,除以10,即可得到商 = 0和余数?= 1. 由于商=0,所以运算结束。要得到的十进制数就是(),即?=?
实现代码
; 编写完整的汇编程序,实现:S=1+3+5+7+...+199,并将运算结果以十进制形式输出
DATA SEGMENT
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA, CS:CODE
START:
; 初始化赋值
MOV AX, DATA
MOV DS, AX
MOV AX, 0 ; AX用来存储求和值S(从0开始)
MOV BX, 1 ; 存储奇数(从1开始)
MOV CX, 100 ; 100个奇数(循环100次)
CAL:
ADD AX, BX ; 将当前奇数加到AX商
ADD BX, 2 ; 将BX+2,变成下一个奇数
LOOP CAL
; --------------------------------------------------------------
XOR CX, CX ; CX用于存储除法操作执行了多少次(输出多少位10进制)
MOV BX, 0AH ; 存储除数10
CHANGE_TO_TEN:
XOR DX, DX ; 将被除数的高位清零
DIV BX ; (DX, AX) / BX,运算后的AX为商,DX为余数
PUSH DX ; 保存余数
INC CX
CMP AX, 0 ; 判断AX(商)与0之间的大小关系
JNE CHANGE_TO_TEN ; 如果AX(商)不为0,则继续进行除法运算
PRINT:
POP DX ; 栈结构先进后出(先输出高位,最后输出低位)
ADD DX, 30H ; 转换为ASCII码
; 输出单个字符(DL)
MOV AH, 2
INT 21H
LOOP PRINT ; CX存储的是除法执行的次数(位数)
; 程序结束
MOV AH, 4CH
INT 21H
CODE ENDS
END START
运行结果展示
文章来源:https://blog.csdn.net/2301_82198336/article/details/135297152
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!