汇编语言-计算1-199的奇数和,并按十进制形式输出

2023-12-31 04:15:22

问题描述

????编写完整的汇编程序,实现:S=1+3+5+7+...+199,并将运算结果以十进制形式输出。

算法简单阐述

????将16进制数除以10,保存所得余数(0也要保存),若商不为0,则再将商作为新的被除数,直到商为0。下面以16进制数“B”的转换为例:

? ? 首先,先将B除以10,得到的商 = 1和余数d_{0}?= 1,这个商(1)就作为下一次除法的被除数,余数d_{0}就是转换后十进制的第0位。

? ? 然后,再将上次得到的商(1)作为新的被除数,除以10,即可得到商 = 0和余数d_{1}?= 1. 由于商=0,所以运算结束。要得到的十进制数就是(d_{1}d_{0}),即(B)_{H}?=?(11)_{D}

实现代码

; 编写完整的汇编程序,实现: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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。