- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在按照 Kip Irvine 的“汇编语言 x86 编程”一书学习汇编编程。
在书中,作者说
MASM uses the TBYTE directive to declare packed BCD variables. Constant initializers must be in hexadecimal because the assembler does not automatically translate decimal initializers to BCD. The following two examples demonstrate both valid and invalid ways of representing decimal -1234:
intVal TBYTE 80000000000000001234h ; valid
intVal TBYTE -1234 ; invalidThe reason the second example is invalid is that MASM encodes the constant as a binary integer rather than a packed BCD integer.
intVal3 TBYTE 1234
应该是无效的,但它的编译就像有效代码一样)
.386
.MODEL FLAT, STDCALL
.STACK 4096
ExitProcess PROTO, dwExitCode: DWORD
.DATA
intVal1 TBYTE 800000000000001234h
intVal2 TBYTE -1234h
intVal3 TBYTE -1234 ; compiled despite being invalid
.CODE
main PROC
invoke ExitProcess, 0
main ENDP
END main
最佳答案
TBYTE
的存在理由type 是具有与 x87 FPU 的内部寄存器相同宽度的东西,这意味着它可用于将这些寄存器之一的内容溢出到内存中而不会丢失任何精度。
通常,当您将浮点值保存在内存中时,您可以将其表示为单精度(32 位; DWORD
)或 double (64 位; QWORD
)值。这很好,只是它失去了精度。如果您想在计算期间溢出一个临时中间值,那么您通常无法通过截断该值而损失精度,因为这会影响最终结果。
姓名 TBYTE
只是意味着这种类型的值是 10 字节宽——与 is used internally for floating-point values on the x87 的宽度相同. (默认情况下,至少,假设您没有降低 FPU 的精度。)
所以,TBYTE
实际上与二进制编码的十进制 (BCD) 没有本质的关系。我不知道 Kip Irvine 在那里谈论什么。您当然可以将 BCD 值存储在 TBYTE
中。 ,但您也可以将较小的 BCD 值存储在 QWORD
中。或 DWORD
.顾名思义,BCD只是一种允许您以二进制形式存储十进制数字的编码。
之所以
intVal3 TBYTE -1234
-1234
的 10 字节值。 .它隐式扩展
-1234
填充 10 个字节,得到值
0xFFFFFFFFFFFFFFFFFB2E
,正如您在十六进制转储中看到的那样。
-1234h
也是一样,除了
h
表示该值被解释为十六进制,而不是十进制。
myValue QWORD -1234
-1234
长度为 8 个字节。
In the end, it doesn't matter how you specify the memory content in the source, … the code which operates upon that memory defines its "meaning" (type).
TBYTE
,它存储了 10 个。与
QWORD
,它存储了其中的 8 个。与
DWORD
,它存储了其中的 4 个。你得到了图片。您的代码如何解释这些字节取决于您,因为您必须编写该代码。
FBLD
和
FBSTP
.这些
can be used as a slow way to turn a binary integer into decimal digits .
m80bcd
值作为唯一的操作数,它是一个 80 位的 BCD 值,长度与
TYBTE
相同。 .因此,Kip Irvine 可能正在谈论
TBYTE
的这种用途。值。
TBYTE
初始化为 BCD 格式,因为这在您使用
TBYTE
时会非常不方便存储扩展精度浮点值,如上所述。使用 MASM 或任何其他汇编程序,您仍然需要自己来表示分配给
TBYTE
的值。适本地作为 BCD 或浮点,无论你想要哪个。
FBLD
和
FBSTP
,您几乎可以再次忘记它们。我不认为它们曾经非常常用,而且现在肯定没有任何用处。即使在较旧的 CPU 上,如最初的 Pentium (P5) 和 Pentium II (P6),这些指令也需要大约 150 个时钟周期。在较新的 CPU 上,它们变得更慢(Skylake 每 266 个周期的吞吐量为 1
FBSTP
)。因此,即使您确实想使用 80 位 BCD 值,最好还是自己写出必要的指令。 (如果您需要帮助,请提出一个新问题。)
关于assembly - intVal3 TBYTE 1234 -- 汇编器没有注意到无效的 TBYTE 变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44793261/
我通过帖子获得输入值,其中一些可能是ID指的其他内容,而有些则开始于0。在选择具有ID 0的内容或没有值的内容时,是否存在 Intval( ) 在解析失败时返回比 0 更有用的东西?或者我能以某种方式
这对我来说听起来很奇怪: $test_1 = 'string'; $test_2 = '0'; var_dump(intval($test_1)); // Output: int 0 var_dump
这个问题已经有答案了: PHP intval() weird results (5 个回答) 已关闭 8 年前。 在这里,$username是一个用户输入,我正在尝试检查该条目是否是用户名或用户 ID
我正在尝试使用下面的 setInterval 快速循环一系列图像以生成动画。但是,如果我将焦点从浏览器选项卡移开然后再移回来,动画就会闪烁。 我看到了一个关于使用“实时”来捕捉动画的线程,但由于我的线
在 PHP 5 中,每当我将数字作为输入时,我都会使用 intval()。这样,我想确保我没有得到任何字符串或 float 。我输入的数字应该都是整数。但是当我得到数字 >= 2147483647 时
由于 PHP 中的 float 数据类型不准确,并且 MySQL 中的 FLOAT 比 INT 占用更多空间(并且不准确),因此我总是将价格存储为 INT,在存储之前乘以 100,以确保精确到小数点后
假设我有以下字符串: danger13 afno 1 900004 使用 intval() 得到 13,但是,我想获取字符串中的最高整数,即 9000004,我该如何实现? 编辑:字符串有不同的形式,
所以我是新人,所以我不是很好。很抱歉我的英语不好,但我可以帮助你! 这是我的代码 $sql = "INSERT INTO bestellung (userID, name, email, item,
"; echo floatval(substr($Content, 16, 25)).""; echo substr($Content, 27, 37).""; ?> 为什么这段代码返回 71.056
有什么区别: (int) '1'; 和: intval('1'); ? 最佳答案 intval() 接受 second argument ($base) 而 (int) 没有。 int intval(
is_numeric、intval、ctype__digit..你可以信赖它们吗? 还是我必须使用正则表达式? function isNum($str) { return (preg_matc
User: 你能从上面的代码中看出什么威胁吗?我必须对我输出的所有内容使用 htmlspecialchars 吗?我应该使用 is_numeric 还是 intval 来检查获取的是数字? 我只是在
亲爱的大家。 我在 mysql 数据库的某些表中使用整数主键。在从 PHP 脚本输入之前,我正在做一些清理,其中包括 intval($id) 和 $mysqli->real_escape_string
String conversion to numbers 上的 PHP 手册说: The value is given by the initial portion of the string. If
这个问题在这里已经有了答案: Is there any particular difference between intval and casting to int - `(int) X`? (7
背景、概述 早在Sql注入横行的前几年,字符串转化为整数就已经被列为每个web程序必备的操作了。web程序将get或post来的id、整数等值强制经过转化函数转化为整数,过滤掉危险字
我制作了一个小脚本,它从文本文件中给出了一些数据。为了刷新数据,我尝试使用 intvall 并重新加载页面。 setInterval(page_refresh
我想确保在 MySQL 查询中使用 int 值之前已清理并验证该值。 这个项目不使用准备好的语句,因为我意识到这是最好的选择,所以我特别询问关于转换 int、intval() 和 filter_inp
我正在做过滤器脚本。用户写入age_to,我得到最大年龄的用户。问题是我的用户表中只有完整的出生日期。如何获取所有数据?我认为 intval 函数很好,但我不知道如何在 mysql 查询中使用它。 $
intval() = 0 上是否为 NULL 值? $value = NULL $value2 = intval($value) // will be 0? 这是正确的,请让我知道吗? 最佳答案 是的
我是一名优秀的程序员,十分优秀!