Questions tagged «assembly»

这一挑战与汇编语言有关。请注意,通常不建议要求答案使用特定语言的挑战。

5
8位虚拟机
背景 我喜欢旧的8位6502芯片。在6502机器代码中解决PPCG方面的一些挑战甚至很有趣。但是,一些应该很简单的事情(例如,读入数据或输出到stdout)在机器代码中不必要地麻烦。因此,我想到一个粗略的想法:发明我自己的8位虚拟机,该虚拟机受6502的启发,但修改后的设计使其更能应对挑战。开始实施某些东西时,我意识到如果将VM的设计减少到最低限度,这本身就是一个不错的挑战:) 任务 实现符合以下规范的8位虚拟机。这是code-golf,因此以最少的字节数实现。 输入值 您的实现应采用以下输入: 一个无符号字节pc,它是初始程序计数器(0基于VM的内存开始执行的内存中的地址) 具有最大256条目长度的字节列表,这是虚拟机的RAM(及其初始内容) 您可以采用任何合理的格式输入此信息。 输出量 字节列表,这是VM终止后RAM的最终内容(请参阅下文)。您可以假设您只得到导致最终终止的输入。允许使用任何明智的格式。 虚拟CPU 虚拟CPU具有 一个8位程序计数器 一个8位累加器寄存器称为A和 一个称为的8位索引寄存器X。 有三个状态标志: Z -在执行某些操作后置零标志 0 N -在某些操作导致负数之后设置负标志(现在将结果的第7位设置为1) C -进位标志由加法设置,并移位结果的“缺失”位 在开始的标志被全部清零,程序计数器设置为给定值和内容A,并X是不确定的。 8位值代表 范围内的无符号整数[0..255] 有符号整数(2的补码),范围为[-128..127] 取决于上下文。如果某个操作上溢或下溢,则该值会回绕(如果加法,进位标志也会受到影响)。 终止 虚拟机在以下时间终止 一HLT到达指令 访问了不存在的内存地址 程序计数器在内存外部运行(请注意,即使VM被提供了完整的256字节内存,它也不会回绕) 地址模式 隐式 -指令没有参数,隐含操作数 立即数-操作数是指令之后的字节 相对 -(仅用于分支)指令后的字节被签名(2的补码),并确定执行分支后要添加到程序计数器的偏移量。0是以下指令的位置 绝对 -指令后的字节是操作数的地址 索引 -指令加号X(寄存器)之后的字节是操作数的地址 使用说明 每条指令都由一个操作码(一个字节)组成,在寻址模式下是即时,相对,绝对和索引第二个参数字节。当虚拟CPU执行一条指令时,它会相应地(由1或2)递增程序计数器。 此处显示的所有操作码均为十六进制。 LDA -将操作数加载到 A …

30
聪明人的海市age楼
从前,我在阅读有关Quora的问题/答案 真的有没有计算机科学学位的程序员无法通过FizzBu​​zz测试 此代码是显而易见的答案 for i in range(1, 100): if i % 3 == 0 and i % 5 == 0: print "FizzBuzz" elif i % 3 == 0: print "Fizz" elif i % 5 == 0: print "Buzz" else: print i 当然,FizzBu​​zz已经被打死了,但这并不是这个问题的实质。您会在评论中看到有人提到该答案很不错,因为很容易添加额外条件,例如将“ Jazz”打印为4的倍数。(我不同意。扩展此方案需要O(2 ** n )代码行。) 您的挑战是编写由同行判断的最漂亮的FizzJazzBuzz版本。 选民需要考虑的一些事项: 干 除法/模运算的效率 …
29 popularity-contest  code-challenge  word  popularity-contest  string  grid  language-design  code-golf  source-layout  math  fastest-algorithm  assembly  code-golf  json  code-golf  arithmetic  array-manipulation  code-golf  ascii-art  code-golf  crossword  code-golf  string  restricted-complexity  code-golf  ascii-art  kolmogorov-complexity  code-golf  string  decision-problem  balanced-string  syntax  code-golf  grid  puzzle-solver  hexagonal-grid  code-golf  math  number  sequence  code-golf  string  decision-problem  code-golf  cryptography  king-of-the-hill  code-challenge  fastest-code  code-golf  number  code-golf  code-golf  string  code-golf  cryptography  king-of-the-hill  java  code-golf  number-theory  base-conversion  code-golf  code-golf  array-manipulation  code-golf  array-manipulation  sorting  code-challenge  restricted-source  quine  code-golf  tips  python  king-of-the-hill  code-golf  source-layout  fractal  code-golf  tips  game  king-of-the-hill  path-finding  grid  code-golf  kolmogorov-complexity  natural-language  code-golf  tips  python  code-golf  number  arithmetic  sequence  array-manipulation  code-golf  number  combinatorics  random  integer-partitions  code-golf  string  code-golf  vim  comment  code-golf  combinatorics  counting  code-challenge  rosetta-stone  code-golf  combinatorics  sequence  subsequence  code-golf  code-challenge  restricted-source  primes  printable-ascii  popularity-contest  graphical-output  image-processing 


