Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 为什么我们不能将A000H或更高的值移动到16位寄存器中?_Assembly_Hex_Emu8086 - Fatal编程技术网

Assembly 为什么我们不能将A000H或更高的值移动到16位寄存器中?

Assembly 为什么我们不能将A000H或更高的值移动到16位寄存器中?,assembly,hex,emu8086,Assembly,Hex,Emu8086,我已经尝试了最基本的指令mov ax,B006H,并得到了错误消息 mov ax,0B006H 解析器很挑剔 解析器很挑剔十六进制数字必须以十进制数字开头。这就是为什么这么多十六进制常量以前导零开始 这将有助于: mov ax, 0b006h 十六进制数字必须以十进制数字开头。这就是为什么这么多十六进制常量以前导零开始 这将有助于: mov ax, 0b006h 这是10秒之前的答案。更老,但关于解析器为什么挑剔的细节稍微少一些。在您的回答中,读者需要了解为什么这里需要前导0。如果你考虑如

我已经尝试了最基本的指令mov ax,B006H,并得到了错误消息

mov ax,0B006H
解析器很挑剔


解析器很挑剔

十六进制数字必须以十进制数字开头。这就是为什么这么多十六进制常量以前导零开始

这将有助于:

mov ax, 0b006h

十六进制数字必须以十进制数字开头。这就是为什么这么多十六进制常量以前导零开始

这将有助于:

mov ax, 0b006h


这是10秒之前的答案。更老,但关于解析器为什么挑剔的细节稍微少一些。在您的回答中,读者需要了解为什么这里需要前导0。如果你考虑如何编写语法分析器/符号名称的模糊性,这是显而易见的,但不是每个人都能轻易地想到这个理由。@PeterCordes:我不明白为什么,因为我使用的汇编程序无法处理符号名称,而只处理[symbolname],所以我认为解析器是挑剔的,没有什么好的理由;在英特尔语法NASM和MASM的两种主要风格中,mov ax符号都是有效的。在NASM中,它是地址的mov立即数。在类似MASM的汇编程序中,它是从符号地址加载的,与mov ax相同,[symbol]@PeterCordes:在我得到一个真正的汇编程序之前,我学习了Borland C++的asm{}块。这是比10秒更老的答案。更老,但关于解析器为什么挑剔的细节稍微少一些。在您的回答中,读者需要了解为什么这里需要前导0。如果你考虑如何编写语法分析器/符号名称的模糊性,这是显而易见的,但不是每个人都能轻易地想到这个理由。@PeterCordes:我不明白为什么,因为我使用的汇编程序无法处理符号名称,而只处理[symbolname],所以我认为解析器是挑剔的,没有什么好的理由;在英特尔语法NASM和MASM的两种主要风格中,mov ax符号都是有效的。在NASM中,它是地址的mov立即数。在类似MASM的汇编程序中,它是从符号地址加载的,与mov ax相同,[symbol]@PeterCordes:在我得到一个真正的汇编程序之前,我在Borland C++的asm{}块上学习过。mov ax,0b006h也工作,mov ax,0xb006h也工作。你是什么意思?哦,你的意思不是说,即使是可以被2整除。为了清楚起见,我要删掉这个词even@Basilisk如果使用0x前缀,请不要将h放在末尾。尽管EMU8086支持,但大多数其他汇编器(包括MASM/TASM)都会给出一个错误。可以使用0x前缀或h后缀,但不能同时使用两者。@MichaelPetch:这意味着汇编程序要将标记识别为数字文字,它必须以数字开头,但即使对于十六进制数字,它也必须是十进制数字,而不是任何十六进制数字。我想我第一次读到它的时候,我的大脑就是这样分析的,但是在看到你的评论之后,我的大脑花了几秒钟才重新正确地分析它P@PeterCordes在我的评论中,他们建议即使是为Cal.MoV AX,0B06H也做MOV AX,0xB06H也工作。你是什么意思?哦,你的意思不是说,即使是可以被2整除。为了清楚起见,我要删掉这个词even@Basilisk如果使用0x前缀,请不要将h放在末尾。尽管EMU8086支持,但大多数其他汇编器(包括MASM/TASM)都会给出一个错误。可以使用0x前缀或h后缀,但不能同时使用两者。@MichaelPetch:这意味着汇编程序要将标记识别为数字文字,它必须以数字开头,但即使对于十六进制数字,它也必须是十进制数字,而不是任何十六进制数字。我想我第一次读到它的时候,我的大脑就是这样分析的,但是在看到你的评论之后,我的大脑花了几秒钟才重新正确地分析它P@PeterCordes是的,在我的评论中,他们认为为了清晰起见,要注意这个词。我假设A000 0h不起作用,你的意思是大于或等于A000 0H的16位值。规则是,如果您使用h后缀表示十六进制数,并且该值以a、B、C、D、E、F开头,则十六进制数必须以0开头。基本上,如果你有一个以字母开头的十六进制数,并且使用了一个h后缀,你必须在开头加上一个0。这不仅仅是16位数字。如果不在开头添加额外的0,则汇编程序将无法知道mov al,ch是否意味着将寄存器ch移动到al,或者是否意味着将十六进制值c 12十进制移动到al。为此,必须写入mov al,0ch。错误消息准确地告诉您问题所在。我假设A000H不起作用,您的意思是16位值大于或等于A000H。规则是,如果您使用h后缀表示十六进制数,并且该值以a、B、C、D、E、F开头,则十六进制数必须以0开头。基本上,如果你有一个以字母开头的十六进制数,并且使用了一个h后缀,你必须在开头加上一个0。这不仅仅是16位数字。不加e
如果汇编程序无法知道mov al,ch是否意味着将寄存器ch移动到al,或者是否意味着将十六进制值c 12十进制移动到al。为此,必须写入mov al,0ch。错误消息会准确地告诉您问题所在。