用汇编语言将 2 个数字相加并打印结果

2023-12-21

我需要有关如何添加两个数字然后打印结果的帮助。
这是我的代码:

    .MODEL SMALL
    .STACK 200H
    .DATA
NUM1 DB 12
NUM2 DB 3
VAL  DB ?
MSG1 DB "The sum is : $"

    .CODE
BEGIN PROC 
      MOV AX, @DATA
      MOV DS, AX

      MOV AL, NUM1
      ADD AL, NUM2
      MOV VAL, AL
     
 

      LEA DX, MSG1
      MOV AH, 9
      INT 21H

      
      MOV AH, 2
      MOV DL, VAL
      INT 21H

      MOV AX, 4C00H
      INT 21H
BEGIN ENDP
      END BEGIN

我得到的输出是:

The sum is 0 

我的代码有什么错误?


通过不断地将值除以 10,您将得到余数中的个位数 - 但顺序“错误”(最后到第一个)。要以“正确”的顺序(从第一个到最后一个)打印它,您可以通过以下方式反转它们PUSHing and POPing(关键字:LIFO = 后进先出):

.MODEL SMALL
.STACK 200H
.DATA
    NUM1 DB 12
    NUM2 DB 3
    VAL  DW ?
    MSG1 DB "The sum is : "
    DECIMAL  DB "00000$"

.CODE
BEGIN PROC
    MOV AX, @DATA
    MOV DS, AX

    XOR AX, AX
    MOV AL, NUM1
    ADD AL, NUM2
    ADC AH, 0
    MOV VAL, AX

    MOV AX, VAL
    CALL AX_to_DEC

    LEA DX, MSG1
    MOV AH, 9
    INT 21H

    MOV AX, 4C00H
    INT 21H
BEGIN ENDP

AX_to_DEC PROC
        mov bx, 10              ; divisor
        xor cx, cx              ; CX=0 (number of digits)

    First_Loop:
        xor dx, dx              ; Attention: DIV applies also DX!
        div bx                  ; DX:AX / BX = AX remainder: DX
        push dx                 ; LIFO
        inc cx                  ; increment number of digits
        test  ax, ax            ; AX = 0?
        jnz First_Loop          ; no: once more

        mov di, OFFSET DECIMAL  ; target string DECIMAL
    Second_Loop:
        pop ax                  ; get back pushed digit
        or ax, 00110000b        ; to ASCII
        mov byte ptr [di], al   ; save AL
        inc di                  ; DI points to next character in string DECIMAL
        loop Second_Loop        ; until there are no digits left

        mov byte ptr [di], '$'  ; End-of-string delimiter for INT 21 / FN 09h
        ret
AX_to_DEC ENDP

END BEGIN
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用汇编语言将 2 个数字相加并打印结果 的相关文章

