iOS 汇编Day01

iOS 汇编

8086CPU

机器语言 由0和1组成 将寄存器BX的内容送入寄存器AX
汇编语言 用符号代替了0和1 汇编指令 mov ax bx
高级语言 C C++ Java a = b
汇编语言和机器语言是一一对应的 可逆的 但是汇编语言几乎不可能还原成高级语言

高级语言编译到汇编语言编译到机器语言 运行到计算机

汇编语言的特点

直接访问 控制各种硬件设备 能最大限度发挥硬件的功能
对生成的二进制代码进行完全的控制
目标代码简短 占用内存少
汇编语言不具备可移植性
不区分大小写 需要对CPU结构有一定的了解

用来编写驱动程序 操作系统
对性能要求极高的程序或者代码片段 可与高级语言混合使用 内联汇编
软件安全 病毒分析与防治 逆向 加壳 脱壳
了解高级语言的效率

8086处理器 16bit的CPU 王爽 《汇编语言》

ARM汇编
CPU硬件结构 内存和CPU 程序装载到内存中 所有指令都装载到内存中 cpu对内存进行读写 CPU通过驱动控制其他设备 显示器 音响 话筒

内存 <------> CPU
CPU通过管脚和总线相连 通过总线跟外部器件进行交互
总线 一个个导线的集合 地址总线 控制总线 数据总线 地址总线 读取地址 控制总线读取控制 数据总线传输数据
地址总线决定了CPU的寻址能力 8086的寻址能力是1M 总线宽度是20 2的20次方 即1M
数据总线决定了CPU单次数据传送量 8086的数据总线宽度是16 所以单次最大传递2个字节的数据
控制总线 宽度决定了CPU对其他器件的控制能力 能有多少种控制

8086的最大寻址地址是 1M 单次最大传递2个字节的数据
H代表的是十六进制 89D8H 两个16进制是一个字节 一个字节8位

1.CPU -- 主存储空间 显存 显卡BIOS 网卡BIOS 系统BIOS ROM只读 RAM可读
低地址 到 高地址 高地址留给操作系统使用 显存写入会立即显示到显示器上

2.寄存器 CPU内部结构 由 寄存器 运算器 控制器构成 通过改变寄存器的内容实现对CPU的控制 8086是16位结构的CPU 有14个寄存器 都是16位可以放置两个字节

通用寄存器 AX BX CX DX CPU会将内存中的数据存储到通用寄存器中,然后再对通用寄存器中的数据进行运算
高八位和低八位 为了保证兼容 AX BX CX DX都可分为2个独立的8位寄存器来使用 AX可分为 AH AL
一个字节 byte由8bit位构成
字 word 由两个字节构成 分别称为字的高字节和低字节 一个字可以存在一个16位寄存器中

物理地址 8086一次性处理 传输 暂时存储的地址为16位 数据总线只有16位

8086采用一种在内部用2个16位合成地址的方法来生成20位物理地址

物理地址 = 段地址 *16 + 偏移地址 AAAA:000C = AAAAC

内存的分段管理

基础地址 + 偏移地址 10000H ~ 100FFH 大小为100H 基础地址 = 段地址 *16
段地址 1000H 偏移地址 1000:0020H -> 10020H 用偏移地址定位段中的内存单元
偏移地址为16位 所以一个段的长度最大为64KB 段地址放在段寄存器内 CS 代码 DS 数据 SS 堆栈 ES 附加段寄存器 当CPU需要访问内存时由这4个段寄存器提供内存单元的段地址

CS代码段寄存器 IP为指令寄存器 他们指示了CPU当前要读取指令的地址 CS:IP 指令地址
改变寄存器来进行函数调用 执行命令后会自动更改 IP地址
通过CS:ip读取指令 并进入指令缓冲器 IP = IP + 指令成都
FFFF0H 单元中的指令是8086开机后的第一条指令
CSIP执行的数据会被当成指令执行

CSIP指令


**jmp指令 **8086提供了mov指令 来修改大部分寄存器的值 mov指令不能用于设置CS IP的值
8086使用Jmp指令来修改CS IP的值 称为转移指令
jmp 段地址:偏移地址 的指令来完成 仅修改IP的内容 形如 jmp 某一合法寄存器 mov ax,0001H jmp ax

