内存中的存储
字型是2个字节!那1地址就是从高到低! 124E! 规律记住就行了!!!
DS寄存器
段寄存器不能直接mov
字的传递
mov|add|sub指令
段寄存器DS不可以直接赋值!但是可以通过别的寄存器来回赋值!
数据段
栈
先进后出!
进栈的时候!从栈低开始进去! 从高位开始读取数据! 计算机一般是上面是低位!下面是高位!
出栈时 先进后出!
AX是1122
BX是2266
CX是0123
CPU怎么执行指令所在的位置!
段寄存器 SS:SP
每次进制SP会先减二!
出栈 SP会先 加二!
当栈空的时候SS:SP指向的是10010地址!
栈最底下是不放东西!用于SS:SP不说空栈!
当有一个元素时!那就是空栈地址上面那个!低一位!
SS:SP任何时候指向栈顶元素!
这里是字单元!看清楚!字单元是16位! SS:SP指向000E时! 不是000F看清楚!
当你POP时,原始的数据是复制过去!
不是剪贴!所以数据还是存在的!格式化也没用!
栈顶超界
栈溢出 (重点来了) (溢出攻击)
栈与内存
push|pop
栈段地址 SS
数据的段地址 是DS
为啥会这样呢!
因为SP是0010 所以会放到000F里!往后放!的
sp会自动-2
哦哦哦!懂了!
找到它栈的位置!再push和pop!
栈的位置看SS:SP
栈空的时候!SP是要放到字单元的+2!你想放到1000:0 那就+2放到 1000:2就可以了!刚刚学!记住!!🙄
栈段
每次传输16位的数据
每次传输16位的数据!16*16=256B
256=2的16次方! 256=64 KB
程序
汇编指令和伪指令!
end是结束!ends是段的结束!
源程序
程序刚开始是以汇编指令的形式存在源程序里!
经过编译和连接后!变成机器码!变成可执行文件!.exe!
c语言先翻译成汇编!再编译!
编写源程序
编译就是把
伪指令和汇编指令转换成机器码!
汇编和链接
写好的汇编程序!
要通过编译器去编译成机器码! 可能不好直接编译!那分开编译!最后用连接器连接起来!生成可执行文件!
就是CPU会从cmd.exe 临时把权限和1.exe 然后运行完。再返回给cmd.exe