这段代码是否正确(数字加数字,然后打印结果)

2023-12-19

我想用汇编语言做一些简单的事情。
两个数字相加,并将结果打印在屏幕上。

我做了那个代码:

.Model SMALL
.Stack 100h

.Code
start:
   MOV ax, 10
   ADD ax, 5
   MOV ah, 02h
   INT 21h 

   MOV ah, 01h
   INT 21h

   MOV ah, 4ch
   INT 21h

end start

编译代码没有任何错误后,告诉我一个奇怪的字符。


修改的:

MOV dl, 10
ADD al,5
MOV dl, al

MOV ah,02h
INT 21h 

但仍然打印出一个奇怪的字符 我不知道如何在屏幕上打印数字


是的,就是你will最有可能得到一个奇怪的字符,因为 int 21/ah=02 要求打印的字符位于dl注册,并且您还没有填充dl与任何东西。

您可能想通过以下方式转移值:

mov  ax, 10
add  ax, 5

push ax             ; these are the two new lines.
pop  dx

mov  ah, 02h

但是,请记住,即使您do转移价值al to dl,第 15 个字符可能不是您所期望的。 15 是 ASCII 控制字符之一,我不确定 DOS 中断将为它们输出什么。

如果你想打印出数字15, 你会需要two来电,一dl = 31h第二个是dl = 35h(这两个 ASCII 代码1 and 5人物)。

如果你想知道如何在寄存器中取出一个数字并输出digits对于可读形式的该数字,有一些伪代码我之前的一个回答 https://stackoverflow.com/questions/7884143/how-to-print-numbers-greater-then-10-in-arm200-assembly-language/7884259#7884259.

从这个答案中,你可以得到伪代码:

    val = 247

    units = val
    tens = 0
    hundreds = 0
loop1:
    if units < 100 goto loop2
    units = units - 100
    hundreds = hundreds + 1
    goto loop1
loop2:
    if units < 10 goto done
    units = units - 10
    tens = tens + 1
    goto loop2
done:
    if hundreds > 0:                 # Don't print leading zeroes.
        output hundreds
    if hundreds > 0 or tens > 0:
        output tens
    output units
    ;; hundreds = 2, tens = 4, units = 7.

现在您需要将其转换为 x86 程序集。让我们从所需的值开始ax:

    mov  ax, 247                 ; or whatever (must be < 1000)
    push ax                      ; save it
    push dx                      ; save dx since we use it

    mov  dx, 0                   ; count of hundreds
loop1:
    cmp  ax, 100                 ; loop until no more hundreds
    jl   fin1a
    inc  dx
    sub  ax, 100
    jmp  loop1
fin1a:
    add  dx, 30h                 ; convert to character in dl
    push ax                      ; save
    mov  ah, 2
    int  21h                     ; print character
    pop  ax                      ; restore value

    ; now do tens and units the same way.

    pop dx                       ; restore registers
    pop ax

现在,代码段(尽管由于我进行汇编已经有一段时间了而出现任何错误)应该打印出百位数字,并只留下 ax 的十位和个位数字。

将功能重复两次以获得十位和个位应该是一件简单的事情。

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

这段代码是否正确(数字加数字,然后打印结果) 的相关文章

