文章目录
前言
参考书籍:
王爽。汇编语言。北京:清华大学出版社, 2013:71-75
本人菜狗一枚,不敢咬文嚼字,只能站在巨人的肩膀上窥探一下未曾了解的世界。
Debug 中 T 命令执行修改段栈寄存器 SS 的指令时,下一条指令也紧接着被执行。
mov ax, ffff
mov ds, ax
mov ax, 2200
mov ss, ax
mov sp, 0100
mov ax, [0] ; ax = C0EA
add ax, [2] ; ax = C0FC
mov bx, [4] ; bx = 30F0
add bx, [6] ; bx = 6021
push ax ; sp = 00FE (低地址) ... FC C0 (高地址 SS:0100)
push bx ; sp = 00FC (低地址) ... 21 60 FC C0 (高地址 SS:0100)
pop ax ; ax = 6021
pop bx ; bx = C0FC
push [4] ; sp = 00FE (低地址) ... F0 30 (高地址 SS:0100)
push [6] ; sp = 00FC (低地址) ... 31 2F FC C0 (高地址 SS:0100)
将一段内存空间初始化为 0 作为栈空间,在 SS:IP 指向栈顶的时候却被填充数据,其中包括 CS 值、IP 值(涉及到中断知识)
mov ax, 2000
mov ss, ax
mov sp, 10