mirror of
https://github.com/samsonjs/compiler.git
synced 2026-04-27 14:57:45 +00:00
fix a bug encoding MOV [r/m byte] [immediate byte]
This commit is contained in:
parent
7fbee3ae4f
commit
767e97d1c4
1 changed files with 14 additions and 11 deletions
|
|
@ -544,9 +544,9 @@ module Assembler
|
||||||
# 3a. mov r/m32, reg32
|
# 3a. mov r/m32, reg32
|
||||||
# 3b. mov memoffset32, eax
|
# 3b. mov memoffset32, eax
|
||||||
# 4. mov r/m32, immediate32
|
# 4. mov r/m32, immediate32
|
||||||
# 5. mov r/m8, reg8
|
# 5. mov r/m8, imm8
|
||||||
# 6. mov reg8, r/m8
|
# 6. mov reg8, r/m8
|
||||||
# 7. mov r/m8, imm8
|
# 7. mov r/m8, reg8
|
||||||
def mov(dest, src)
|
def mov(dest, src)
|
||||||
|
|
||||||
# These 2 are used in the same way, just the name differs to make the
|
# These 2 are used in the same way, just the name differs to make the
|
||||||
|
|
@ -592,21 +592,24 @@ module Assembler
|
||||||
modrm = [dest, 0]
|
modrm = [dest, 0]
|
||||||
immediate = src
|
immediate = src
|
||||||
|
|
||||||
# version 5: mov r/m8, r8
|
# version 5: mov r/m8, imm8
|
||||||
elsif rm?(dest, :byte) && register?(src, :byte)
|
#
|
||||||
opcode = 0x88
|
# It's important that this check is first because src integers can
|
||||||
modrm = [dest, src.regnum]
|
# pass the register? check in version 7.
|
||||||
|
elsif rm?(dest, :byte) && immediate?(src, :byte)
|
||||||
|
opcode = 0xc6
|
||||||
|
modrm = [dest, 0]
|
||||||
|
immediate_byte = src
|
||||||
|
|
||||||
# version 6: mov r8, r/m8
|
# version 6: mov r8, r/m8
|
||||||
elsif register?(dest, :byte) && rm?(src, :byte)
|
elsif register?(dest, :byte) && rm?(src, :byte)
|
||||||
opcode = 0x8a
|
opcode = 0x8a
|
||||||
modrm = [src, dest.regnum]
|
modrm = [src, dest.regnum]
|
||||||
|
|
||||||
# version 7: mov r/m8, imm8
|
# version 7: mov r/m8, r8
|
||||||
elsif rm?(dest, :byte) && immediate?(src, :byte)
|
elsif rm?(dest, :byte) && register?(src, :byte)
|
||||||
opcode = 0xc6
|
opcode = 0x88
|
||||||
modrm = [dest, 0]
|
modrm = [dest, src.regnum]
|
||||||
immediate_byte = src
|
|
||||||
|
|
||||||
else
|
else
|
||||||
# puts "rm?(dest): #{rm?(dest)}\t\trm?(src): #{rm?(src)}"
|
# puts "rm?(dest): #{rm?(dest)}\t\trm?(src): #{rm?(src)}"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue