如何修复 x86 Turbo 汇编语言的输出

2024-03-10

DOSSEG
    .MODEL SMALL
    .STACK 100h
    .DATA

UserName db "Name: $"
CLRF     db 10,13,"$"
inputName db 24 dup ("$")

CurYear db "Current Year: $"
inputCurrentYear dw 8 dup ("$")

BirYear   db "Birth Year: $"
inputBirthYear dw 8 dup ("$")   

outputName db "Hello, $"

outputAge db "Your age is $"

currentYearH1 db "$"
currentYearH2 db "$"

birthYearH1 db "$"
birthYearH2 db "$"

answer1 dw "$"
answer2 dw "$"

.code

BEGIN:

;open bracket

mov ax,@data
mov ds,ax
mov es,ax

mov al,03h
mov ah, 00h
int 10h

lea dx,CLRF
mov ah,09h
int 21h

;username input

NameInput:
lea dx,UserName
mov ah, 09h
int 21h

mov inputName,21
lea dx,inputName
mov ah,0ah
int 21h

lea dx,CLRF
mov ah,09h
int 21h

;current year

CurrentYear:
lea dx,CurYear
mov ah,09h
int 21h

mov inputCurrentYear,05
lea dx,inputCurrentYear
;mov ax,dx
mov ah,0ah
int 21h

mov ax,inputCurrentYear
sub ax,3030h
xchg ah,al
aad
mov currentYearH1, al
mov ax,inputCurrentYear[4]
sub ax,3030h
xchg ah,al
aad
mov currentYearH2, al

lea dx,CLRF
mov ah,09h
int 21h

;birth year

BirthYear:
lea dx,BirYear
mov ah,09h
int 21h

mov inputBirthYear,05
lea dx,inputBirthYear
;mov bx,dx
mov ah,0ah
int 21h

mov ax, inputBirthYear[2]
sub ax,3030h
xchg ah,al
aad
mov birthYearH1,al
mov ax,inputBirthYear[4]
sub ax,3030h
xchg ah,al
aad 
mov birthYearH2,al

lea dx,CLRF
mov ah,09h
int 21h

;lea dx,inputBirthYear
;mov ah,09h
;int 21h

lea dx,CLRF
mov ah,09h
int 21h

;subtraction

;lea ax,inputCurrentYear

;lea dx,inputBirthYear

;sub ax,dx
;mov [SI],ax
;lea dx,[SI]
;mov ah,09h
int 21h
;sub ax,3030h

Output:
lea dx, outputName
mov ah,09h
int 21h

lea dx, inputName
mov ah,09h
int 21h

lea dx,CLRF
mov ah,09h
int 21h

;lea ax,inputCurrentYear

;lea dx,inputBirthYear

;sub ax,dx
;mov difference,ax

lea dx,outputAge
mov ah,09h
int 21h

lea dx,CLRF
mov ah,09h
int 21h

lea dx,CLRF
mov ah,09h
int 21h

mov al,birthYearH2
sub currentYearH2,al

mov al,birthYearH1
sub currentYearH1,al

mov al,currentYearH2
aam
add ax,3030h
xchg ah,al
mov answer2,ax

mov al,currentYearH1
aam
add ax,3030h
xchg ah,al
mov answer1,ax

lea dx, answer1
mov ah,09h
int 21h

lea dx,answer2
mov ah,09h
int 21h

lea dx,CLRF
mov ah,09h
int 21h

mov ah,4ch
int 21h    

end BEGIN

当我运行此代码时,输​​出中会出现随机符号,我想“清理”我的输出。


Int 21h/0Ah http://www.ctyme.com/intr/rb-2563.htm需要一个指向结构的指针,not指向字符串的指针。该结构的第一个字节必须由您填充字符串的最大长度。第二个字节将由函数填充输入字符串的实际长度。字符串won't根据需要以“$”结尾int 21h/09h http://www.ctyme.com/intr/rb-2562.htm,但为 0Dh。所以你需要改变这个角色。

