|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 18510682557 于 2022-3-17 00:41 编辑
- assume cs:codesg
- codesg segment
- mov ax, 4c00H (3字节指令)
- int 21H (2字节指令)
-
- start: mov ax, 0 (3字节指令)
- s: nop (2字节指令) (EBF6)执行jump前,IP会先指向下一条指令,这时在执行EBF6向上跳10个字节的位置,正好是 mov ax, 4c00 也就是0000的位置 第三步
- cs:ip ->nop
-
- mov di, offset s
- mov si, offset s2
- mov ax, cs:[si]
- mov cs:[di], ax (将EBF6写到s:处) 第二步
-
- s0: jmp short s
-
- s1: mov ax, 0 (3字节指令)
- int 21H (2字节指令)
- mov ax, 0 (3字节指令)
-
- s2: jmp short s1 (2字节指令) "EBF6" = JUMP -10(F6是补码,对应原码就是-10,执行jump前,IP会先指向下一条指令,所以编译器通过计算得知IP需要向上移动10个字节空间才能指向S1的位置,所以是EBF6) 第一步
- cs:ip -> nop
- codesg ends
- end start
复制代码 |
|