将 EDX:EAX 中存储的 64 位数字打印到标准输出

2023-12-04

我有一个大的 64 位数字存储在 EDX:EAX 中,分别为 21C3677C:82B40000。我正在尝试将数字以十进制形式打印到控制台 2432902008176640000 是否有系统调用可以让我完成此操作?


必须有人怜悯这个人和他的同学。如果“just call printf”不是作弊,那么使用它也不应该是作弊。这是我从我遇到的第一个汇编程序中偷来的。它使用 DOS 中断来查找磁盘大小并打印dx:ax每三位数字有一个逗号。你们可能不需要逗号。我已经修改它很多年了 - 可能会做一个rdx:rax版本很快。非常适合显示阶乘。这是非常幼稚和低效的,但仍然有效。请随意改进它。当然,在缓冲区中获得字符后,它只是带有不同歌词的“Hello World”。


;-----------------------------------------------
; u64toda - converts (64 bit) integer in edx:eax
; to (comma delimited) decimal representation in
; zero (was "$") terminated string in buffer pointed to by edi
;----------------------------------------
u64toda:
                pusha
                mov ebx, edx     ; stash high dword
                mov esi,0Ah      ; prepare to divide by 10
                xor ecx, ecx     ; zero the digit count
                jmp highleft     ; check is high word 0 ?
highword:
                xchg eax,ebx    ; swap high & low words
                xor edx,edx     ; zero edx for the divide!
                div esi         ; divide high word by 10
                xchg eax,ebx    ; swap 'em back
                div esi         ; divide low word including remainder
                push edx        ; remainder is our digit - save it
                inc ecx         ; count digits
highleft:
                or ebx,ebx
                jnz highword
lowleft:
                xor edx,edx          ; zero high word
                div esi              ; divide low word by 10
                push edx             ; our digit
                inc ecx              ; count it
                or eax,eax           ; 0 yet ?
                jne lowleft
                cmp ecx, byte 4      ; commas needed ?
                jl write2buf         ; nope
                xor edx,edx            ; zero high word for divide
                mov eax,ecx            ; number of digits
                mov ebx,3
                div ebx
                mov esi,edx            ; remainder = number digits before comma
                test edx,edx
                jnz write2buf        ; no remainder?
                mov esi,3             ; we can write 3 digits, then.
write2buf:
                pop eax              ; get digit back - in right order
                add al,30H           ; convert to ascii character
                stosb                ; write it to our buffer
                dec esi               ; digits before comma needed
                jnz moredigits       ; no comma needed yet
                cmp ecx,2             ; we at the end?
                jl moredigits        ; don't need comma
                mov al,','           ; write a comma
                stosb
                mov esi,03h           ; we're good for another 3 digits
moredigits:
                loop write2buf       ; write more digits - cx of 'em
                mov al,00h           ; terminate buffer with zero
                stosb
                popa
                ret
;------------------------
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 EDX:EAX 中存储的 64 位数字打印到标准输出 的相关文章

