汇编随笔续

汇编其实是一种很好得语言 虽然在开发效率体验感及其差 但是对于高级语言写出更优秀得代码有很大帮助
首先从汇编得寄存器操作开始讲起 在汇编中 是如何进行寻找指令呢 明确得说是通过cs 代码段寄存器和ip指令指针寄存器进行寻找在主存得指令 而且cpu随时在执行 随时随地会认为cs:ip指向得地址是一个指令存储地址
但是cpu不会认为cs:ip指向得是数据段而当成指令执行 如果执行就会报错 蓝屏 死机 而且cpu不会认为所有得代码段得内容都是指令 进行运行 如果是ds数据段得内容那么就不会当成指令去执行
接下来详解一下 cpu执行指令流程
1 我们得cs:ip指向得地址会执行那块地址得指令 首先会在cs:ip寄存器进行初始化地址 8086开机时候会初始化cs为ffff0h ip是0000h 所以会执行初始化得第一条指令 然后执行过程中第一步 是把cs和ip寄存器得地址进行在地址加法器中进行转换20位地址 因为8086得寄存器都是16位地址 而地址线和存储器得地址都是20位 所以要转换成20位进行寻址 然后通过地址加法器结果进行通过地址总线传输到主存 寻找到指向第一条指令 然后把对应指令得内容传送到指令缓存器中 然后执行
2.为什么要分段呢 其实并没有段这个说法 而是我们进行寻址得时候 8086只有16位 而地址总线20位 所以不得不分段 比如cs段地址 0fffh ip段0001h 那么 就会转换成0fff0h +0001h 成为 0fff1h 地址 接着就会通过地址总选ab进行传送 而且汇编里面得助记符不会区分大小写
3.汇编里面如果是32位寄存器 比如 ax寄存器 那么就是eax寄存器 前面加个e 符号
4.jmp 指令 会把传入得数据 赋值给ip寄存器 或者段寄存器 比如我想访问ffffh 得0001h 地址 那么就是 jmp:ffff:0001

比如我写一段无线死循环得代码
现在我初始化cs 1000h ip 0000h
mov ax,0000h
mov bx,ax
jmp bx
这个就会导致无线死循环 或者说把最后jmp 改成 jmp 1000:0 也是等价得

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值