18
旋转对称数
给定一个整数,如果它是相同的上下颠倒(旋转180°),则输出真实值,否则输出虚假值。 0,1并且8具有旋转对称性。6成为9,反之亦然。 产生真实结果的数字序列:OEIS A000787 0, 1, 8, 11, 69, 88, 96, 101, 111, 181, 609, 619, 689, 808, 818, 888, 906, 916, 986, 1001, 1111, 1691, 1881, 1961, 6009, 6119, 6699, 6889, 6969, 8008, 8118, 8698, 8888, 8968, 9006, 9116, 9696, 9886, 9966, 10001, 10101, 10801, 11011, 11111, 11811, 16091, …
27 code-golf  number  sequence  decision-problem  code-golf  string  parsing  c  code-golf  sorting  integer  code-golf  number  sequence  rational-numbers  graphical-output  atomic-code-golf  assembly  box-256  code-golf  geometry  tips  python  code-golf  number  sequence  arithmetic  number-theory  code-golf  ascii-art  kolmogorov-complexity  geometry  code-golf  graphical-output  code-golf  math  code-golf  grid  cellular-automata  game-of-life  code-golf  string  subsequence  code-golf  arithmetic  rational-numbers  code-golf  tips  dc  code-golf  ascii-art  kolmogorov-complexity  date  code-golf  string  primes  code-golf  string  natural-language  conversion  code-golf  sequence  code-golf  number-theory  primes  base-conversion  code-golf  math  primes  base-conversion  code-golf  ascii-art  fractal  code-golf  matrix  code-golf  math  tips  geometry  python  string  code-challenge  keyboard  code-golf  graphical-output  code-golf  string  code-golf  number  sequence  cops-and-robbers  number  sequence  cops-and-robbers 

14
纳米核心战争
这是对《核心战争》的改编,《核心战争》可追溯到20世纪。更具体地说,它使用的是一种非常简化的指令集,主要是基于原始提案。 背景 在《核心战争》中,有两个程序争夺对计算机的控制权。每个程序的目标是通过定位和终止相反的程序来取胜。 战斗发生在计算机的主内存中。该内存称为核心,它包含8192个地址。当战斗开始时,每个竞争对手(称为战士)的代码都会放在随机的内存块中。程序执行在战士之间交替,每个战士执行一条指令。每条指令都可以修改Core的一部分,从而有可能自行修改程序。 目的是终止相反的程序。程序在尝试执行无效指令(即任何DAT指令)时会终止。 指令集 每个程序由一系列低级指令组成,每个指令都有两个字段,称为A和B字段。 该指令集极大地借鉴了原始规范。主要的更改是1)澄清了添加/减去命令的问题,以及2)更改了#寻址模式以使其可以在任何地方使用。Core Wars的大多数完整版本都有20多个操作码,8种寻址模式和一组“指令修饰符”。 操作码 每个指令必须具有七个不同的操作码之一。 DAT A B-(数据)-仅保存数字A和B。重要的是,进程在尝试执行DAT指令时会死掉。 MOV A B-(移动)-将存储位置的内容移动A到存储位置B。这是前后的演示: MOV 2 1 ADD @4 #5 JMP #1 -1 MOV 2 1 JMP #1 -1 JMP #1 -1 ADD A B-(添加)-将存储位置的内容添加A到存储位置B。两者的前两个​​字段被添加,第二个字段被添加。 ADD 2 1 MOV @4 #5 JMP #1 -1 ADD 2 1 …

