【问题标题】:How assembly language distinguish Numbers from Asci letters?汇编语言如何区分数字和 Ascii 字母?
【发布时间】:2022-01-13 00:13:24
【问题描述】:

例如,如果我有一个 32 位寄存器 eax,其中存储了值 49,并且我打印存储的值,它将在 Asci 中打印 1。但同时我也可以使用这个寄存器进行加法和减法等计算

write sys 调用或 print 函数会触发从数字到 asci 字母的任何类型的转换吗?

【问题讨论】:

  • 字母 '1' 由数字 49 表示。唯一发生的转换是当您的显示设备选择将字符 49 呈现为“1”符号的形状时。
  • 简短回答 - 它没有。 “数字”和 ASCII 都以二进制格式存储。如果没有上下文,二进制数据可以表示从数字到字符、像素甚至地址的任何内容。为数据提供上下文不是汇编的工作。了解他们操作的数据的上下文是程序员的工作。

标签: assembly logic nasm computer-science cpu-architecture


【解决方案1】:

这实际上并不是汇编语言本身的属性,而是处理器的操作和处理器正在执行的机器代码程序(与所使用的源代码语言无关)。

此外,处理器不需要知道数据是 ascii 代码还是原始数字数据。

为什么?因为程序可以控制正在发生的事情。它告诉处理器如何解释数据,是否打印,打印什么,何时将什么系列的 ascii 数字转换为数字,反之亦然:何时将什么数字扩展为一系列 ascii 数字。程序的工作是知道这些数据是 ascii 并且数据是数字的——并且在必要时,它将通过程序机器代码中的特定指令告诉处理器对数据的不同处理(例如,字节与字) .

程序可能存在逻辑错误,这意味着有时程序员编写的程序会将简单/原始 1 发送到 I/O 设备(打印效果不佳)而不是添加 48 得到 49所以将打印一个“1”数字。处理器不会将此类事情视为错误,而只是按照它在这方面的指示进行操作。

高级语言有类型的概念,可以帮助防止此类错误 - 汇编语言的此类预防措施较少。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 2016-01-20
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    相关资源
    最近更新 更多