程序集编号转 ascii

2023-12-13

我正在使用 intel 上的 at&t 语法来处理汇编程序。

我迷路了,如何将寄存器中的整数转换为 ASCII 数字?

假设我想转换数字 10,我会将数字 10 放入寄存器 %eax 中。 如果我只是将数字 48 添加到 %eax,ascii 符号将是:

我想将 48 加到 1 上,然后将 48 加到数字 10 中的 0 上。 我怎样才能做到这一点?

示例代码:

mov $10, %eax
#Cut the number in some way.
add $48, %eax

要将数字转换为 ASCII,您需要将数字除以 10 并使用余数作为结果。然后添加 ASCII“0”并存储结果数字。然后对商重复相同的操作,直到商达到零。

然而,这会以相反的顺序给出数字,从最低有效数字开始。您可以颠倒顺序,例如使用堆栈。将每个数字推入堆栈,然后弹出它们并存储到字符串缓冲区中。

像这样的东西(未测试):

.DATA
    strResult db 16 dup (0) ; string buffer to store results

.CODE
    mov eax, number     ; number to be converted
    mov ecx, 10         ; divisor
    xor bx, bx          ; count digits

divide:
    xor edx, edx        ; high part = 0
    div ecx             ; eax = edx:eax/ecx, edx = remainder
    push dx             ; DL is a digit in range [0..9]
    inc bx              ; count digits
    test eax, eax       ; EAX is 0?
    jnz divide          ; no, continue

    ; POP digits from stack in reverse order
    mov cx, bx          ; number of digits
    lea si, strResult   ; DS:SI points to string buffer
next_digit:
    pop ax
    add al, '0'         ; convert to ASCII
    mov [si], al        ; write it to the buffer
    inc si
    loop next_digit
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

