计算机系统-汇编基础

一.寄存器&数据传送mov指令

1.80386通用寄存器
        16位:AX,BX,CX,DX;SI,DI;SP,BP;
        8位:AH,AL;BH,BL;CH,CL;DH,DL
        32位:EAX,EBX,ECX,EDX;ESI,EDI;ESP,EBP
        段寄存器:DS,ES,SS等
2.AT&T汇编代码
        格式:指令 源操作数,目的操作数        (源操作数与目的操作数顺序与intel相反)
                   movl $8,%eax
3.示例代码

.section .data

.section.text

.global _start
_start:
    nop
    movl $4,%eax
    movl $1,%ebx
    
    movl $1,%eax
    movl $0,%ebx
    int $0x80

4.数据传输
        mov自动识别;movl:32位;movw:16位;movb:8位
5.寻址方式
        movl $1,%eax                                        #立即数寻址
        movl %ebx,%eax                                   #寄存器寻址
        movl 0x08048054,%eax                        #绝对寻址
        movl (%ebx),%eax                                #间接寻址
        movl 0x8(%ebx),%eax                          #基址偏移量寻址
        movl (%eax,%ebx),%edx                      #变址寻址
        movl 0x8(%eax,%ebx),%edx                #变址基址寻址   
        movl (%eax,%ebx,0x2),%edx            #比例变址寻址  
        movl 0x8(%eax,%ebx,0x2),%edx      #比例变址基址寻址
6.含变量的数据传输
        movl $value1,%eax                              #将value1的地址写入寄存器eax
        lea value1,%edi
7.调试
        x/4bt(4字节2进制),x/4bx(4字节16进制)查看内存内容,注意高低位,字节数

二.其他指令    

1.栈操作指令
        栈操作向低地址方向进行压栈操作
        sp,esp寄存器存放栈顶地址
        push/pop进行压栈出栈操作
2.跳转指令
        eip寄存器存放下一指令地址
        jmp 行数
        jmp 0x(直接指定跳转地址)
        jmp *%eax(跳转到寄存器中保存的地址)   
        条件跳转在eflags寄存器中:SF符号位,ZF零标志位,CF进位,OF溢出位                                 

上一篇:开源-开源公司-Alibaba


下一篇:冬季实战营第二期:Linux操作系统实战入门