机器指令

1.8k 词

题目描述

“让我看看…下一个语句是$C64410…翻译成二进制代码是110001100100010000010000…分段后是110-00-110-1100100010000010000…第一段的110对应的汇编指令是mov…接下来的00表示的是寄存器ax…第三段的110表示的是间接寻址…然后1100100010000010000是内存地址…Finallyyyyyy…对应的汇编语句是mov([1044],ax)–将内存地址为1044的内存中的数据存入ax.” 

丁丁同学正为下午的Understanding The Machine 作业中一道将十六进制机器码翻译成汇编语言的题忙得焦头烂额。这种对着一个译码表“进行符号转化”的活,向来是丁丁同学最不能容忍的 – 宝贵的时间就在这样的一道”民工题”上一秒一秒地流逝…唉… 

丁丁希望你能编写一个程序来帮帮他。当然,他不会那么残忍地让你去编写一个编译器完成整套工作。他只希望你帮他完成一个小小的模块–将十六进制数转化为二进制数。你可以帮助他么?

输入

多组输入,样例数最大为100。 
每组输入是一个由”0123456789ABCDEF”十六种字符组成的一个序列。序列的长度N的满足: 0 <= N <= 10,000。每个序列以换行符结束。

输出

这个序列对应的二进制数。输出每个序列后换行。 

样例输入

1
2
C6
88D7

样例输出

1
2
11000110
1000100011010111

题解

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.io.BufferedInputStream;
import java.util.Scanner;

public class Main {
static Scanner sc = new Scanner(new BufferedInputStream(System.in));
public static void main(String[] args) {
while (sc.hasNextLine()) {
String str = sc.nextLine();
func(str);
}
}

private static void func(String str) {
for (char i : str.toCharArray()) {
int temp = Integer.parseInt(i + "", 16);
System.out.printf("%d%d%d%d", temp >> 3 & 1, temp >> 2 & 1, temp >> 1 & 1, temp & 1);
}
System.out.println();
}
}

Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def solve(s):
t = ""
D = {
'0': '0000',
'1': '0001',
'2': '0010',
'3': '0011',
'4': '0100',
'5': '0101',
'6': '0110',
'7': '0111',
'8': '1000',
'9': '1001',
'A': '1010',
'B': '1011',
'C': '1100',
'D': '1101',
'E': '1110',
'F': '1111',
}
for char in s:
if char not in D:
continue
t += D[char]
return t
while True:
print(solve(input()))