随机推荐

  • java.lang.Math.PI 等于 GCC 的 M_PI 吗?

    我正在用 Java 和 C C 编写一些参考算法 其中一些算法使用 我希望每个算法的两种实现都能产生完全相同的结果 没有不同的舍入 迄今为止一直有效的一种方法是使用自定义的pi常量 在两种语言中完全相同 例如 3 14159 然而 当 Ja
  • 如何在 matplotlib 中创建具有垂直阴影的绘图[重复]

    这个问题在这里已经有答案了 I want to be able to replicate the following plot x 轴上有时间 y 轴上有 GDP GDP 线只是每日时间历史 无论其值如何 而衰退数据具有以下结构 从 1 1
  • ngrx 影响错误处理

    我有一个关于 ngrx效果的非常基本的问题 如何忽略效果执行期间发生的错误 使其不影响将来的效果执行 我的情况如下 我有一个动作 登录 和一个监听该动作的效果 如果此效果中发生错误 我想忽略它 当发生此错误后第二次调度 LOGIN 时 应再
  • MJML - 模板插值、动态数据、上下文

    经过大量搜索后 我很难找到如何 MJML https mjml io 处理动态数据和模板插值 我期待类似的事情 import mjml2html from mjml const context message Hello World con
  • 在 Flutter 中使用新版本更新(本机)Android 应用程序,同时保留数据库

    我有一个用java编写的android小应用程序 我正在使用flutter重写 是否可以通过保持 SQLite 数据库结构 包括所有数据 完整来过渡到新版本 我进行了测试 虽然我能够覆盖应用程序 但升级后数据丢失了 如果有人需要它 我可以从
  • 自定义视图转换为位图返回黑色图像

    我需要创建一个自定义视图 然后将其保存为 png 文件到 SD 卡中 现在我在 SD 卡中获取黑色图像 我无法在代码中找出问题所在 谁能帮我一下 布局文件
  • Visual Studio 2005 安装向导 - 为所有用户创建桌面快捷方式

    我正在使用安装向导项目为 Windows 窗体应用程序创建 msi 安装程序 我已将其配置为安装桌面快捷方式 但不幸的是 它仅在运行安装程序的用户的桌面上放置了一个快捷方式 有什么办法可以配置它在桌面上放置快捷方式all users 在项目
  • 尝试访问 upload.php 时,plupload 运行时返回 403 FORBIDDEN 错误

    介绍 我试图在一个可能复杂的环境中实现相对简单的事情 我想从 JavaScript 小部件上传文件 Netvibes UWA 格式 http dev netvibes com 到本地 Intranet 服务器 使用plupload jQue
  • 使用反射C#获取JsonProperty属性的名称

    我有一个关于 JsonProperties 的课程 public class MyClass JsonProperty Editor 1 public string Editor get set 我想避免在我的代码中出现魔术字符串 但我需要
  • 可以合并多个输入,每个输入都使用不同来源的 typeahead.js 吗?

    我有一个包含大量文本输入的表单 我想将其中 10 个文本输入与 Bloodhound 一起使用 typeahead js 我让它适用于其中的两个 它们都包括预取和远程数据源 但是 typeahead Bloodhound 的每个实例都有相当
  • 如何使用 Highcharts Drupal 7 模块

    如何使用 Highcharts Drupal 7 模块 我尝试使用视图集成 但设置不可用 但我看到了一个图像http drupal org files views settings png http drupal org files vie
  • Javascript、HTML 和 onClick - 函数未定义

    我正在尝试用 Javascript 制作一个指向富文本编辑器的 插入链接 按钮 基本上 它要做的就是将以下代码添加到其内容中 a href linkGoesHere textGoesHere a 问题是 someJSFunction 当用户
  • 如何使这个线程安全

    我有以下用于 Fluent NHibernate 的 SessionFactory 我收到一个错误 创建 SessionFactory 时使用了无效或不完整的配置 带有 InnerException 的 已添加具有相同密钥的项目 这个问题只
  • 通过添加当前电脑名称来批量重命名电脑

    背景 我作为分包商将数千台计算机从 xp 迁移到 7 这些计算机位于域中 我们拥有在域中添加 修改和删除计算机的管理员权限 当我们第一次接触xp机器时 我们必须在名称前面添加 delete 并重命名 例如 旧名称 pc12345 新名称 d
  • XSLT:包含()多个字符串

    我在 XSLT 中有一个名为variable name我想设置为1 如果相关产品具有名称为 A 或 B 或同时具有 A 和 B 的属性
  • Firestore:授予权限的交易被拒绝

    我们正在访问火库来自我们的 Java 应用程序引擎实例 非事务性请求成功成功 但事务性请求失败并出现错误 firestore PERMISSION DENIED Missing or insufficient permissions 交易示
  • 根据 LatLng 列表计算总距离

    我使用 dart flutter 和 package latlong latlong dart 将 GPX 文件解析为 LatLng 对象列表 这工作正常 但下一步是找到路线的总距离 这里的问题是 如何从 LatLng 对象列表中获取总距离
  • Windows Phone 8 应用程序中的应用内购买有限制吗?

    我们发布了 WP8 应用程序 用于使用应用程序内购买来购买杂志 报纸 我们为每一期创建了单一应用内购买 一些订阅和 10 包应用内购买WP Store 中为该应用定义了 134 个应用内购买 问题是 CurrentApp LoadListi
  • Flutter:pub 已完成,退出代码为 255

    我正在通过构建运行器 json 模型和 json 可序列化为我的 flutter 应用程序制作模型 但我收到了这个错误 Unhandled exception RangeError index Invalid value Valid val
  • 这段代码是否正确(数字加数字,然后打印结果)

    我想用汇编语言做一些简单的事情 两个数字相加 并将结果打印在屏幕上 我做了那个代码 Model SMALL Stack 100h Code start MOV ax 10 ADD ax 5 MOV ah 02h INT 21h MOV ah