汇编语言
Posted feiief
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言相关的知识,希望对你有一定的参考价值。
段寄存器
8086 CPU有四个段寄存器:
CS, DS, SS, ES
段寄存器用来提供段地址
CS和IP
CS: 代码段寄存器
IP: 指令指针寄存器
修改CS,IP: jmp 段地址:偏移地址
仅修改IP的内容:
?? jmp 某一合法寄存器
?? jmp ax 用ax中的值修改IP
下面的3条指令执行后,cpu几次修改IP?都是在什么时候?最后IP中的值是多少?
mov ax,bx
sub ax,ax
jmp ax
答:一共修改四次
第一次:读取mov ax,bx之后
第二次:读取sub ax,ax之后
第三次:读取jmp ax之后
第四次:执行jmp ax修改IP
最后IP的值为0000H,因为最后ax中的值为0000H,所以IP中的值也为0000H
debug
-r: 查看寄存器内容
-r ax :修改ax的内容
-t : 执行指令
-d :查看内存中内容
-u: 查看内存中内容,将机器指令翻译成汇编指令
-e : 改写内存中内容(机器指令)
-a: 以汇编指令的格式在内存中写入一条机器指令
DS和[address]
DS寄存器通常用来存放要访问的数据的段地址
若要读区10000H单元内容到寄存器:
mov bx,1000H
mov ds,bx
mov al, [0]
不可以直接 mov ds,1000H
8086cpu 不支持直接将数据送入段寄存器
将al中数据送入内存单元10000H:
mov bx, 1000H
mov ds, bx
mov [0], al
8086cpu有16根数据线,一次性可以传一个字
mov
mov 段寄存器,寄存器 是可以的
但是 mov 寄存器, 段寄存器 可以吗? 答案是可以。
栈
段寄存器SS: 存放栈顶的段地址
寄存器SP:存放栈顶的偏移地址
任意时刻,SS:SP指向栈顶元素
mov ax, 1000H
mov ss,ax // 不能直接mov数据到段寄存器
mov sp,0010H
push ax
push bx
push ds
以上是关于汇编语言的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段