|
发表于 2013-10-28 17:23:40
|
显示全部楼层
本帖最后由 LinuxDeepin 于 2013-10-28 20:48 编辑
assume cs:code
stack segment
dw 8 dup(0)
stack ends
code segment
start:
mov ax,stack ;; 栈段分配 16 个字节,sp = 0010 H
mov ss,ax
mov sp,16
mov word ptr ss:[0],offset s ;; s 标号物理地址写入 ss:[0] 处
mov ss:[2],cs
call dword ptr ss:[0] ;; 跳转到 ss:[0] 指定的物理地址处, 并将下一条指令的物理地址入栈, sp-4 = 000c H
nop ;; nop 空指令,占用一个字节
s: mov ax,offset s ;; s 标号偏移地址写入 ax 寄存器,
sub ax,ss:[0cH] ;; ss:[0cH] call 下一条代码的偏移地址与 ax 相减 ax = 0001 H
mov bx,cs ;; cs 段地址写入 bx 寄存器
sub bx,ss:[0eH] ;; ss:[0eH] call 下一条代码的段地址与 bx 相减 bx = 0000 H
mov ax,4c00H
int 21H
code ends
end start
|
|