- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在做一个学校项目,编写一个程序来检测汇编指令中的先写后读数据依赖性。我有一个包含说明的列表列表。
一个这样的例子是一个列表,例如
line1 = [[ld a8,0x8910] [mul a3,a2,8] [shl a3,a3,4] [add a3,a3,a8]]
这里最后的加法指令取决于左移 (shl) 的结果,而左移又取决于 mul 指令的结果。
我希望我的代码将依赖输出为 {mul -> sh -> add}
另一个例子:line2 = [ [add a3,a2,a1] [sub a4,a5,a6] [add a9,a2,a4]]输出:{add -> add} {sub -> add}
我想删除指令操作码以获得 line1 = [[a8,0x8910] [a3,a2,8 ] [a3,a3,4] [a3,a3,a8]]然后将目标操作数提取到 dst_list = [a8, a3, a3, a3} 并将源操作数提取到另一个列表中,如 src_list = [ 0x8910, [a2, 8], [a3,4], [a3,a8] ]。我正在考虑从 src_list 中获取第 n 个项目,并在它们匹配时与 dst_list 的 0 到 n-1 个项目和输出索引进行比较。最后使用一些字典输出与我的索引对应的指令。我的方法正确吗?任何人都可以帮助我如何在 python 中实现这一点吗?
到目前为止我已经尝试过:
dest = re.findall( r'\[(?=([a-z0-9.]+))',str(line))
src = re.findall( r'\,(?=([a-z0-9]+))', str(line))
for i in dest:
dst_list.append([i])
for j in src:
src_list.append(j)
#psuedo code to find hazards
for nth src_item in src_list:
for 0 to n-1 dst_items in dst_list:
if src_list[src_item] == dst_list[dst_item]
OUTPUT dst_item -> src_item
上面的 re.findall 给了我一个包含所有目标操作数的列表和另一个包含源操作数的列表(我需要一个列表列表,每个指令的 2 个 src 参数在一个列表中)。
我如何实现这一点?
最佳答案
因此,让我们首先假设您的汇编指令具有一致的格式,并且它们在字符串列表中,否则无论如何您都必须进行大量预处理,并且应该处理操作码和指令解析那么。
[op_code dest,src1,src2,...,srcn]
例如:
line1 = ["ld a8,0x8910","mul a3,a2,8","shl a3,a3,4","add a3,a3,a8"]
有了它,我们可以做一些 python 魔术,甚至不用担心正则表达式。
def instruction_reader(op_string):
opcode,values = op_string.split(" ")
values_list = values.split(',')
dest = values_list[0]
src = values_list[1:]
return (opcode,dest,src)
有了它,您现在可以通过一些列表迭代器将数据放入正确的桶中
list_of_all = [instruction_reader(item) for item in line1]
opcodes = [op[0] for op in list_of_all]
dests = [dest[1] for dest in list_of_all]
srcs = [src[2] for src in list_of_all]
现在您只需要比较 srcs 和 dests 来找到依赖关系。
dep_list = []
for i,dest in enumerate(dests):
for src in srcs:
if dest in src:
dep_list.append(opcodes[i])
这可以简化为列表理解
dep_list = [opcodes[i] for i,dest in enumerate(dests) for src in srcs if dest in src]
旁白:是的,在 python 中有很多更漂亮的方法可以做到这一点,但我认为在这种情况下,更容易阅读/解析的东西会更好。
关于Python:检测数据危害的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25537826/
我有 powershell 脚本。通过调度程序,我运行 bat 文件,该文件运行 PS1 文件。 BAT文件 Powershell.exe -executionpolicy remotesigned
什么更快? 或者 $.getScript('../js/SOME.js', function (){ ... // with $.ajaxSetup({ cache: true });
需要bash脚本来显示文件 #!/bin/bash my_ls() { # save current directory then cd to "$1" pushd "$1" >/dev/nu
我有一个输入 csv 文件,实际上我需要在输入文件中选择第 2 列和第 3 列值,并且需要转换两个值的时区(从 PT 到 CT),转换后我需要替换转换后的时区值到文件。 注意: 所有输入日期值都在太平
我正在使用/etc/init.d/httpd 作为 init.d 脚本的模板。我了解文件中发生的所有内容,但以下行除外: LANG=$HTTPD_LANG daemon --pidfile=${pid
我有以下选择: python runscript.py -O start -a "-a "\"-o \\\"-f/dev/sda1 -b256k -Q8\\\" -l test -p maim\""
我对 shell 脚本完全陌生,但我需要编写一个 shell 脚本来检查文件是否存在,然后移动到另一个位置 这是我写的: 一旦设备崩溃,我就会在/storage/sdcard1/1 中收集日志 #!/
我正在使用 bash 脚本从文本文件中读取数据。 数据: 04:31 Alex M.O.R.P.H. & Natalie Gioia - My Heaven http://goo.gl/rMOa2q
这是单击按钮时运行的 javascript 的结尾 xmlObj.open ('GET', /ajax.php, true); xmlObj.send (''); } 所以这会执行根目录中的php脚本
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我需要将文件转换为可读流以通过 api 上传,有一个使用 fs.createReadStream 的 Node js 示例。任何人都可以告诉我上述声明的 python 等价物是什么? 例子 const
我有一个 shell 脚本 cron,它从同一目录调用 python 脚本,但是当这个 cron 执行时,我没有从我的 python 脚本中获得预期的输出,当我手动执行它时,我的 python 脚本的
如何使 XMLHttpRequest (ajax) 调用的 php 脚本安全。 我的意思是,不让 PHP 文件通过直接 url 运行,只能通过脚本从我的页面调用(我不想向未登录的用户显示数据库结果,并
我正在尝试添加以下内容 我正在使用经典的 asp。但我不断收到的错误是“一个脚本 block 不能放在另一个脚本 block 内。”我尝试了此处的 document.write 技术:Javasc
如何从另一个 PHP 脚本(如批处理文件)中运行多个 PHP 脚本?如果我了解 include 在做什么,我认为 include 不会起作用;因为我正在运行的每个文件都会重新声明一些相同的函数等。我想
我想创建具有动态内容的网页。我有一个 HTML 页面,我想从中调用一个 lua 脚本 如何调用 lua 脚本? ? ? 从中检索数据?我可以做类似的事情吗: int xx = 0; xx
我删除了我的第一个问题,并重新编写了更多细节和附加 jSfiddle domos。 我有一个脚本,它运行查询并返回数据,然后填充表。表中的行自动循环滚动。所有这些工作正常,并通过使用以下代码完成。然而
我尝试使用 amp 脚本,但收到此错误: “[amp-script] 脚本哈希未找到。amp-script[script="hello-world"].js 必须在元[name="amp-script
我有一个读取输入的 Shell 脚本 #!/bin/bash echo "Type the year that you want to check (4 digits), followed by [E
我正在从 nodejs 调用 Lua 脚本。我想传递一个数组作为参数。我在 Lua 中解析该数组时遇到问题。 下面是一个例子: var script = 'local actorlist = ARGV
我是一名优秀的程序员,十分优秀!