assembly 什么是字节值(程序集)

xdnvmnnf  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(100)

我是汇编语言的新手,我的第一个家庭作业是编写一个程序,读取一个字节值,并将其显示在屏幕上。我的问题是,我不确定他们所说的字节值是什么意思。我知道bytes是什么,它们是二进制值吗?一个8位长的输入只能有1和0?如果这是他们的意思,他们会写二进制值,不是吗?(显然我试着问老师,他没有回应。)如果我没弄错的话,我们用的是MASM 611。抱歉,信息不足,我是新手。

niwlg2el

niwlg2el1#

字节值是适合8位字节的无符号或有符号整数值1。
一个字节(或字或双字)的值可以用许多不同的方式表示,用于输入和输出,或在源代码中。
例如,一个十进制数字的ASCII字符串(如“0”到“255”表示无符号,或-128到+127表示2的补码,如果在解析输入时支持前导负号的话)。您不必进行范围检查,只需将结果截断为一个字节即可。
或者十六进制数字串,甚至是以2为底的数字串('0''1' ASCII字符),这两种字符都在How to convert a binary integer number to a hex string?中讨论
或者来自ReadFile/WriteFile Windows系统调用的原始二进制字节,或者加载/存储到内存中的变量。
或者作为ASCII字符,因为ASCII代码需要7位,我们只需将它们填充为8位并将其存储在字节中。在源代码中,这看起来像mov al, 'z',它完全等效于mov al, 122mov al, 7Ah
作业的措辞暗示他们需要某种形式的文本输入和输出,可能是以10为基数(十进制)的ASCII数字。不过,你也可以选十六进制。它们希望您将输入字符串转换为1字节整数,然后再将其格式化。
就像在 * DOS assembly read two succeeding characters, and convert to number * 和类似的问题-答案有十进制字符串整数为2位数的输入字符串。关于输出,请参阅Displaying numbers with DOS(其中包括16位模式下32位整数的更复杂的代码。)另外,在汇编级编程中,如果没有c库中的printf,如何打印整数?(itoa,整数到十进制ASCII字符串)的算法基础。

**脚注1:**上下文是x86汇编语言,所以我们可以100%确定假设8位字节是可以的。一些早期的x86之前的计算机有其他的字节大小,比如9位和18位或36位的字。

xlpyo6sf

xlpyo6sf2#

在汇编中有一个字节值,一个字,一个双字和一个双四字,它是一个8位/2个半字节的集合,一个字节表示内存或寄存器中存在的一个小字节格式的字节,您可以在汇编x8086中使用'byte [memory/register]'访问,同样用于访问一个字使用'word'。
mov si,0 mov ax,0xFF0F mov [ds:si],ax mov al,byte [ds:si]
这将访问存在于[ds:si+0]上的'byte',因为它是以'little endian'格式的。

相关问题