
内存中的存储

字型是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