windows debug指令

-R 查看 当前CPU寄存器信息 并修改
-D 0110 查看 内存信息
-E 更改内存的内容 -e 0200:0 B85544 = mov ax,4455
—U 展示机器指令对应的汇编指令
-A 0100:0 写汇编指令 mov ax,1122
-T 执行一条命令 类似与step inito
p 类似与 step over
q退出

DS和 address 数据段

DS和 address DS段寄存器 通常用来存放要访问数据的段地址
将DS 指向一段 就会将其作为数据读出 mov al,[0] 相当于从段地址为DS中偏移为0取数据并赋值到a1中 mov ad,[address]

8086 高地址是高字节 低地址是低字节
**大小端模式 ** 大端模式 数据高字节放低地址 数据低字节放高地址
小端模式 数据高字节放高地址 数据低字节放低地址

数据0x1234   小端模式    0x34 0x12        大端模式  0x12  0x34  内存 0x4000  0x4001 

sub 减操作

MASM编译器

环境教程
NOP空值
assum cs:code
code segment ;伪指令
mov ax,1122H;
;退出程序
mov ah,4ch
int 21h
code ends
end
注释一;开头 segment 和 ends 代表定义一个段 至少有一个段作为代码段存放代码
assume 将cs 和code关联起来 mov ah,4ch int 21h 可用于退出程序
int 是中断的意思 是由于软件或者硬件的信号 似的CPU暂停当前的任务 去处理新任务
硬中断 和 软中断 有指令产生的软中断 中断时一种电信号 如果有人可以处理中断 就去处理中断信号
中断码 内存中有一张中断向量表 用来存放中断码对应中断处理程序的入口地址
系统现有的程序给你 比如调用退出 退出中断码 int 21h ah = 4ch 打印中断码 int 21h ah = 9h 中断码21调用系统方法 int 10h用于执行BIOS中断 int 3 是断点中断 用于调试程序
DOS 系统功能调用

栈 LIFO 先进后出

1.栈顶 指向最下面 汇编没有栈底 只有当前的栈顶
ss作为栈断的段地址 任意时刻 SS:SP指向栈顶元素 8086提供了PUSH和POP指令来操作栈段的数据 栈的操作长度为两个字节 栈是往低地址放数据的 pop 和 push 不断的push sp的指针会减小 栈顶是 栈段前的一个地址 栈空

2.栈顶越界 push超出栈空间的地址 栈顶超界 pop 超界 8086不保证这个问题 所以自己要小心 push 寄存器 pop 寄存器 将寄存器值入栈 将栈内的值给寄存器
pop和push 使用栈顶和栈底进行 数据赋值

在内存中读写数据时会往高地址写 具体数据的高字节放在低地址还是高地址 取决于大小端模式
在栈中push 数据往低地址写 pop 往高地址读

loop指令 循环指令

loop指令和 cx配合使用 用于执行重复的操作 例如 for while

mov cx,循环次数               mov cx,5h
标号:  循环执行的程序段         s: add ax, ax  
loop 标号                     loop s

让cx 减一 判断CX的值 如果不为0循环执行 直到cx为0终止循环 如果初始化为0 会造成死循环

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • 编程语言的发展 机器语言由0和1组成 汇编语言(Assembly Language)用符号代替了0和1,比机器语言...
    阿凡提说AI阅读 3,920评论 0 15
  • 越底层越单纯!真正的程序员都需要了解的一门非常重要的语言,汇编! 机器语言 我们所写的语言最终安装在机器上的是什么...
    瑞阳gg阅读 568评论 0 0
  • 1.地址总线,数据总线,控制总线在哪里,它们有什么作用?答:它们都是cpu连接外部组件的线路。地址总线:地址总线A...
    MagicalGuy阅读 1,399评论 0 1
  • 王爽汇编全书知识点大纲 第一章 基础知识 机器语言 汇编语言的产生 汇编语言的组成 存储器 cpu对存储器的读写 ...
    2c3ba901516f阅读 2,400评论 0 1
  • 【目录】皎洁月光下的朝圣路目录 - 简书 2012年对于我来说是变动的一年,因为工作的原因独自被派到别的城市。由于...
    谢周日阅读 395评论 0 1