内存中的存储
字型是 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