1
Bootloader高尔夫:Brainf ***
创建一个执行给定Brainfuck程序的引导程序。这是code-golf,因此具有最少字节数的程序将获胜。作为引导加载程序,程序的大小在已编译的代码中以非零字节计。 脑干 30000个8位溢出单元。指针结束。 有关操作的一些注意事项: 必须以正确支持所有可打印ASCII字符的方式读取输入。其他击键可能会插入一个任意字符,或者什么也不做。 读取用户输入必须使用字符缓冲,而不是行缓冲。 读取用户输入必须回显插入的字符。 输出必须遵循代码页437或内置的VGA适配器默认代码页。 引导程序 这是一个x86引导程序。引导加载程序以传统55 AA顺序结束。您的代码必须在VirtualBox,Qemu或其他知名的x86模拟器上运行。 磁碟 可执行的Brainfuck位于第二个磁盘扇区,紧随您的引导加载程序之后,该引导加载程序通常位于MBR部分中的磁盘的第一个扇区中。附加代码(超过510字节的任何代码)可以位于其他磁盘扇区。您的存储设备必须是硬盘驱动器或软盘。 STDIO 当然,引导加载程序无法访问操作系统的IO功能。因此,BIOS功能代替了打印文本和读取用户输入的功能。 模板 首先,这是一个用Nasm(intel语法)程序集编写的简单模板: [BITS 16] [ORG 0x7c00] ; first sector: boot: ; initialize segment registers xor ax, ax mov ds, ax mov es, ax mov ss, ax ; initialize stack mov sp, 0x7bfe ; load brainfuck …

11
汇编语言奎因
写出尽可能短的汇编语言quine。 除非有print-quine说明或等效说明,否则请使用所需的任何ISA 。示例包括x86,MIPS,SPARC,MMIX,IBM BAL,MIX,VAX,JVM,ARM等。 您可以针对_printfI / O 链接到C标准库的功能(或Java等效于JVM字节码的功能)。 长度将根据指令数和数据段的大小进行判断。解决方案必须至少包含两个说明。 奎纳应该打印出汇编代码,而不是印刷的机器代码。

5
是否有更多的硬物或软物
与假设分析书的开头相切。 输入是一个由空格组成的矩形,如字符串,字符串列表等,其对象由#内部组成: ######## # # ######## ### #### ### #### ### 对象将始终是非相交,非接触的矩形。软对象的定义是#中间没有用填充的对象,而只是边界,而硬对象则是填充的对象。具有宽度或高度的对象<=2被认为是坚硬的。所有对象都是硬的或软的。 如果输入,输出中有更多的硬对象"Hard",如果较软,则输出"Soft",如果相等则输出"Equal"。 这是代码高尔夫球,因此以字节为单位的最短代码胜出! 测试用例 这些情况不是全部输入,而是每个对象应表征的内容。实际输入将类似于问题顶部的ascii艺术。 硬 # #### ## ## ########## ########## ########## 柔软的 ### # # ### ################### # # # # # # ################### #### # # # # # # # # # # # # …
19 code-golf  ascii-art  counting  code-golf  number  grid  decision-problem  chess  code-golf  grid  graph-theory  chess  code-golf  math  geometry  code-golf  arithmetic  roman-numerals  fastest-code  code-golf  math  geometry  code-golf  string  cryptography  code-golf  number  sequence  decision-problem  code-golf  string  parsing  c  code-golf  sorting  integer  code-golf  number  sequence  rational-numbers  graphical-output  atomic-code-golf  assembly  box-256  code-golf  geometry  tips  python  code-golf  number  sequence  arithmetic  number-theory  code-golf  ascii-art  kolmogorov-complexity  geometry  code-golf  graphical-output  code-golf  math  code-golf  grid  cellular-automata  game-of-life  code-golf  string  subsequence  code-golf  arithmetic  rational-numbers  code-golf  tips  dc  code-golf  ascii-art  kolmogorov-complexity  date  code-golf  string  primes  code-golf  string  natural-language  conversion  code-golf  sequence  code-golf  number-theory  primes  base-conversion  code-golf  math  primes  base-conversion  code-golf  ascii-art  fractal  code-golf  matrix  code-golf  math  tips  geometry  python  string  code-challenge  keyboard  code-golf  graphical-output  code-golf  string  code-golf  number  sequence  cops-and-robbers  number  sequence  cops-and-robbers 

