【问题标题】:Assembler- reading bits汇编器读取位
【发布时间】:2013-06-10 08:19:03
【问题描述】:

任何人都可以帮助我在汇编中从用户那里读取 96 位吗? 现在我正在阅读这样的数字:

mov $12, %edx
mov $variable1, %ecx
mov $STDIN, %ebx
mov $SYSREAD, %eax
int $0x80

谁能帮我重铸这段代码,这样我就可以读取位而不是字节了? 我必须添加 2 个 96 位的数字——也许我读对了,但后来用错了?

【问题讨论】:

  • 您还没有说明用户应该以哪种格式输入数字(十进制、十六进制、二进制、base64,...)。
  • 教授只说我要读比特串

标签: assembly stdin bit


【解决方案1】:

96/16 = 6 个字或 3 个双字

你可以把它推到堆栈上,然后通过一个 pop 来加载每个块(16 位或 32 位),比如 eax

然后在循环中使用 shl

 mov cx,32  ;The 32 bit loop

 .printbinary
 shl eax,1      ;shove eax one bit to the left
 jnc azero      ;jump if no carry flag
 PRINT A ONE    
 loop printbinary
 .azero
 PRINT A ZERO
 loop printbinary

有点意思

(无论您尝试做什么,进位标志都会读取各个位,而 shr/shl 会将寄存器移动 1 位)

屏幕转储等只会给你十六进制代码

所以在屏幕上打印出二进制的行(每行 96 次???) 然后在您的特定语言风格中对大数使用 ADD 然后打印出下面的 96 位答案...lol

(我什至不知道是否可以将 96 位输入一行,别忘了,在打印整个字符串之前没有回车或换行)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多