美文网首页
汇编学习(2),数据表示与寄存器

汇编学习(2),数据表示与寄存器

作者: android小奉先 | 来源:发表于2022-11-26 13:23 被阅读0次

本篇介绍

本篇介绍下数据在计算机中的表示形式以及常用的寄存器, 最后再学一个稍微复杂点的代码。

内容介绍

补码

对于有符号整数类型,负数是以补码(complement)形式保存的,这样可以方便做运算,补码就是绝对数的各个bit位取反然后加1,举个例子如下:

有符号整数 17
二进制形式: 0000 0000 0001 0001
十六进制:  0x0011

有符号整数 -17
绝对值 17
二进制形式: 0000 0000 0001 0001
补码形式: 1111 1111 1110 1110
加1: 1111 1111 1110 1111
十六进制: 0xffef

再计算下 17 + (-17)
二进制:
    0000 0000 0001 0001
+  1111  1111  1110 1111

=  0000 0000 0000 0000
十六进制: 0x0000

这样就简单很多了,减法也可以使用加法的规则

寄存器

通用寄存器如下:


image.png

指令寄存器(rip) 用来存放即将执行的下一条指令地址。
标记寄存器(rlags),个别字段介绍如下:


image.png

打印字符串

在编辑器中写入如下的代码:

    ; hello.asm
    section .data
    msg1 db "hello, world",10, 0
    msg1Len equ $-msg1-1 ; $ 表示取当前地址
    msg2 db "Alive and Kicking!", 10,0
    msg2Len equ $-msg2-1
    radius dq 357
    pi dq 3.14
    section .bss
    section .text
    global main
main:
    push rbp        ; prologue
    mov rbp, rsp
    mov rax,1
    mov rdi,1
    mov rsi, msg1
    mov rdx,msg1Len
    syscall
    mov rax, 1
    mov rdi,1
    mov rsi, msg2
    mov rdx, msg2Len
    syscall
    mov rsp, rbp        ; epilogue
    pop rbp
    mov rax,60
    mov rdi,0
    syscall

编译后用gdb 加载并执行disassemble main,这时候会发现汇编是att格式的,如下:

image.png
而我们写的汇编是intel风格的,这时候可以设置下flavor,set disassembly-flavor intel, 再反汇编看下,就会看到格式变成intel了:
image.png

这时候再简单提下prologue和epilogue对于gdb的作用,如果没有他们,那么gdb就不能单步调试了。

相关文章

  • 汇编学习(2),数据表示与寄存器

    本篇介绍 本篇介绍下数据在计算机中的表示形式以及常用的寄存器, 最后再学一个稍微复杂点的代码。 内容介绍 补码 对...

  • 有关汇编相关参考博客

    汇编之常识(一)汇编基础 CPU等硬件结构 数据总线 地址总线 控制总线 汇编之寄存器(二)寄存器 数据地址寄存器...

  • 汇编基础

    汇编指令速查 汇编中各寄存器的作用4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和E...

  • 汇编简介

    学习汇编两大知识点:1.汇编指令2.寄存器 64bit:RAX \RBX\RCX\RDX :通用寄存器32bit:...

  • IOS arm64常用的汇编

    导论 生成汇编文件 寄存器 arm64 汇编条件域 arm64 汇编指令 总结 1. 生成汇编文件 2. 寄存器 ...

  • 认识ARM64汇编

    [TOC] 之前说过学习汇编就是学习寄存器和指令,查看代码请连接真机。 寄存器 在arm64汇编中寄存器是64bi...

  • C语言汇编基础

    学习汇编之前,除了要掌握常用的汇编指令之外,还需要掌握CPU寄存器(CPU用来存储数据的地方),内存,32位CPU...

  • 【8086汇编】-- 常用寄存器

    学习汇编最重要的是就是学习寄存器和指令,8086汇编拥有14个16位的寄存器,分别AX、BX、CX、DX、SI、D...

  • 00-汇编语言

    程序的本质 寄存器与内存 编程语言的发展 汇编语言的种类 常见的汇编指令 寄存器 有16个常用寄存器rax、rbx...

  • 2018-07-11

    汇编的学习 cpu工作的原理cpu由总线调用位置寄存器中存储的内存的位置,并读取内存,识别内存中的代码与数据,执行...

网友评论

      本文标题:汇编学习(2),数据表示与寄存器

      本文链接:https://www.haomeiwen.com/subject/jspffdtx.html