1
如何减少使用FASM编译的x86 ASM的EXE大小?
作为练习,我使用x86汇编语言创建了一个简单的解决方案来应对这一挑战。我正在Windows上使用FASM运行它。这是我的源代码: format PE console entry start include 'WIN32A.inc' section '.text' code executable start: push char ; Start at 'A' call [printf] ; Print the current letter 4 times call [printf] call [printf] call [printf] inc [char] ; Increment the letter cmp [char], 'Z' ; Compare to 'Z' jle start ; …

13
斐波那契产品
您可以将大于0的数字分解为正Fibonacci数字的唯一和。在这个问题中,我们通过重复减去最大可能的正斐波那契数来做到这一点。例如: 1 = 1 2 = 2 3 = 3 4 = 3 + 1 12 = 8 + 3 + 1 13 = 13 100 = 89 + 8 + 3 现在,我将斐波那契乘积称为与上面相同的列表,但加法运算被乘积代替。例如,f(100) = 89 * 8 * 3 = 2136。 编写一个给定正整数n的程序或函数,该函数将返回该数字的斐波那契乘积。 测试用例: 1: 1 2: 2 3: 3 4: …
13 code-golf  math  sequence  fibonacci  code-golf  word  code-golf  cipher  code-golf  string  math  subsequence  code-golf  regular-expression  code-golf  brainfuck  assembly  machine-code  x86-family  code-golf  math  factorial  code-golf  math  geometry  code-golf  math  arithmetic  array-manipulation  math  number  optimization  stack  metagolf  code-golf  tips  assembly  code-golf  tips  lisp  code-golf  number-theory  path-finding  code-golf  number  sequence  generation  code-golf  math  geometry  code-golf  grid  permutations  code-golf  code-golf  graphical-output  geometry  fractal  knot-theory  code-golf  math  arithmetic  code-golf  interpreter  balanced-string  stack  brain-flak  code-golf  math  set-theory  code-golf  math  array-manipulation  code-golf  code-golf  string  natural-language  code-golf  code-golf  math  linear-algebra  matrix  code-golf  string  encode 

2
在x86程序集中计算数量级的最快方法
任务很简单:编写汇编程序,使用尽可能少的时钟周期来计算整数的数量级。 数量级定义为log10,不是log2。 有效输入的范围是0到(包括)。未定义超出该范围的输入行为。1012 值应四舍五入为最接近的整数,但给定输入0的输出应为0。(您可以认为这是无符号整数中负无穷大的最佳表示形式)。 必须是x86汇编。 该整数必须是运行时值,而不是静态/内联整数。因此,我们在编译时不知道它是什么。 假设您已经将一个整数加载到寄存器中。(但为了清楚起见,请在答案中包括在寄存器中设置值)。 无法调用任何外部库或函数。 免费使用英特尔文档中的任何可用说明。 没有C 可接受〜7种Intel Core架构中的任何一种(在第10页上列出)。理想情况下为Nehalem(Intel Core i7)。 胜出的答案是使用尽可能少的时钟周期的答案。也就是说,它每秒可以进行最多的操作。大概的时钟周期摘要在这里:http : //www.agner.org/optimize/instruction_tables.pdf。发布答案后,可能会计算时钟周期。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.