zoukankan      html  css  js  c++  java
  • emu8086实现两位数加法运算

    题目说明:给出一个公式,例如 “35 + 28 = ”,输出计算结果

    一、准备材料

    DOS功能调用表:https://blog.csdn.net/mybelief321/article/details/13168071

    emu8086软件:https://emu8086-microprocessor-emulator.en.softonic.com/

    ASCII码参考表:http://ascii.911cha.com/

    二、asm代码

    其中的注释详细解释了每一步代码的含义

    在输入公式时,数字必须为两位,例如:01 + 01 = 

    加号、等于号两侧都需要加空格(双元运算符书写惯例)

    data segment
        question db "97 + 56 = $"
        result db 0,0,0,"$"
    data ends
    
    code segment
    start:
        mov ax, data
        mov ds, ax 
        ;将data放入ax
        lea dx, question
        mov ah, 09h
        int 21h
        ;调用DOS 09H功能:显示以$结尾的字符串
        
        xor ax,ax
        ;ax归0
        
        mov al, question + 1
        ;第一个数的个位存入al
        mov bl, question
        ;第一个数的十位存入bl
        
        mov cl, question + 6
        ;第二个数的个位存入cl
        mov dl, question + 5
        ;第二个数的十位存入dl
        
        sub al, 30H 
        sub cl, 30H
        sub bl, 30H
        sub dl, 30H
        ;ASCII转码
        
        clc
        ;清空进位标志CF
        
        add al, cl
        ;两数个位相加
        aaa
        ;使用非压缩BCD码相加指令,结果存储在AX
                  
        mov byte ptr result+2,al
        ;将最终结果的个位存入result的个位
        mov al, bl
        adc al, dl
        ;检查CF进位标志,进行带进位加法
        aaa
        mov byte ptr result+1,al 
        ;将最终结果的十位存入result的十位
        
        lea dx, result
        jc hundred
        ;如果CF位为1,则说明十位加法后产生了百位,则转至处理三位数的hundred流程
        
        add byte ptr result+1,30h 
        add byte ptr result+2,30h
        ;转ASCII用于打印
        inc dx
        jmp display
        ;显示最终结果
          
    hundred:
        mov byte ptr result, 31h
        ;若产生百位,则必定为1
        add byte ptr result+1, 30h 
        add byte ptr result+2, 30h
        ;个位和十位转为ASCII
        
    display:
        mov ah, 9
        int 21h
    
        
        mov ax, 4c00h
        ;结束,返回值为AL:0
        int 21h    
    ends
    
    end start 
  • 相关阅读:
    回调函数
    未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包
    顶帽变化(转载)
    协程 + asyncio
    docker
    vue+uwsgi+nginx部署前后端分离项目
    html
    关于html的基础标签
    关于python中的GIL
    hashlib模块
  • 原文地址:https://www.cnblogs.com/soowin/p/12011475.html
Copyright © 2011-2022 走看看