我仅纠正了 inputName 的问题。剩下的就取决于你了。

    ...
    mov inputName,21
    lea dx,inputName
    mov ah,0ah
    int 21h

    ; change 0Dh to '$'
    xor bh,bh
    mov bl, [inputName+1]             ; length of string
    mov byte [inputName+2+bx], '$'    ; store end-of-string-character 

    ...

    lea dx, outputName
    mov ah,09h
    int 21h

    lea dx, [inputName+2]             ; pointer to string
    mov ah,09h
    int 21h

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

如何修复 x86 Turbo 汇编语言的输出 的相关文章

  • 将 GCC 内联汇编与采用立即值的指令结合使用

    问题 我正在为 ARM Cortex M3 处理器开发定制操作系统 为了与我的内核交互 用户线程必须生成 SuperVisor Call SVC 指令 以前称为 SWI 用于软件中断 该指令在ARM ARM中的定义是 这意味着该指令需要即时
  • 为什么允许 gcc 从结构推测加载?

    显示 gcc 优化和可能出现故障的用户代码的示例 下面代码片段中的函数 foo 将仅加载结构成员 A 或 B 之一 至少这是未优化代码的意图 typedef struct int A int B Pair int foo const Pai
  • 如何可移植地乘以 64 位操作数并获得 128 位结果?

    对于 x64 我可以使用这个 uint64 t hi lo hi lo 64bit x 64bit multiply of c 0 and b 0 asm mulq 3 n t d hi a lo a c 0 rm b 0 cc a 0 h
  • printf 内部如何工作? [复制]

    这个问题在这里已经有答案了 可能的重复 无需汇编的 C C 函数定义 https stackoverflow com questions 2442966 c c function definitions without assembly 你
  • 使用指针作为函数参数时的段前缀

    我有一个汇编 c 问题 我刚刚读到了有关段前缀的内容 例如 ds varX 等 前缀对于逻辑地址的计算很重要 我也读到 默认值是 ds 一旦您使用 ebp 寄存器来计算地址 就会使用 ss 对于代码 cs 是默认值 这一切都是有道理的 现在
  • 使用汇编器 8086 显示表的总和

    我正在编写一些代码 允许我对表进行求和 然后使用汇编语言显示其结果 这是我到目前为止所想到的 data segment tab db 9 dup 3 5 8 4 7 1 6 7 0 resultat db data ends code se
  • MASM32 中令人困惑的括号

    我正在尝试掌握 MASM32 但对以下内容感到困惑 我认为括号用于间接 所以如果我有预定义的变量 data item dd 42 then mov ebx item 会将 item 的内容 即数字 42 放入 ebx 中并 mov ebx
  • 如何关闭MIPS-GCC自动指令重排序?

    继这个问题之后 使用跳转 和链接 指令的奇怪 MIPS 汇编器行为 https stackoverflow com questions 3807480 weird mips assembler behavior with jump and
  • MIPS 在程序中使用 $s0... 等注册并最终恢复它是否优雅

    我在 MIPS 教程中读到 只有寄存器 s0 s7 在过程调用中被保留 但我认为 也许我错了 创建有副作用的程序并不优雅 我认为程序应该只更改 v0 v1 寄存器和堆栈 如果需要的话 我是对的吗 所以我认为在我的程序中我只能使用 t0 t9
  • 大端和小端表示

    如果我写以下内容 section data align 4 X db 1 Y dw 5 Z db 0x11 section text add dword X 0xAA000101 我试图理解大端和小端表示之间的差异 但我不明白每个表示的每个
  • I 类型指令的 MIPS 周期数 (addi)

    So on https en wikipedia org wiki Cycles per instruction https en wikipedia org wiki Cycles per instruction它说 对于多周期MIPS
  • 如何在汇编程序中使用 C 库?

    我想知道如何用汇编语言编写文本编辑器 但现代操作系统需要 C 库 特别是对于它们的窗口系统 我找到了这个page http pengu1n is programmer com posts 8304 html 这对我有很大帮助 但我想知道是否
  • 现代 x86 硬件不能将单个字节存储到内存中吗?

    说到 C 的并发内存模型 Stroustrup 的C 编程语言 第 4 版 第 1 节 41 2 1 说 就像大多数现代硬件一样 机器无法加载或存储小于单词的任何内容 然而 我的 x86 处理器已经有几年的历史了 它可以并且确实存储小于单词
  • g++ 内联汇编括号中不匹配

    g 向我抱怨以下代码中缺少括号 1 2 3 v v v asm volatile inb 1 0 a result Nd portnumber 1 2 3 正如您所看到的 括号是匹配
  • 获取比较指令的值

    据我了解 cmp 指令将设置标志寄存器中的一些位 然后 您可以使用 jle jnp 等指令基于这些指令进行分支 我想知道如何从比较中恢复整数值 示例 以下是有效的 c 语法 y x a gt 13 因此 a 与 13 进行比较 得到 tru
  • 我试图在 AAM 指令之后使用 AX 中存储的值将其除以 2,为什么它不适用于 2 位数字输出?

    英语不是我的母语 请原谅输入错误 我将在此处显示的代码是一项作业 我真的需要了解发生了什么事 我在 DosBox 0 74 和 TASM 汇编器中使用 Intel 8086 语法 当我必须除以 2 时 代码的问题在于三角形的面积 注意 程序
  • 英特尔® 事务同步扩展新指令 (TSX-NI) 与英特尔 TSX 有何不同?

    我在Intel的页面上找到了 https ark intel com products 97123 Intel Core i5 7500 Processor 6M Cache up to 3 80 GHz https ark intel c
  • 当非特权用户运行 C/asm 程序时,会对 Linux 造成什么危害?

    我一直在考虑一种场景 让用户 可以是任何人 可能有恶意 提交在 Linux PC 我们称之为基准节点 上运行的代码 目标是为单线程例程创建一种自动化基准测试环境 假设一个网站向代理发布了一些代码 该代理将此代码交给基准节点 而基准节点仅与代
  • 如何调试 iOS 应用程序在启动时崩溃,仅在程序集文件中设置断点

    我遇到了当前正在开发的应用程序的问题 问题是应用程序在启动时在后台运行一段时间后崩溃 并且仅在这种情况下 在应用程序被杀死时启动应用程序不会导致调试器或手机崩溃 无论是否进行调试 在后台启动应用程序大约 5 10 分钟都不会导致崩溃 在后台
  • 如何在 Ubuntu 14.04 LTS 中安装 ia32-libs (Trusty Tahr)

    我昨天安装了 Ubuntu 14 04 Trusty Tahr 一切看起来都还好 但是当我尝试编译一些C代码时 我遇到了以下错误 该错误似乎是由于操作系统缺乏 32 位架构支持造成的 错误输出如下 usr bin ld i386 archi

