(前置知识)简单介绍下Y86指令集的理解

在深入理解计算机系统这本书中,根据x86架构简化后给了一个Y86架构,其中第一个就是关于指令集的解释

先给出一张图

  • halt指令表示停止指令的执行
  • nop指令占位符,控制时序的目的,强制内存对齐,防止流水线灾难
  • rrmovq表示寄存器到寄存器的传送指令,下面几个指令同理,ir表示立即数到寄存器,rm表示寄存器到内存,mr表示内存到寄存器
  • Opq指令是整数操作指令的统称,包含addq(加)、subq(减)、andq(与)和xorq(异或)
  • jXX表示7个跳转指令,分别是jmp(直接跳转)、jle(小于或等于)、jl(小于)、je(相等/零)、jne(不相等\非零)、jge(大于或等于)和jg(大于)
  • cmovXX表示6个条件跳转指令cmovle、cmovl、comve、comvne、comvge和comvg,后缀跟上面跳转指令相同
  • call指令将返回地址入栈,然后跳转到目的地址
  • pushq和popq指令实现了入栈和出栈

再来一张详细的指令码

可以看到,整数操作指令的四个指令的fn分别为0~3

寄存器序号

example:

30f3fcffffffffffffff40630008000000000000

上面是一串机器码,我们可以看到开头为30,查上面的表可以看到是irmovq操作,f3对应后面的两位,f为无寄存器,3代表%rbx寄存器,后面的fcffffffffffffff代表是立即数,本文采用小端法,低字节放在低字节,我们按照阅读习惯翻过来,称为fffffffffffffffc,就可以换算成十进制-4

所以前面的30f3fcffffffffffffff就可以转为irmovq $-4, %rbx汇编代码

再来看后面的406300080000000000,40根据前面表可以看出为rmmovq操作,63代表%rsi和%rbx,00080000000000表示地址,翻转为00000000008000

最后00表示halt指令

最终整个机器码可以解析为

irmovq $-4, %rbx
rmmovq %rsi, 0x8000(%rbx)
halt

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
Theme Argon
本网站自 2020-12-24 12:00:00 起已运行