微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 8086 汇编程序中包含有符号值?

如何解决如何在 8086 汇编程序中包含有符号值?

我在编写代码时不理解包含有符号值的概念,例如编写包含有符号值(例如 -12)的代码然后返回其绝对值 (12)?

解决方法

如果在编写时包含有符号值是指在运行时从键盘输入的用户读取有符号数值,则程序必须解析该值,请记住它以-符号开始,然后像往常一样解析后面的数字,如果记住符号-,则对最终值取反。
或者,如果请求绝对(非负)值,则应忽略符号。

如果在编写时包含有符号值是指在汇编时从源文件中读取有符号数值,例如使用 MOV AX,-12 之类的指令,那么汇编器会处理正确解析数字-12。如果需要立即数的绝对值,如果 NEG AX 设置了 SignFlag,则可以使用 TEST AX,AX 反转它。但是,每个理智的程序员都会在他/她的头脑中将数字转换为绝对值,而不是在运行时由 CPU 来完成。

,

在像 C 这样的语言中,有符号与无符号是一种数据类型的属性。数据类型用于声明变量,变量用于保存值。因此,我们将大小和符号结合到一个数据类型概念中,该数据类型概念在给定变量的一个地方(即在其声明处)捕获。

在汇编语言中,这些问题是分散的。一方面,我们没有真正的变量,我们有存储,无论是内存还是寄存器。要查看差异,在汇编语言中,我们可以(并且经常)更改存储的含义——将相同的存储重用于另一个逻辑目的(C 中的不同变量)。这尤其适用于寄存器,但也可能发生在内存中(尤其是在堆栈上)。

为了保留内存(如在全局存储中),我们可以声明多个字节的存储空间,但不考虑符号。根据汇编程序,我们可以使用有符号或无符号十进制值来初始化存储,但它仍然只是初始化存储,与 C 中具有正确数据类型的已初始化变量不在同一级别。

在使用该内存期间,访问读取或写入该存储,是我们选择解释为有符号或无符号的时候。一致性是程序员的责任:每次将逻辑变量作为存储访问时,我们必须使用不关心符号的指令,或者使用正确的有符号/无符号指令。当我们将一个值从一个位置复制到另一个位置时,我们通常不关心符号(大小很重要)。当我们加或减时,这些算术运算对有符号和无符号类型都适用。当我们比较项目(或检查加法/减法溢出)时,我们需要非常了解有符号和无符号数据。

在 C 中,我们可以使用强制转换来重新解释具有不同符号的变量,但我们不能重新声明或重新利用变量以具有不同的符号。该语言确保每当我们引用一个变量时,它都引用相同的数据类型。在汇编中,对于变量的预期符号,由各个指令以相同的一致方式引用变量的存储。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。