随机推荐

  • Java 可重入锁和条件 |生产者完成工作,消费者陷入困境

    一般信息 三个读取器线程从文件中随机读取块 每个块都有一个 ID 然后写入普通的 ArrayList 一旦具有所需 ID 的块被添加到列表中 写入线程就会写入输出文件 因此 我编写了一个 BlockingChunkList 它应该同步 ad
  • 为什么 Firefox 拒绝 ttf 字体

    我有来自网络的 ttf 字体 它们在 ftp 客户端 目录中列为 Windows ttf 字体 我在 Mac OSX 平台上的 Firefox 上使用嵌入字体 但收到以下 Web 控制台错误 17 59 49 201 downloadabl
  • Angularjs 和 jquery 无法以我常规的简单形式工作

    我正在学习 Angularjs 并创建了简单的表单 实际上我是 PHP 开发人员 所以我更喜欢使用 php 作为服务器端脚本语言 我无法将数据提交到服务器 我尝试了很多方法 但是如果我尝试使用标准方法 Angularjs 不起作用 那么这些
  • 如何使用 jQuery 进行重定向? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我使用 HTML 表单提交给 jQuery 验证 然后通过 ajax 将信息发送到 PHP 处理页面 一切都 100 正常工作 除
  • Xcode 7.3 不断在空闲状态下构建

    I noticed that Xcode 7 3 always keep building even in idle time This loads CPU much so sometimes it stops responding Doe
  • 异步构造函数

    我怎样才能最好地处理如下情况 我有一个需要一段时间才能完成的构造函数 var Element function Element name this name name this nucleus this load nucleus name
  • 不在范围内:数据构造函数?

    我是哈斯克尔的新手 我遇到这个问题 Assignment12 hs 5 12 不在范围内 数据构造函数 Suit Assignment12 hs 5 18 不在范围内 数据构造函数 Rank Assignment12 hs 6 11 不在范
  • Java简单计算器

    我用Java编写了这个计算器程序 仅当同时计算两个数字时 此方法才有效 这意味着要获得 1 2 3 的总和 您必须这样做 按 1 按 按 2 按 按 按 3 按 计算结果为 6 但我想对此进行编程 以便我可以通过以下方式获得答案 按 1 按
  • 在 Pi 上通过 python 执行 bluetoothctl 命令

    每次我想在我的 pi 上运行 python 脚本之前 我都会在终端上运行一系列 Bluetoothctl 命令 我想从 pi 自动连接到 BLE 设备 无需任何配对确认或用户交互 以下是每次在运行另一个 python 脚本之前重新启动 pi
  • 事务性与非事务性 msmq

    我不断看到文档 http msdn microsoft com en us library ms702030 VS 85 aspx表示不可能发送到事务范围之外的远程事务 msmq 队列 我发现这很难相信 因为我think我已经这样做了好几个
  • 无法将新元数据附加到捕获的图像

    我正在尝试将我自己的一些字段附加到我捕获的图像中 我似乎能够更改现有的 EXIF 条目 但无法添加新条目 无论是在 EXIF 字典中还是作为单独的字典添加到图像中 当我进行添加时 我可以将它们视为图像数据的一部分 但它们永远不会保存到图像文
  • Acumatica 过滤 PXSelector 具有快速搜索功能

    我有一个自定义 dac 和 pxselector 如下所示 With quick search red bordered search I want to filter with every properties For example w
  • main 的 ret 指令去哪里了

    我在 Programming from ground up 一书中了解了汇编 x86 如何在全球范围内工作 在本书中 每个程序都以退出中断调用结束 然而 在C编译的程序中 我发现程序以ret结尾 这假设有一个地址要弹出 这将导致程序结束 所
  • TYPO3 Extbase如何清空ObjectStorage

    我想在更新对象时 清空 ObjectStorage 它是 TYPO3 4 6 带有 Extbase 扩展 允许您在前端显示 添加 编辑 删除数据集 乍一看一切看起来都不错 我有一个字段引用另一张表 TCA partner gt array
  • Fortran 77 续行[重复]

    这个问题在这里已经有答案了 所以我必须用 fortran77 和 f 文件扩展名编写这个程序 并且我不想使用选项来编译它 我想修复该错误 但由于某种原因 我尝试过的所有操作仍然给我这个错误 我已经包含了代码和错误终端输出 程序 p1 隐式无
  • Android getActivity() 在片段内总是返回 null

    我遇到了一个奇怪的问题 getActivity 方法always在片段内返回 null 我在 onAttach 和 onCreateView 完成运行后调用它 该片段位于包含片段堆栈的 FragmentActivity 内 我向其中添加片段
  • 上传的图片仅在刷新页面后可用

    当我上传图片时 文件保存成功 路径设置成功 但表单提交后上传的图像并没有立即显示 仅当我重新加载页面时 才会显示上传的图像 我正在保存上传的文件 如下所示 InputStream is try File file new File C Do
  • 未找到 CodeIgniter 对象,仅索引函数有效

    我是 CodeIgniter 的新手 一切都很顺利 直到我发现我只能打电话给index 功能 我已经设置了config php autoload php and routes php正如预期的那样 在 config php 上 config
  • 从 .eml 文件获取文本的最佳方法是什么?

    我尝试从本地驱动器上的几个 eml 文件获取主题和消息正文 现在我尝试使用 Apache Commons Email 但有时它会循环且没有错误 这是我的代码 它应该从 eml 获取文本并将其保存到 txt MimeMessage mimeM
  • 如何修复 x86 Turbo 汇编语言的输出

    DOSSEG MODEL SMALL STACK 100h DATA UserName db Name CLRF db 10 13 inputName db 24 dup CurYear db Current Year inputCurre