程序集编号转 ascii 的相关文章

  • 我应该使用哪些 gdb 命令来缩小标签“main”中出现分段错误的位置?

    这是我的汇编代码和我的主要子例程 这是我的宏和常量 text fmt string x t t ln x n sfmt string 10lf t 10lf n error string Error filename string inpu
  • 不知道如何一次打印整个日历[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 cseg segment assume cs cseg ds cseg org 100H begin mov es cs video mov
  • 用于读/写 XMM 和 YMM 寄存器的内联汇编代码?

    我有 2 个变量来模拟 X86 XMM 和 YMM 如下所示 uint64 t xmm value 2 uint64 t ymm value 4 现在我想使用内联汇编来读取和写入 XMM YMM 寄存器 如何编写GCC内联汇编来复制xmm
  • 大端和小端表示

    如果我写以下内容 section data align 4 X db 1 Y dw 5 Z db 0x11 section text add dword X 0xAA000101 我试图理解大端和小端表示之间的差异 但我不明白每个表示的每个
  • 什么是微编码指令?

    我看过很多参考微编码指令的文献 这些是什么以及为什么使用它们 CPU 读取机器代码并将其解码为内部控制信号 将正确的数据发送到正确的执行单元 大多数指令映射到一个内部操作 并且可以直接解码 例如 在 x86 上 add eax edx只是将
  • 在长模式下更改 GDT 并更新 CS

    我正在编写一个简单的自制 64 位操作系统 通过 UEFI 启动它 这意味着当我的代码开始执行时 它已经处于长模式 并且启用了分页 现在 退出 UEFI 引导服务后 我想用我自己的控制结构替换 UEFI 构建的所有控制结构 成功更改 CR3
  • 如何查看JVM中JIT编译的代码?

    有什么方法可以查看 JVM 中 JIT 生成的本机代码吗 一般用法 正如其他答案所解释的 您可以使用以下 JVM 选项运行 XX UnlockDiagnosticVMOptions XX PrintAssembly 根据特定方法进行过滤 您
  • 现代 x86 硬件不能将单个字节存储到内存中吗?

    说到 C 的并发内存模型 Stroustrup 的C 编程语言 第 4 版 第 1 节 41 2 1 说 就像大多数现代硬件一样 机器无法加载或存储小于单词的任何内容 然而 我的 x86 处理器已经有几年的历史了 它可以并且确实存储小于单词
  • arm-thumb指令集的blx指令如何支持4MB范围

    读自https www keil com support man docs armasm armasm dom1361289866046 htm https www keil com support man docs armasm arma
  • gcc 如何知道内联汇编中使用的寄存器大小?

    我有内联汇编代码 define read msr index buf asm volatile rdmsr d buf 1 a buf 0 c index 使用该宏的代码 u32 buf 2 read msr 0x173 buf 我发现反汇
  • 如何获取 VESA BIOS 信息

    我正在跟踪Phil Opp 教程 https os phil opp com 关于用 Rust 编写一个操作系统 在稍微尝试了一下之后 我想在屏幕上显示真实的图形 我发现我应该从使用带有 VESA 的线性帧缓冲区开始 我在 osdev or
  • 编写 AMD64 SysV 程序集时使用哪些寄存器作为临时寄存器?

    我正在使用实现一个功能cpuid根据 AMD64 SysV ABI 进行组装 我需要在函数本身中使用 2 个临时寄存器 第一个用于累积返回值 第二个用作计数器 我的功能目前如下所示 zero argument function some c
  • 在 REP MOVSW 之前 PUSH CS / POP DS 的目的是什么?

    为什么在下面的代码中我们压入代码段 PUSH CS 然后将其弹出到数据段 POP DS 我将这些行明确指定为 line1 和 line2 请告诉我 MOVSW 在这里是如何工作的 IF HIGHMEMORY PUSH DS MOV BX D
  • x86-64 上这个语句有什么问题?

    该函数的目的是获取堆栈的起始地址 unsigned long find start void asm movq rsp eax 当我编译它时 出现错误 Error suffix or operands invalid for movq mo
  • C++ 中的 CPUID 实现

    我想知道这里是否有人有一些可以从任何托管 net 语言引用的 C CPUID 实现的好示例 另外 如果情况并非如此 我是否应该注意 X86 和 X64 之间的某些实现差异 我想使用 CPUID 来获取运行我的软件的机器上的信息 崩溃报告等
  • CALL指令是否总是将EIP指向的地址压入堆栈?

    x86架构中函数调用时是否存在返回地址不入栈的情况 No CALL根据定义 将在跳转到目标地址之前将返回地址压入堆栈 该返回地址是EIP or RIP sizeof call instruction 通常为 5 个字节 英特尔 64 和 I
  • 近调用/跳转表并不总是在引导加载程序中工作

    一般问题 我一直在开发一个简单的引导加载程序 并在某些环境中偶然发现了一个问题 在这些环境中 此类指令不起作用 mov si call tbl SI Call table pointer call call tbl Call print c
  • 从汇编程序获取命令行参数

    通读 专业汇编语言书籍 似乎它提供了用于读取命令行参数的错误代码 我纠正了一点 现在它从段错误变成了读取参数计数 然后是段错误 这是完整的代码 data output1 asciz There are d params n output2
  • 汇编8086监听键盘中断

    我有与此完全相同的问题 边画边听键盘 https stackoverflow com questions 13970325 8086 listen to keyboard while drawing 但第一个答案 接受的答案 只听键盘一次
  • 在 x86 ASM 中测试零通常哪个更快:“TEST EAX, EAX”与“TEST AL, AL”?

    测试 AL 中的字节是否为零 非零通常哪个更快 TEST EAX EAX TEST AL AL 假设之前有一个 MOVZX EAX BYTE PTR ESP 4 指令加载了一个带有零扩展的字节参数到 EAX 的其余部分 防止了我已经知道的组

随机推荐

  • 使用itext在pdf页脚中创建包含2行的表格

    您好 我想添加 2 行页脚 第一行将包含带有背景颜色的文档名称 第二行将有版权说明 我尝试使用 ColumnText 创建 但我无法设置行的背景颜色 只有文本获取背景颜色 有什么办法可以实现这一点吗 我花了一整晚的时间来寻找解决方案 但没有
  • 如何求逆排列?

    假设我有一个未知向量v 以及一个排列p 我该如何重建v from v p and p 一个等效的问题是找到一个排列q这样p q 1 2 n 由于这将在紧密循环中运行 因此我需要将答案矢量化 并且高效 为了找到逆排列 我通常使用 q sort
  • 在Android中使用静态方法?

    我已经在 Android 中制作了一些应用程序 并注意到我经常使用静态方法 例如我有一个类扩展PreferenceFragment 在此 PreferenceFragment 中我设置了一个onClick事件在Button Button b
  • INSERT,并获取自增值

    考虑下表 create table language id integer generated always as identity START WITH 1 INCREMENT BY 1 name long varchar constra
  • 在 PHP 中迭代嵌套数组

    我在此链接上有一个嵌套数组阵列样本 我正在使用下面的代码来解析它 但第二次和深度之外它什么也没有返回 但是尝试使用递归函数 printAllValues ArrXML function printAllValues arr keys arr
  • android中没有创建数据库

    在我的应用程序中 活动运行良好 但未创建数据库 logcat 中也没有错误 主要活动类别 package com example testdb import android os Bundle import android app Acti
  • vba sumifs单列中的多个条件

    假设我在 A 列和 B 列中有这样的内容 A 5 A 1 3 A 2 2 A 3 3 A 4 4 我想做 Application SumIfs range b b range b b A A 2 但这不起作用 数组值 我希望不经历 EVAL
  • 计算 MongoDB 中另一个字段分组的文档中某个字段中字符串实例的数量?

    我有一个特定的用例 我正在尝试找到一种方法在一个聚合管道中完成它 并且最好不需要对任何数据值进行硬编码 我想根据一个属性对文档进行分组 并查看文档中特定字段的值计数 示例数据 flightNum DL1002 status On time
  • Cocos2d 获取当前时间(以毫秒为单位)

    我尝试用谷歌搜索 但仍然找不到最佳答案 我想要的很简单 我只想获取当前时间 以毫秒为单位 我怎样才能在 cocos2d 中做到这一点 首先 一个类变量 CGFloat gameTime 然后在你的类中初始化 self scheduleUpd
  • 简单的xml添加属性

    当我使用 PHP 在 XML 中添加新元素时 如何设置属性 我的PHP代码是这样的
  • 在C中将int数组更改为float数组

    有谁知道如何将整数数组转换为浮点数组 你的问题措辞不好 但是 假设您已经声明了整数数组 您可以尝试如下操作 instantiate float array float fArray sizeOfIntArray step through e
  • 阅读 SICP 时使用什么解释器? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在阅读 SICP 书 网址为http mitpress mit edu sicp 要运行示例代码 我应该使用哪个解释器 我考虑过 Eclipse 的 Dandelion Lisp
  • 修改j2me midlet

    我想更改开源应用程序中的一些字符串 测试目的 所以我使用 jad 反编译器反编译我的应用程序 原始类文件http dl dropbox com u 32657135 YourTube class 发出命令Jad exe Yourtube j
  • 具有多个规则的 jQuery 表单验证插件

    我正在使用 jQueryValidation 插件 Problem 我想在一个输入字段中使用多个模式规则 例如 form validate rules email required true email true password requ
  • 每季度生成日期序列

    我想生成一个日期序列one quarter间隔 具有开始日期和结束日期 我有以下代码 gt seq as Date 1980 12 31 as Date 1985 06 30 by quarter 1 1980 12 31 1981 03
  • 在手机间隙运行 https 请求

    我正在iPhone中开发phone gap应用程序 我想使用JQuery getJSON url function 访问https json 请求 但仅在应用程序中它不会返回任何内容 但在正常的移动Safari中它工作正常 尽管它在phon
  • 如何使用 watchOS 2 SDK 构建应用程序

    在上次提交申请时 我们收到了此警告 WatchKit 支持无效 从 2018 年 4 月 1 日开始 提交到 Apple Watch App Store 的所有应用程序都必须使用 watchOS 2 SDK 或更高版本构建 检查您的部署目标
  • 仅沿第三维在 3D 逻辑数组中使用 Matlab“查找”

    我有一个 3D 逻辑数组 例如 A randi 0 1 x y z 其中 x y z 是整数 有没有办法找到每个 x y 沿第三维 z 的第一个真值 我可以像这样循环执行 B zeros x y for ix 1 x for iy 1 y
  • 如何将自定义ListAdapter设置为appwidget中的列表视图?

    我有一个列表视图 我需要为每个列表项提供一个自定义视图 因此我创建了一个自定义 ListAdapter 它提供了视图和布局 如下所示 但是如何使用 RemoteViews 将这个 listAdapter 设置为小部件中的 ListView
  • 程序集编号转 ascii

    我正在使用 intel 上的 at t 语法来处理汇编程序 我迷路了 如何将寄存器中的整数转换为 ASCII 数字 假设我想转换数字 10 我会将数字 10 放入寄存器 eax 中 如果我只是将数字 48 添加到 eax ascii 符号将