file - 从文件重定向输入时,yasm多个任意输入不起作用
问题描述
我是一名学生,我在组装方面有点挣扎。
我必须制作一个基本的计算器,它可以接受 2 个 64 位任意整数作为输入和一个 8 位字符。
从这些输入中,我需要使用 char 来确定应该进行什么操作。加法、乘法、减法或除法。
大学使用一个程序来测试我们的程序,该程序通过重定向来自预定文件的输入来运行我们的程序;将我们的输出与预期输出进行比较。我们没有从这个程序中得到任何反馈,只是一个标记。
我的代码在控制台中实现时有效,但在像他们的程序那样从文件重定向输入时无效。
这是我的代码的“错误部分”:
_start:
mov rax, 1 ;Write
mov rdi, 1 ;Std out
mov rsi, request1 ;Address of message. Asks for first input
mov rdx, 24 ;Length of message
syscall ;Calls kernel
mov rax, 0 ;Read
mov rdi, 0 ;Std in
mov rsi, input1 ;Address of variable. Largest 64-bit int is 19
mov rdx, 20 ;Max length of input. digits long + newline
syscall ;Calls kernel
mov rax, 1 ; Another Write. Asks for operand
mov rdi, 1
mov rsi, input1
mov rdx, 20
syscall
mov rax, 0 ;Another Read. Gets operand + newline
mov rdi, 0
mov rsi, operand
mov rdx, 2
syscall
mov rax, 1 ;Another Write., Asks for second input
mov rdi, 1
mov rsi, request3
mov rdx, 25
syscall
mov rax, 0 ;Another Read. Caters for a 64-bit number
mov rdi, 0
mov rsi, input2
mov rdx, 20
syscall
例如,假设我的输入文件具有以下内容:
10000000000
+
101010101
我使用以下命令重定向程序的输入:
./program < inputfile
然后我的程序将数据读取到变量中,如下所示:
Input1 : 10000000000\n+\n101010
operand: 10
Input2 : 1
如何让程序停止读取换行符?或者我该如何解决这个问题?
我尝试逐位读取输入数字,但在卡住之前我并没有得到很大的变化。
解决方案
运行strace ./myprogram
。如果该文件描述符上有更多可用数据,则read()
系统调用不会以换行符结束,当您重定向时就是这种情况。
以交互方式按下返回“提交”该行并可以read()
提前返回(在读取20
作为大小传递的完整字节之前)。
因此,您当前的程序取决于 POSIX TTY 行为。
修复:解析字符串而不是依赖于单独的写入。您可以查找'\n'
分隔输入行的字符。
推荐阅读
- github - 如何列出授予特定应用程序的范围
- amazon-web-services - 自定义 VPC 子网的 RDS 问题
- python - 如何在 Tkinter 中显示当前窗口?
- python - 导入 pytorch microsoft visual C++ Redistributable 时未安装
- react-native - 我无法在我的 react native 项目中安装 NPM 包
- javascript - 如何添加反应表默认过滤器
- c# - 尝试将变量分配给 Rigidbody2D 时出错
- android - Google Ads - 应用下载活动 - 添加带有 UTM 参数的 google play store url
- node.js - Ubuntu EC2 端口开放问题
- c - 使用EOF和getchar()计算字符数