随机推荐

  • 多对多关系对象上的 FluentNHibernate 查询

    由于某种原因 我无法正确执行此查询 而且我不明白为什么 我有一个名为 博客 的对象 它有一个 ID 和一个 标签 列表 每个 标签 都有一个 id 和一个 名称 属性 由于这是多对多关系 我有另一个名为 blog tags 的表来连接它们
  • 循环设置对选定的 Outlook 文件夹的监视

    我正在 Outlook 中的 VBA 中执行以下操作 将 Outlook 项目拖到指定文件夹后 我将此 Outlook 项目保存到我的计算机 即文件系统 Private WithEvents Items As Outlook Items P
  • 在 Freepascal 编译的 DLL 和 Delphi 编译的 EXE 之间交换字符串 (PChar)

    经过大量实验 我找到了一种将 FreePascal 编译的 DLL 中的 PChar 与 Delphi 编译的 EXE 交换的方法 我负责 DLL 和 EXE 源代码 但其中一个必须在 FreePascal 中 另一个在 Delphi 中
  • 创建平铺多维数组,同时删除 axis0 第 I 个索引的子元素?

    我试图平铺一个数组 其中每个索引都是多维的 然后我从每个索引中删除第 i 个子元素 例如 从这个数组开始 gt gt gt a np array 1 7 0 2 7 0 3 7 0 gt gt gt a np tile a a shape
  • 如何在 Perl 中对浮点数进行四舍五入?

    如何将小数 浮点 四舍五入到最接近的整数 e g 1 2 1 1 7 2 输出perldoc q round Does Perl have a round function What about ceil and floor Trig fu
  • JavaScript if 语法

    当我尝试运行简单的 if 语句时出现语法错误 中断此错误 左侧赋值无效 中断此错误 容器 我有什么问题 以及我如何制作 if this ewCount 0 then elseif NotDoneh 0 then ELSE 这是我当前的代码
  • 音频文件获取左/右声道

    经过大量研究 我找不到明确的答案 我想要实现的是 取一个mp3 wav文件并将其左右声道保存为2字节 然后我可以操作每个通道 然后再次将它们添加并创建一个新的 wav 文件 最好是Java的解决方案 相关问题是分割CHANNEL IN ST
  • 在 Fabric.js 中全屏显示画布

    我希望我的画布元素始终具有相同的大小 独立于客户端的屏幕分辨率 如果用户使用浏览器进行缩放 则画布元素应始终具有相同的大小 此外 纵横比应始终相同 我想要 1920 1080 点的坐标空间 如果浏览器没有相同的比例 则画布元素的侧面可能有边
  • 如何使用 date-fns 更正时区?

    网上看这个例子 https stackblitz com edit date fns playground zeitzonen file index ts gt 控制台输出 以下情况 时间为上午 11 54 Setup const date
  • pythonic 方法在没有索引变量的情况下执行 N 次某事? [复制]

    这个问题在这里已经有答案了 我有一些代码 例如 for i in range N do something 我想做某事N次 循环内的代码不依赖于i 是否可以在不创建无用的索引变量的情况下完成这个简单的任务 或者以其他更优雅的方式完成 如何
  • 迭代 list_iterator 两次[重复]

    这个问题在这里已经有答案了 我希望迭代 list iterator 两次 当我当前尝试执行此操作时 迭代器没有任何内容可在第二次迭代 我可以重置它吗 l iter 1 2 3 4 for i in l print i for i in l
  • Xamarin Forms Shell TitleView 不使图像居中

    我有一个在 Xamarin Forms 中使用新 Shell 的应用程序 我将以下代码添加到我的页面之一 试图使用 TitleView 区域居中显示我的应用程序标题图像 仅供参考 我已经尝试过居中对齐这两个选项 但没有什么区别
  • 为什么通过括号访问Symbol.iterator?

    例如 如果我创建了一个数组 var array 1 2 3 4 返回一个迭代器我会做var iterator array Symbol iterator 我不明白为什么你通过括号访问 Symbol iterator 属性 为什么不只是arr
  • Android Studio C++ NDK 库示例

    我想下载一些使用 C 或 C 的 Android Studio NDK 项目的工作示例 它将被编译为 so 库 或我可以从中提取 so 的 APK 我已经尝试过使用 Android mk 构建 ndkbuild 以及使用 CMakeList
  • gltf 光标侦听器 A 框架中的单击事件

    我无法弄清楚为什么游标侦听器适用于除我的 gltf 模型之外的所有实体 这是我的html div div
  • 使用正则表达式拆分算术表达式

    我想拆分一个表达式 例如 1 0 8 5 5 into 1 0 8 5 5 1 0 8 5 5 这就是我现在得到的expression split g 对此有何建议 这是一个解决方案 它正确检测到 并接受空格的使用 b s b s var
  • Mysqli 回滚不起作用

    我有一个 MySQL 数据库并且正在使用mysqli 由于某种原因 我无法让交易正常进行 如果我打电话 mysqli gt rollback 它不会回滚 示例代码 mysqli gt autocommit false sql INSERT
  • Android BroadcastReceiver 安装后不工作

    问候 我正在开发一个应用程序 它有一个 BroadcastReceiver 监听 android intent action PHONE STATE 该应用程序在手机状态更改时运行 我用它在检测到来电时运行代码 这在我的大多数测试手机上运行
  • 如何在MySQL中复制一行并插入到具有自动增量字段的同一个表中?

    在 MySQL 中 我试图复制一行自动递增 column ID 1 and insert将数据作为新行放入同一个表中column ID 2 我如何在单个查询中执行此操作 Use INSERT SELECT insert into your
  • 将 EDX:EAX 中存储的 64 位数字打印到标准输出

    我有一个大的 64 位数字存储在 EDX EAX 中 分别为 21C3677C 82B40000 我正在尝试将数字以十进制形式打印到控制台 2432902008176640000 是否有系统调用可以让我完成此操作 必须有人怜悯这个人和他的同