随机推荐

  • 向字符串类添加函数

    我知道从 std string 类继承是一个糟糕的主意 但只是尝试使用继承向 string 类添加自定义函数以进行虚拟分配 我想将我的函数称为 add 当我执行 str add str1 str2 时它应该在字符串的开头附加 str1 在字
  • 如何使用 Perl 从文件中获取恰好 n 个随机行?

    跟进this https stackoverflow com questions 448005 whats an easy way to read random line from a file in unix command line问题
  • 我的联系表单的提交按钮未提交和重定向

    我正在开发我的第二个网站 在创建这个网站和我的第一个网站的整个过程中 StackOverflow 上的人们给了我很大的帮助 我可以浏览并找到几乎所有我不想知道的东西 我遇到的 99 的问题 我都用我在这里读到的答案解决了 首先非常感谢大家
  • 计算 R 中一个组中两个值同时出现的次数

    我搜索了这个问题的答案并发现了类似的答案 计算每组内的行数 https stackoverflow com questions 9809166 count number of rows within each group 计算 R 数据帧列
  • 提取N位数字的前X位

    如何选择一个数字的前2位数字 我只需要函数的名称 示例 12455 变为 12 13655 变为 13 基本上它相当于整数的子字符串 如果最后您再次需要一个数字向量 元素 您可以使用 as numeric substr x 1 2
  • 当我在 Android 设备上手动安装 app-debug.apk 时,它崩溃了

    当我从 Android studio 运行项目时 我的应用程序在 Android 设备上运行良好 但是 当我在设备上手动安装 app debug apk 时 应用程序在启动时崩溃 并且 app debug unaligned apk 没有生
  • 如何向 text_field_tag 添加占位符?

    我的表格中有以下行 text field tag mother name nil id mother name autocomplete class form group form control autocomplete off data
  • 使用fstream写入

    我试图在指定文件中查找一行并将其替换为我的行 我无法访问将要运行该程序的计算机上的库 因此我创建了一个自定义文件 问题似乎是对 fstream 对象的写入调用 我想知道你们中是否有人可以提供帮助 另外 我的 getline 循环在到达文件末
  • Python Selenium 将数据存储到 CSV 中的特定列?

    我有两份印刷品想写到一张CSV文件存入列A和列B 我的问题是 当我在最后打印 第一次和第二次打印 时 我只得到一个元素 我猜是多次 因为它不在循环之内 print text link 0 9 Result LMFCIIC PWFERT BK
  • 资源泄漏和内存泄漏与性能之间的关系

    对于资源泄漏 我指的是 Streams StreamWriter 我想它们正在消耗文件描述符 Handles GDI 或用户图形字体 很快所有 Closable 对象都可以算作资源 如果应用程序存在一些资源泄漏 假设某些输入流没有关闭 它们
  • 如何在 Zend 框架的 ini 文件中编写路由链……的链?

    我正在尝试使用 Zend 框架的 INI 文件定义如下路由 http api example com servicename http api example com servicename 版本 users userid items it
  • 如何在没有后端的情况下保存用户输入

    我刚刚学习 JavaScript 和 Web 开发 我想知道我想做的事情是否可能 我想编写一个 JavaScript 测验来保存用户输入的答案 而不需要后端 这可能吗 如果不可能 我能做到这一点的最简单和最容易的方法是什么 谢谢 PS 如果
  • 如何将 X11 键符号映射到 Unicode 字符?

    X11 将键码映射到键符号 然后将键符号映射到 Unicode 在程序中检索键符号到 Unicode 映射的好方法是什么 Try this http www cl cam ac uk mgk25 ucs keysym2ucs c
  • 通用 git 重置为默认上游 HEAD

    是否有语法可以重置为当前分支的默认上游 HEAD 就像是 git checkout mybranch git reset hard origin mybranch where origin mybranch可以通用当前分支的上游 HEAD
  • Windows - 无法启动 Git:可能 Git 可执行文件的路径无效

    Can t start Git C Users Cloudion PC AppData Local GitHub PortableGit d93ee8917cfa9add886773e6be9ec08609a502b6 bin git ex
  • 是否有任何理由在 Maven 中为我自己的传递依赖项保留显式依赖项声明?

    我已经阅读了一段时间有关 Maven 中的显式依赖声明与传递 隐式 依赖声明的内容 大多数人倾向于同意您应该始终显式声明项目所依赖的库 主要是为了避免版本不匹配 这是完全合理的 但是我们应该如何解决我们的内部依赖性 如果可以通过传递机制解决
  • 在纯文本 div 中插入新行

    我正在使用一个 CMS 它只允许特定 div 中的文本 HTML 例如 br 被解析为 lt br gt 对于 Unicode HTML 代码 例如 amp 会产生 and x00040 会产生 但它似乎不允许换行 回车 我怎样才能把一个
  • PyBind11 析构函数未调用?

    我有一个c 类包裹着PyBind11 问题是 当Python脚本结束c destructor不会被自动调用 这会导致不整齐的退出 因为网络资源需要由析构函数释放 作为解决方法 有必要显式删除Python反对 但我不明白为什么 请有人解释一下
  • 文本环绕段落中居中的图像

    例如 text text text text text text text text text text text text text text text text text text text text text text text te
  • 用汇编语言将 2 个数字相加并打印结果

    我需要有关如何添加两个数字然后打印结果的帮助 这是我的代码 MODEL SMALL STACK 200H DATA NUM1 DB 12 NUM2 DB 3 VAL DB MSG1 DB The sum is CODE BEGIN PROC